diff --git a/.gitattributes b/.gitattributes index 412eeda7..32781829 100644 --- a/.gitattributes +++ b/.gitattributes @@ -20,3 +20,6 @@ *.PDF diff=astextplain *.rtf diff=astextplain *.RTF diff=astextplain + +# PepeCoin +*.stash diff=astextplain diff --git a/.gitignore b/.gitignore index 35107082..146ea8ed 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,14 @@ src/pepecoind pepecoin-qt Makefile qrc_bitcoin.cpp +Makefile.Debug +Makefile.release +pepecoin-qt_plugin_import.cpp + +src/secp256k1/build-aux/ +src/qt/locale/bitcoin_en.qm + + ################# ## Eclipse ################# @@ -50,6 +58,7 @@ local.properties *.suo *.user *.sln.docstates +.vscode # Build results @@ -223,3 +232,9 @@ pip-log.txt #Mr Developer .mr.developer.cfg + +# More files to ignore +.vscode +.qmake.stash +.autosave + diff --git a/COPYING b/COPYING index 7ddca2f9..69bb1bbe 100644 --- a/COPYING +++ b/COPYING @@ -7,8 +7,12 @@ Copyright (c) 2014 BlackCoin Developers Copyright (c) 2014 Digibyte Developers Copyright (c) 2014 DashCoin Developers Copyright (c) 2014 NetCoin Developers -Copyright (c) 2015 Transfercoin Developer -Copyright (c) 2015-2016 Memetic Developers +Copyright (c) 2015 Transfercoin Developers +Copyright (c) 2015-2016 PepeCoin Developers +Copyright (c) 2015-2016 Memetic/Pepecoin Developers +Copyright (c) 2017-2019 Memetic/PepeCoin Developers + +GNU GENERAL PUBLIC LICENSE Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -17,8 +21,20 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +You may copy and distribute the Program (or a work based on it) in object code +or executable form provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable source code, + which must be distributed under the terms of Sections 1 and 2 above on a + medium customarily used for software interchange; or, + b) Accompany it with a written offer to give any party, a complete + machine-readable copy of the corresponding source code, or a link + to the current source code. (Pepecoin / Memetic wallets contain these + links by default) + The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +all copies or substantial portions of the Software. The full license terms are +below. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, @@ -27,3 +43,627 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +======================================================================================= + + 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 diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..69bb1bbe --- /dev/null +++ b/LICENSE @@ -0,0 +1,669 @@ +Copyright (c) 2009-2010 Satoshi Nakamoto +Copyright (c) 2009-2012 The Bitcoin developers +Copyright (c) 2012 Litecoin Developers +Copyright (c) 2013 Peercoin Developers +Copyright (c) 2014 DarkCoin Developers +Copyright (c) 2014 BlackCoin Developers +Copyright (c) 2014 Digibyte Developers +Copyright (c) 2014 DashCoin Developers +Copyright (c) 2014 NetCoin Developers +Copyright (c) 2015 Transfercoin Developers +Copyright (c) 2015-2016 PepeCoin Developers +Copyright (c) 2015-2016 Memetic/Pepecoin Developers +Copyright (c) 2017-2019 Memetic/PepeCoin Developers + +GNU GENERAL PUBLIC LICENSE + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +You may copy and distribute the Program (or a work based on it) in object code +or executable form provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable source code, + which must be distributed under the terms of Sections 1 and 2 above on a + medium customarily used for software interchange; or, + b) Accompany it with a written offer to give any party, a complete + machine-readable copy of the corresponding source code, or a link + to the current source code. (Pepecoin / Memetic wallets contain these + links by default) + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. The full license terms are +below. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +======================================================================================= + + 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 diff --git a/README.md b/README.md index 71eba112..4f58c10e 100644 --- a/README.md +++ b/README.md @@ -1,135 +1,207 @@ -Memetic (MEME) | (PEPE) PepeCoin -============================== -------------------------------------------- -A Hybrid Proof of Work / Proof of Stake / Memetic Stake Rate Cryptocurrency +![Memetic Logo](http://i.imgur.com/zLMetXi.png "Memetic Logo") ![PepeCoin Logo](https://imgur.com/9KNdKWJ.png "PepeCoin Logo") +*** +# PepeCoin - PEPE / Memetic - MEME +#### v. 3.1.1.0 + +Memetic, also known as PepeCoin, is a digital decentralized crypto-currency, listed as as Memetic / MEME on Bittrex, Upbit, Coinmarkets, and CoinMarketCap. -http://memeticproject.com (under construction) +Memetic, AKA PepeCoin, incorporates both blockchain 2.0 and blockchain 3.0 technologies and is under continued development. - - Default port 29377 and RPC port 29376 +Memetic / Pepecoin is a Proof of Stake (POS) cryptocurrency with privacy features and masternode technology. Mastertoad (masternode) and stakers are rewarded for processing transactions and collectively ensuring the security of the network. - - 60 seconds block time POW (over July 2016) - - ~3 Months Proof of Work mining distribution ended with 12m MEME - - X11 mining algorithm - - Memetic Stake Rate PSR / POS enable at block 9000 - - POW End at block 70,000 +Previously, we were a Proof of Stake and Proof of Work hybrid but due to the rise of 51% attacks we have shifted to POS until more technology improvements are discovered. - - 40 confirmations for newly Proof of Work mined blocks - - 100 confirmations for newly Proof of Stake minted blocks - - 3.5% Premine for Development Fund - Public Ledger and Transparent +Memetic / PepeCoin is decentralized, encrypted image storage in IPFS, cryptographically verified against the PepeCoin blockchain. Protect your memes and political information from censorship. - POSV Details - ------------ - - Proof of Stake activates at block 9000. - - 60 seconds per block time Proof of Stake - - 6 hour minimum stake age - - Additional security improvements - - Staking rewards are variable depending on the number of MEME held (below) +Memetic / PepeCoin is the base infrastructure for the Kekdaq decentralized meme asset exchange. +PepeCoin is a fully open source, decentralized, encrypted project that supports the preservation of all freedom of speech that is within the bounds of US law. -------------------------------------------- +#### Join the offical [Telegram](https://t.me/pepecoins) room for technical support and to participate our community. -Memetic X11 Proof of Work Block Reward Schedule ------------------------------------------------- -``` -Block 1 - 99 - 3.5% "Tendies Fund" MEME Development Fund and Checkpointing Blocks +See [Bitcointalk ANN](https://bitcointalk.org/index.php?topic=1391598.0) for more details. -* Block 100 Public Launch * +*** +#### Technical Specifications +##### + - Default port 29377 + - RPC port 29376 + - 60 second block time +##### +- Proof of Stake - POS - 7% at block 600,000, reducing yearly. Currently 3.25% per year, reducing 50% each year +- Proof of Work - POW ended at block 1,700,000 in late 2018 to reduce chain reorganization issues and improve the stability of Kekdaq +- X11 mining algorithm (Sequential mixing of Blake256, BMW, Grostl, JH, Keccak, Skein, Luffa, Cubehash, SHA-3, SIMD, and ECHO) +- PEPE / MEME is Full Proof-of-Stake beginning at block 1700000. The POW reward rate was migrated to the POS reward, at 3.25% per year, reducing 50% each year. +- 600 confirmations for newly Proof of Stake minted blocks +- 6 hour minimum stake age with 12 hour average +- Additional security improvements + + **Features** -Block 100 to 900 - 1500 MEME -Block 900 to 1300 - 1200 MEME -Block 1300 to 1900 - 1050 MEME -Block 1900 to 2900 - 900 MEME -Block 2900 to 4100 - 750 MEME -Block 4100 to 6680 - 600 MEME -Block 6680 to 9260 - 400 MEME -Block 9260 to 11840 - 500 MEME -Block 11840 to 14420 - 200 MEME -Block 14420 to 17000 - 300 MEME -Block 17000 to 19580 - 100 MEME -Block 19580 to 22160 - 200 MEME -Block 22160 to 24740 - 90 MEME -Block 24740 to 27320 - 130 MEME -Block 27320 to 29900 - 80 MEME -Block 29900 to 32480 - 100 MEME -Block 32480 to 35060 - 70 MEME -Block 35060 to 37640 - 100 MEME -Block 37640 to 40220 - 60 MEME -Block 40220 to 42800 - 100 MEME -Block 42800 to 45380 - 50 MEME -Block 45380 to 47960 - 100 MEME -Block 47960 to 50540 - 40 MEME -Block 50540 to 53120 - 100 MEME -Block 53120 to 55700 - 40 MEME -Block 55700 to 58280 - 100 MEME -Block 58280 to 60860 - 40 MEME -Block 60860 to 63440 - 100 MEME -Block 63440 to 66020 - 40 MEME -Block 66020 to 68600 - 100 MEME -Block 68600 to 70000 - 40 MEME +- Decentralized encrypted private messaging +- Stealth Addresses +- Fully blockchain based, public decentralized encrypted messaging chat wall in wallet +- In wallet public messaging wall - set messagewall=1 in pepecoin.conf to enable +- JSON-RPC functions to externally query all public wall messages +- Integrated block explorer +- Image timestamping on the blockchain for proof of ownership +- In-wallet hash image verification checking functions +- JSON-RPC functions to externally query blockchain for hashed image datas +- IPFS-based data hashing storage currently under development +- Integrated Bittrex trading functions +- Mastertoads pay 37.5% of all mined POS blocks, distributed among MT owners +- Kekdaq decentralized meme "asset" platform live in testing / development stage +See [bitcointalk.org](https://bitcointalk.org/index.php?topic=1391598.0) post for more info: https://bitcointalk.org/index.php?topic=1391598.0 -POW End Block 70,000 Approx 3 Months +------------------------------- +## Downloading & Compiling +------------------------------- + +### Windows Wallet -Total from 1 Yr. POW: Approx 11.5m MEME +[https://github.com/pepeteam/pepecoin/releases](https://github.com/pepeteam/pepecoin/releases) -Development fund: 562,390 MEME -Total MEME in POW & Fund: Approx 12m MEME +#### Linux Builds: +PepeCoin uses libsecp256k1, libgmp, Boost1.55+, Openssl1.01, Berkeley DB 4.8+, and QT5 to compile. -``` +Ubuntu 18.04+ or Debian 9+ is recommended. +#### Instructions for Building Command Line Daemon +> +>sudo apt-get install build-essential libtool autotools-dev automake pkg-config libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libminiupnpc-dev libgmp3-dev libdb-dev libdb++-dev libgmp3-dev lzma-dev libssl1.0-dev zlib1g-dev zlib1g libgmp-dev +> +>git clone https://github.com/pepeteam/pepecoin.git +> +>cd pepecoin/src +> +>make -f makefile.unix USE_UPNP=- +> +>strip pepecoind +> -Memetic Stake Rate (PSR) % POSV Reward Schedule ---------------------------------- +Or you can use the shell script at https://gist.github.com/cryptopepe/82b59b51680e13e5f1e08224bfdd71fc -| MEME Amount | Stake % Year 1| Year 2 | Year 3+ | -|:-------------|:-------------:|------------:|------------:| - |0 to 10000 | 3.0%| 2.0% | 1.0% | - |10,000+ | 4.0%| 3.0% | 2.0% | - |50,000+ | 5.0% | 4.0% | 3.0% | - |100,000+ | 6.0% | 5.0% | 4.0% | +#### Instructions for Building GUI Wallet ----------------------------------- +>sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler qt5-default build-essential libtool autotools-dev automake pkg-config libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libminiupnpc-dev libgmp3-dev libdb-dev libdb++-dev libgmp3-dev lzma-dev libssl1.0-dev zlib1g-dev zlib1g libgmp-dev +> +>git clone https://github.com/pepeteam/pepecoin.git +> +>cd pepecoin +> +>qmake +> +>make -j2 -f Makefile USE_UPNP=0 +> +-------------------- +# Links -Proof of Sadfrog (POSF) ----------------- - - Security improved open source "Fair-Weight" Proof of Sadfrog protocol technology +[Windows Wallet](https://github.com/pepeteam/pepecoin/releases) - - Coin holders benefit from multiple block stakes and are rewarded for running regularly as a node. +[Bitcointalk ANN](https://bitcointalk.org/index.php?topic=1391598.0) - - Proof of Sadfrog also keeps the network alive by slowing coin age after 1 month with an aging half life of 90 days. Keep the magic alive. - - MemeticLife technology ensures MEME holders contribute to the health of the network at least once each month to earn the highest possible rewards, and incentivises running full nodes and/or keeping wallets open to increase MEME network security. +### Websites +https://memetic.ai - ------------------------------- -Additional Information ------------------------------- +https://pepecoin.net -Memetic uses libsecp256k1, libgmp, Boost1.55, OR Boost1.57, Openssl1.01p, Berkeley DB 4.8, QT5 to compile +https://kekdaq.com -Ubuntu / Debian Build Dependencies +### Exchanges -sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils +[Bittrex (USA)](https://bittrex.com/Market/Index?MarketName=BTC-MEME) -- Largest regulated and secure US exchange -sudo apt-get install libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev libminiupnpc-dev libgmp3-dev +[Upbit (ASIA)](https://upbit.com/exchange?code=CRIX.UPBIT.BTC-MEME) -- Popular South Korean exchange +[Changenow (Worldwide)](https://changenow.io/) -- Shapeshift type service accepting cc purchases -``` +[Coinswitch (Worldwide)](https://coinswitch.co/) -- Shapeshift type service +[Coinexchange (EU)](https://www.coinexchange.io/market/MEME/BTC) + +[Cryptopia](https://www.cryptopia.co.nz/Exchange?market=PEPE_BTC) -- Remove requested after exchange hacked + +### Block Explorer + +[http://explorer.memetic.ai/](http://explorer.memetic.ai/) + +### Charts + +[CoinMarketCap](https://coinmarketcap.com/currencies/pepecoin/) + +[CoinGekko](https://www.coingecko.com/en/coins/memetic) + +[WorldCoinIndex](https://www.worldcoinindex.com/coin/memetic) + +[CryptoCompare](https://www.cryptocompare.com/coins/meme/charts/BTC) + +[BitInfoCharts](https://bitinfocharts.com/markets/bittrex/meme-btc-1m.html) + +[CryptoCoinView](https://cryptocoinview.com/MEME) + +[CoinLib](https://coinlib.io/coin/MEME/Pepe+Memetic) + +[TradingView](https://www.tradingview.com/symbols/MEMEBTC/) + +### Social + +[Twitter](https://twitter.com/pepecoins) + +[Telegram](https://t.me/pepecoins) - Official MEME / PEPE Support and Community Room + + +*** + +**Nodes** +addnode=seed.pepecoin.net + +addnode=seed.memetic.ai + +addnode=seed.kekdaq.com + + +![pepecoin-256](https://i.imgur.com/xnSJvT9.jpg "pepecoin-256") + +------------------ +------------------ +License +------------------ +##### Memetic / PepeCoin / Kekdaq are open source softwares released under the GNU GPL v2 license. Copyright (c) 2009-2010 Satoshi Nakamoto -Copyright (c) 2009-2012 The Bitcoin developers +Copyright (c) 2009-2012 The Bitcoin Developers Copyright (c) 2012 Litecoin Developers Copyright (c) 2013 Peercoin Developers Copyright (c) 2014 DarkCoin Developers Copyright (c) 2014 BlackCoin Developers Copyright (c) 2014 Digibyte Developers Copyright (c) 2014 DashCoin Developers -Copyright (c) 2014 NetCoin Developers -Copyright (c) 2015 Transfercoin Developer +Copyright (c) 2015 Transfercoin Developers +Copyright (c) 2015-2016 PepeCoin Developers Copyright (c) 2015-2016 Memetic Developers - - ``` - -![alt text](http://i2.kym-cdn.com/photos/images/newsfeed/000/095/218/feels-good-man.jpg "Memetic approves") +Copyright (c) 2017-2019 Memetic / PepeCoin Developers + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +The above copyright notices and this permission notice shall be included in +all copies or substantial portions of the Software. + + See LICENSE file for more info. +------------------ diff --git a/build.sh b/build.sh deleted file mode 100755 index c00ea3aa..00000000 --- a/build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -qtchooser -run-tool=qmake -qt=qt5 - -#make -f Makefile.Release -j2 diff --git a/contrib/bitrpc/bitrpc.py b/contrib/bitrpc/bitrpc.py index acabb30c..3fbda0d9 100644 --- a/contrib/bitrpc/bitrpc.py +++ b/contrib/bitrpc/bitrpc.py @@ -24,7 +24,7 @@ elif cmd == "getaccount": try: - addr = raw_input("Enter a Memetic address: ") + addr = raw_input("Enter a PepeCoin address: ") print access.getaccount(addr) except: print "\n---An error occurred---\n" @@ -126,7 +126,7 @@ elif cmd == "getreceivedbyaddress": try: - addr = raw_input("Enter a Memetic address (optional): ") + addr = raw_input("Enter a PepeCoin address (optional): ") mc = raw_input("Minimum confirmations (optional): ") try: print access.getreceivedbyaddress(addr, mc) diff --git a/contrib/gitian-descriptors/README b/contrib/gitian-descriptors/README index c9d1f52e..442044fd 100644 --- a/contrib/gitian-descriptors/README +++ b/contrib/gitian-descriptors/README @@ -161,7 +161,7 @@ login again: $ ssh debian@localhost -p 22222 $ git clone https://github.com/devrandom/gitian-builder.git -$ git clone https://github.com/SCDeveloper/Memetic.git memetic +$ git clone https://github.com/SCDeveloper/PepeCoin.git pepecoin $ cd gitian-builder @@ -170,7 +170,7 @@ $ ./bin/make-base-vm --lxc --arch i386 --suite trusty $ mkdir inputs; $ cd inputs; -$ cp ../../memetic/libs/secp256k1-master.zip . +$ cp ../../pepecoin/libs/secp256k1-master.zip . $ wget http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.9.20151008.tar.gz -Ominiupnpc-1.9.20151008.tar.gz; $ wget http://download.icu-project.org/files/icu4c/55.1/icu4c-55_1-src.tgz; $ wget http://download.oracle.com/berkeley-db/db-6.1.26.NC.tar.gz; @@ -193,20 +193,20 @@ $ wget http://download.qt.io/archive/qt/5.5/5.5.0/single/qt-everywhere-opensourc $ cd ~/gitian-builder; $ LXC_EXECUTE=lxc-execute; PATH="$(pwd)/libexec/:$PATH"; -$ ./bin/gbuild --commit memetic=HEAD ../memetic/contrib/gitian-descriptors/deps-linux.yml -$ mv build/out/memetic-deps-*.zip inputs/ +$ ./bin/gbuild --commit pepecoin=HEAD ../pepecoin/contrib/gitian-descriptors/deps-linux.yml +$ mv build/out/pepecoin-deps-*.zip inputs/ -$ ./bin/gbuild --commit memetic=HEAD ../memetic/contrib/gitian-descriptors/gitian-linux.yml +$ ./bin/gbuild --commit pepecoin=HEAD ../pepecoin/contrib/gitian-descriptors/gitian-linux.yml $ mkdir -p ../compiled/linux $ mv build/out/* ../compiled/linux/ -$ ./bin/gbuild --commit memetic=HEAD ../memetic/contrib/gitian-descriptors/deps-win.yml -$ mv build/out/memetic-deps-*.zip inputs/ +$ ./bin/gbuild --commit pepecoin=HEAD ../pepecoin/contrib/gitian-descriptors/deps-win.yml +$ mv build/out/pepecoin-deps-*.zip inputs/ -$ ./bin/gbuild --commit memetic=HEAD ../memetic/contrib/gitian-descriptors/qt-win.yml +$ ./bin/gbuild --commit pepecoin=HEAD ../pepecoin/contrib/gitian-descriptors/qt-win.yml $ mv build/out/qt-win*.zip inputs/ -$ ./bin/gbuild --commit memetic=HEAD ../memetic/contrib/gitian-descriptors/gitian-win.yml +$ ./bin/gbuild --commit pepecoin=HEAD ../pepecoin/contrib/gitian-descriptors/gitian-win.yml $ mkdir -p ../compiled/win $ mv build/out/* ../compiled/win/ diff --git a/contrib/gitian-descriptors/deps-linux.yml b/contrib/gitian-descriptors/deps-linux.yml index f57eafbe..d7fa97e8 100644 --- a/contrib/gitian-descriptors/deps-linux.yml +++ b/contrib/gitian-descriptors/deps-linux.yml @@ -1,5 +1,5 @@ --- -name: "memetic-deps" +name: "pepecoin-deps" suites: - "trusty" architectures: @@ -135,5 +135,5 @@ script: | # # cd $STAGING - find include lib bin host | sort | zip -X@ $OUTDIR/memetic-deps-linux${GBUILD_BITS}-gitian.zip + find include lib bin host | sort | zip -X@ $OUTDIR/pepecoin-deps-linux${GBUILD_BITS}-gitian.zip diff --git a/contrib/gitian-descriptors/deps-osx.yml b/contrib/gitian-descriptors/deps-osx.yml index 25ef19e2..879056a1 100644 --- a/contrib/gitian-descriptors/deps-osx.yml +++ b/contrib/gitian-descriptors/deps-osx.yml @@ -1,5 +1,5 @@ --- -name: "memetic-deps" +name: "pepecoin-deps" suites: - "trusty" architectures: @@ -135,4 +135,4 @@ script: | #done # cd $INSTALLPREFIX - find include lib | sort | zip -X@ $OUTDIR/memetic-deps-osx-gitian.zip + find include lib | sort | zip -X@ $OUTDIR/pepecoin-deps-osx-gitian.zip diff --git a/contrib/gitian-descriptors/deps-win.yml b/contrib/gitian-descriptors/deps-win.yml index ea7a3015..a056ecc9 100644 --- a/contrib/gitian-descriptors/deps-win.yml +++ b/contrib/gitian-descriptors/deps-win.yml @@ -1,5 +1,5 @@ --- -name: "memetic-deps" +name: "pepecoin-deps" suites: - "trusty" architectures: @@ -204,5 +204,5 @@ script: | # cd $INSTALLPREFIX find -print0 | xargs -r0 touch # fix up timestamps before packaging - find include lib | sort | zip -X@ $OUTDIR/memetic-deps-win$BITS-gitian.zip + find include lib | sort | zip -X@ $OUTDIR/pepecoin-deps-win$BITS-gitian.zip done # for BITS in diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml index dafb708e..a230089c 100644 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -1,5 +1,5 @@ --- -name: "memetic" +name: "pepecoin" suites: - "trusty" architectures: @@ -19,14 +19,14 @@ packages: - "bsdmainutils" reference_datetime: "2015-05-25 00:00:00" remotes: -- "url": "https://github.com/SCDeveloper/Memetic.git" - "dir": "memetic" +- "url": "https://github.com/SCDeveloper/PepeCoin.git" + "dir": "pepecoin" files: -- "memetic-deps-linux32-gitian.zip" -- "memetic-deps-linux64-gitian.zip" +- "pepecoin-deps-linux32-gitian.zip" +- "pepecoin-deps-linux64-gitian.zip" script: | - echo "6324ba3b1d571dc833528bf13efd5534a28fb35b59885543533cc7ec018d969b memetic-deps-linux32-gitian.zip" | sha256sum -c - echo "713f164feb9fab5d200c8587e04a4ac53cbab78ddada6022d80895372e684ecd memetic-deps-linux64-gitian.zip" | sha256sum -c + echo "6324ba3b1d571dc833528bf13efd5534a28fb35b59885543533cc7ec018d969b pepecoin-deps-linux32-gitian.zip" | sha256sum -c + echo "713f164feb9fab5d200c8587e04a4ac53cbab78ddada6022d80895372e684ecd pepecoin-deps-linux64-gitian.zip" | sha256sum -c STAGING="$HOME/install" OPTFLAGS='-O2' BINDIR="${OUTDIR}/bin/${GBUILD_BITS}" # 32/64 bit build specific output directory @@ -43,21 +43,21 @@ script: | # mkdir -p $STAGING cd $STAGING - unzip ../build/memetic-deps-linux${GBUILD_BITS}-gitian.zip + unzip ../build/pepecoin-deps-linux${GBUILD_BITS}-gitian.zip cd ../build # - cd memetic + cd pepecoin mkdir -p $OUTDIR/src git archive HEAD | tar -x -C $OUTDIR/src cp $OUTDIR/src/doc/README $OUTDIR cp $OUTDIR/src/COPYING $OUTDIR cd src cp -r crypto obj - make -f makefile.unix STATIC=1 USE_NATIVE_I2P=1 OPENSSL_INCLUDE_PATH="$STAGING/include" OPENSSL_LIB_PATH="$STAGING/lib" $MAKEOPTS memeticd USE_UPNP=1 BOOST_LIB_SUFFIX="-mt" DEBUGFLAGS= + make -f makefile.unix STATIC=1 USE_NATIVE_I2P=1 OPENSSL_INCLUDE_PATH="$STAGING/include" OPENSSL_LIB_PATH="$STAGING/lib" $MAKEOPTS pepecoind USE_UPNP=1 BOOST_LIB_SUFFIX="-mt" DEBUGFLAGS= mkdir -p $STAGING/bin/$GBUILD_BITS - install -s memeticd $OUTDIR/bin/$GBUILD_BITS + install -s pepecoind $OUTDIR/bin/$GBUILD_BITS # cd .. qmake INCLUDEPATH="$STAGING/include" LIBS="-L$STAGING/lib" BOOST_LIB_SUFFIX="-mt" RELEASE=1 USE_QRCODE=1 USE_NATIVE_I2P=1 make $MAKEOPTS - install Memetic $OUTDIR/bin/$GBUILD_BITS + install PepeCoin $OUTDIR/bin/$GBUILD_BITS diff --git a/contrib/gitian-descriptors/gitian-osx.yml b/contrib/gitian-descriptors/gitian-osx.yml index 1f9b9e29..96953b0b 100644 --- a/contrib/gitian-descriptors/gitian-osx.yml +++ b/contrib/gitian-descriptors/gitian-osx.yml @@ -1,5 +1,5 @@ --- -name: "memetic" +name: "pepecoin" suites: - "trusty" architectures: @@ -21,11 +21,11 @@ packages: - "genisoimage" reference_datetime: "2013-06-01 00:00:00" remotes: -- "url": "https://github.com/SCDeveloper/Memetic.git" - "dir": "memetic" +- "url": "https://github.com/SCDeveloper/PepeCoin.git" + "dir": "pepecoin" files: - "qt-osx-5.5.0-gitian.tar.xz" -- "memetic-deps-osx-gitian.zip" +- "pepecoin-deps-osx-gitian.zip" - "osxcross.tar.xz" script: | # Defines @@ -51,38 +51,38 @@ script: | export QT_RCC_TEST=1 mkdir -p $BUILDDIR $BINDIR $DEPSDIR cd $DEPSDIR - unzip -o $BUILDDIR/memetic-deps-osx-gitian.zip + unzip -o $BUILDDIR/pepecoin-deps-osx-gitian.zip tar xf $BUILDDIR/osxcross.tar.xz mkdir -p $HOME/install cd $HOME/install tar xf $BUILDDIR/qt-osx-5.5.0-gitian.tar.xz # - cd $BUILDDIR/memetic + cd $BUILDDIR/pepecoin mkdir -p $OUTDIR/src git archive HEAD | tar -x -C $OUTDIR/src cp $OUTDIR/src/doc/README $OUTDIR/readme.txt cp $OUTDIR/src/COPYING $OUTDIR/COPYING.txt # #cd src - #make -f makefile.linux-mingw HOST="$HOST" DEPSDIR="$DEPSDIR" CURDIR="$BUILDDIR/memetic/src" STATIC=1 $MAKEOPTS USE_UPNP=1 BOOST_LIB_SUFFIX="-mt-s" DEBUGFLAGS= - #cp memetic $BINDIR/ + #make -f makefile.linux-mingw HOST="$HOST" DEPSDIR="$DEPSDIR" CURDIR="$BUILDDIR/pepecoin/src" STATIC=1 $MAKEOPTS USE_UPNP=1 BOOST_LIB_SUFFIX="-mt-s" DEBUGFLAGS= + #cp pepecoin $BINDIR/ #cd .. # #$DEPSDIR/qt/host/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/lib BOOST_INCLUDE_PATH=$HOME/build/include BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.1h OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.1h/include INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin USE_BUILD_INFO=1 - ~/install/host/bin/qmake -xplatform macx-clang-linux RELEASE=1 QMAKE_LRELEASE="~/install/host/bin/lrelease" MINIUPNPC_LIB_PATH="$DEPSDIR/lib" MINIUPNPC_INCLUDE_PATH="$DEPSDIR/include" BDB_LIB_PATH="$DEPSDIR/lib" BDB_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_PATH="$DEPSDIR/lib" BOOST_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_SUFFIX="-mt-s" BOOST_THREAD_LIB_SUFFIX="-mt-s" OPENSSL_LIB_PATH="$DEPSDIR/lib" OPENSSL_INCLUDE_PATH="$DEPSDIR/include" INCLUDEPATH="$DEPSDIR/include" DEFINES="BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 USE_BUILD_INFO=1" QMAKE_CXXFLAGS+=" -I/home/ubuntu/deps/SDK/MacOSX10.9.sdk/usr/include -DBOOST_HAS_INT128=1 -frandom-seed=memetic" + ~/install/host/bin/qmake -xplatform macx-clang-linux RELEASE=1 QMAKE_LRELEASE="~/install/host/bin/lrelease" MINIUPNPC_LIB_PATH="$DEPSDIR/lib" MINIUPNPC_INCLUDE_PATH="$DEPSDIR/include" BDB_LIB_PATH="$DEPSDIR/lib" BDB_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_PATH="$DEPSDIR/lib" BOOST_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_SUFFIX="-mt-s" BOOST_THREAD_LIB_SUFFIX="-mt-s" OPENSSL_LIB_PATH="$DEPSDIR/lib" OPENSSL_INCLUDE_PATH="$DEPSDIR/include" INCLUDEPATH="$DEPSDIR/include" DEFINES="BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 USE_BUILD_INFO=1" QMAKE_CXXFLAGS+=" -I/home/ubuntu/deps/SDK/MacOSX10.9.sdk/usr/include -DBOOST_HAS_INT128=1 -frandom-seed=pepecoin" make $MAKEOPTS # macdeploy: TODO: .dmg export OTOOL=${HOST}-otool export INSTALLNAMETOOL=${HOST}-install_name_tool export STRIP=${HOST}-strip chmod +x contrib/macdeploy/macdeployqtplus - OTOOL=${HOST}-otool INSTALLNAMETOOL=${HOST}-install_name_tool STRIP=${HOST}-strip contrib/macdeploy/macdeployqtplus memetic-Qt.app + OTOOL=${HOST}-otool INSTALLNAMETOOL=${HOST}-install_name_tool STRIP=${HOST}-strip contrib/macdeploy/macdeployqtplus pepecoin-Qt.app mkdir -p dist/.background install contrib/macdeploy/background.png dist/.background install contrib/macdeploy/DS_Store dist/.DS_Store cd dist ln -sf /Applications Applications cd .. - genisoimage -no-cache-inodes -l -probe -V "memetic-Qt" -no-pad -r -apple -o Shadow.tmp.dmg dist - dmg dmg memetic-Qt.tmp.dmg $OUTDIR/Memetic.dmg + genisoimage -no-cache-inodes -l -probe -V "pepecoin-Qt" -no-pad -r -apple -o Shadow.tmp.dmg dist + dmg dmg pepecoin-Qt.tmp.dmg $OUTDIR/PepeCoin.dmg # diff --git a/contrib/gitian-descriptors/gitian-win.yml b/contrib/gitian-descriptors/gitian-win.yml index eb70245a..c5f04933 100644 --- a/contrib/gitian-descriptors/gitian-win.yml +++ b/contrib/gitian-descriptors/gitian-win.yml @@ -1,5 +1,5 @@ --- -name: "memetic" +name: "pepecoin" suites: - "trusty" architectures: @@ -19,13 +19,13 @@ packages: - "bsdmainutils" reference_datetime: "2013-06-01 00:00:00" remotes: -- "url": "https://github.com/rynomster/memetic.git" - "dir": "memetic" +- "url": "https://github.com/rynomster/pepecoin.git" + "dir": "pepecoin" files: - "qt-win32-5.5.0-gitian.zip" - "qt-win64-5.5.0-gitian.zip" -- "memetic-deps-win32-gitian.zip" -- "memetic-deps-win64-gitian.zip" +- "pepecoin-deps-win32-gitian.zip" +- "pepecoin-deps-win64-gitian.zip" script: | # Defines export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1 @@ -36,8 +36,8 @@ script: | TEMPDIR="$HOME/tempdir" echo "2d4fafbd04d5e233416c83c618dda2f111891f995eba585cc0a2ea637d0b3be2 qt-win32-5.5.0-gitian.zip" | sha256sum -c echo "130685a66c344e53b131aa7cfac77f7796c6e113563bfd37eeb3cfd7c7fb4f08 qt-win64-5.5.0-gitian.zip" | sha256sum -c - echo "1cf99b3e264725580fd0f22ef36afbf96d3da0d5f659057e7100089b96a18ece memetic-deps-win32-gitian.zip" | sha256sum -c - echo "76e769fc3147dc819c4495839b7a5270fd058658bf1ef1adba22394b4f465ccb memetic-deps-win64-gitian.zip" | sha256sum -c + echo "1cf99b3e264725580fd0f22ef36afbf96d3da0d5f659057e7100089b96a18ece pepecoin-deps-win32-gitian.zip" | sha256sum -c + echo "76e769fc3147dc819c4495839b7a5270fd058658bf1ef1adba22394b4f465ccb pepecoin-deps-win64-gitian.zip" | sha256sum -c NEEDDIST=1 # Qt: workaround for determinism in resource ordering # Qt5's rcc uses a QHash to store the files for the resource. @@ -69,25 +69,25 @@ script: | cd $STAGING unzip -o $INDIR/qt-win${BITS}-5.5.0-gitian.zip cd $DEPSDIR - unzip -o $INDIR/memetic-deps-win${BITS}-gitian.zip + unzip -o $INDIR/pepecoin-deps-win${BITS}-gitian.zip # cd $BUILDDIR - cp -r ../build/memetic . - cd memetic + cp -r ../build/pepecoin . + cd pepecoin mkdir -p $OUTDIR/src git archive HEAD | tar -x -C $OUTDIR/src cp $OUTDIR/src/doc/README_windows.txt $OUTDIR/readme.txt cp $OUTDIR/src/COPYING $OUTDIR/COPYING.txt # cd src - make -f makefile.linux-mingw HOST="$HOST" DEPSDIR="$DEPSDIR" CURDIR="$BUILDDIR/memetic/src" STATIC=1 $MAKEOPTS USE_UPNP=1 BOOST_LIB_SUFFIX="-mt-s" USE_WALLET=1 DEBUGFLAGS= - cp memeticd.exe $BINDIR/ + make -f makefile.linux-mingw HOST="$HOST" DEPSDIR="$DEPSDIR" CURDIR="$BUILDDIR/pepecoin/src" STATIC=1 $MAKEOPTS USE_UPNP=1 BOOST_LIB_SUFFIX="-mt-s" USE_WALLET=1 DEBUGFLAGS= + cp pepecoind.exe $BINDIR/ cd .. # #$DEPSDIR/qt/host/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/lib BOOST_INCLUDE_PATH=$HOME/build/include BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.1h OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.1h/include INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin USE_BUILD_INFO=1 - $STAGING/host/bin/qmake -xplatform win32-g++ RELEASE=1 QMAKE_LRELEASE="$STAGING/host/bin/lrelease" MINIUPNPC_LIB_PATH="$DEPSDIR/lib" MINIUPNPC_INCLUDE_PATH="$DEPSDIR/include" BDB_LIB_PATH="$DEPSDIR/lib" BDB_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_PATH="$DEPSDIR/lib" BOOST_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_SUFFIX="-mt-s" BOOST_THREAD_LIB_SUFFIX="_win32-mt-s" OPENSSL_LIB_PATH="$DEPSDIR/lib" OPENSSL_INCLUDE_PATH="$DEPSDIR/include" INCLUDEPATH="$DEPSDIR/include" DEFINES="BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 USE_BUILD_INFO=1 USE_NATIVE_I2P=1 USE_QRENCODE=1" QMAKE_CXXFLAGS=-frandom-seed=memetic + $STAGING/host/bin/qmake -xplatform win32-g++ RELEASE=1 QMAKE_LRELEASE="$STAGING/host/bin/lrelease" MINIUPNPC_LIB_PATH="$DEPSDIR/lib" MINIUPNPC_INCLUDE_PATH="$DEPSDIR/include" BDB_LIB_PATH="$DEPSDIR/lib" BDB_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_PATH="$DEPSDIR/lib" BOOST_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_SUFFIX="-mt-s" BOOST_THREAD_LIB_SUFFIX="_win32-mt-s" OPENSSL_LIB_PATH="$DEPSDIR/lib" OPENSSL_INCLUDE_PATH="$DEPSDIR/include" INCLUDEPATH="$DEPSDIR/include" DEFINES="BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 USE_BUILD_INFO=1 USE_NATIVE_I2P=1 USE_QRENCODE=1" QMAKE_CXXFLAGS=-frandom-seed=pepecoin make $MAKEOPTS - cp release/Memetic.exe $BINDIR/ + cp release/PepeCoin.exe $BINDIR/ # unset LD_PRELOAD unset FAKETIME @@ -99,5 +99,5 @@ script: | mkdir -p $TEMPDIR cd $TEMPDIR cd $BINDIR - #tar -xvf $HOME/build/memetic/$DISTNAME | sort | tar --no-recursion -cT /dev/stdin --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 --mtime="$REFERENCE_DATETIME" | gzip -n > $OUTDIR/src/$DISTNAME - find | sort | zip -X@ $OUTDIR/memetic_$DISTNAME.zip + #tar -xvf $HOME/build/pepecoin/$DISTNAME | sort | tar --no-recursion -cT /dev/stdin --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 --mtime="$REFERENCE_DATETIME" | gzip -n > $OUTDIR/src/$DISTNAME + find | sort | zip -X@ $OUTDIR/pepecoin_$DISTNAME.zip diff --git a/contrib/gitian-descriptors/qt-osx.yml b/contrib/gitian-descriptors/qt-osx.yml index 53f3f5f9..07429037 100644 --- a/contrib/gitian-descriptors/qt-osx.yml +++ b/contrib/gitian-descriptors/qt-osx.yml @@ -1,5 +1,5 @@ --- -name: "memetic-osx-qt" +name: "pepecoin-osx-qt" suites: - "trusty" architectures: @@ -22,7 +22,7 @@ reference_datetime: "2011-01-30 00:00:00" remotes: [] files: - "qt-everywhere-opensource-src-5.5.0.tar.xz" -- "memetic-deps-osx-gitian.zip" +- "pepecoin-deps-osx-gitian.zip" - "flex-2.5.38.tar.gz" - "osxcross.tar.xz" script: | @@ -66,9 +66,9 @@ script: | make install cd .. # - # Need mingw-compiled openssl from memetic-deps: + # Need mingw-compiled openssl from pepecoin-deps: cd $DEPSDIR - unzip -o $BUILDDIR/memetic-deps-osx-gitian.zip + unzip -o $BUILDDIR/pepecoin-deps-osx-gitian.zip tar xf $BUILDDIR/osxcross.tar.xz # cd $BUILDDIR diff --git a/contrib/gitian-descriptors/qt-win.yml b/contrib/gitian-descriptors/qt-win.yml index a78e68cf..b11074ea 100644 --- a/contrib/gitian-descriptors/qt-win.yml +++ b/contrib/gitian-descriptors/qt-win.yml @@ -15,8 +15,8 @@ reference_datetime: "2013-06-01 00:00:00" remotes: [] files: - "qt-everywhere-opensource-src-5.5.0.tar.xz" -- "memetic-deps-win32-gitian.zip" -- "memetic-deps-win64-gitian.zip" +- "pepecoin-deps-win32-gitian.zip" +- "pepecoin-deps-win64-gitian.zip" script: | # Defines export TZ=UTC @@ -31,8 +31,8 @@ script: | # For now luckily there is a test mode that forces a fixed seed. export QT_RCC_TEST=1 # Integrity Check - echo "c603942b866f8a8ffff441c0d3e8c69d29a45e0bd3e48d386e7dc27d03237178 memetic-deps-win32-gitian.zip" | sha256sum -c - echo "1cb5e1b498e86917db690bc07ee73c9d6ffc23cf3509607d4f79aba53e87ecff memetic-deps-win64-gitian.zip" | sha256sum -c + echo "c603942b866f8a8ffff441c0d3e8c69d29a45e0bd3e48d386e7dc27d03237178 pepecoin-deps-win32-gitian.zip" | sha256sum -c + echo "1cb5e1b498e86917db690bc07ee73c9d6ffc23cf3509607d4f79aba53e87ecff pepecoin-deps-win64-gitian.zip" | sha256sum -c echo "7ea2a16ecb8088e67db86b0835b887d5316121aeef9565d5d19be3d539a2c2af qt-everywhere-opensource-src-5.5.0.tar.xz" | sha256sum -c for BITS in 32 64; do # for architectures # @@ -47,9 +47,9 @@ script: | # mkdir -p $INSTALLPREFIX $INSTALLPREFIX/host/bin $DEPSDIR $BUILDDIR # - # Need mingw-compiled openssl from memetic-deps: + # Need mingw-compiled openssl from pepecoin-deps: cd $DEPSDIR - unzip -o $INDIR/memetic-deps-win${BITS}-gitian.zip + unzip -o $INDIR/pepecoin-deps-win${BITS}-gitian.zip # cd $BUILDDIR # diff --git a/contrib/gitian-downloader/linux-download-config b/contrib/gitian-downloader/linux-download-config index 3d01b482..2b94dc0f 100644 --- a/contrib/gitian-downloader/linux-download-config +++ b/contrib/gitian-downloader/linux-download-config @@ -1,11 +1,11 @@ --- -name: memetic +name: pepecoin urls: -- http://memetic.org/memetic-latest-linux-gitian.zip +- http://pepecoin.org/pepecoin-latest-linux-gitian.zip rss: - url: http://sourceforge.net/api/file/index/project-id/244765/mtime/desc/limit/100/rss xpath: //item/link/text() - pattern: memetic-\d+.\d+.\d+-linux-gitian.zip + pattern: pepecoin-\d+.\d+.\d+-linux-gitian.zip signers: 0A82509767C7D4A5D14DA2301AE1D35043E08E54: weight: 40 diff --git a/contrib/gitian-downloader/win32-download-config b/contrib/gitian-downloader/win32-download-config index b7010147..473e33eb 100644 --- a/contrib/gitian-downloader/win32-download-config +++ b/contrib/gitian-downloader/win32-download-config @@ -1,11 +1,11 @@ --- -name: memetic +name: pepecoin urls: -- http://memetic.org/memetic-latest-win32-gitian.zip +- http://pepecoin.org/pepecoin-latest-win32-gitian.zip rss: - url: http://sourceforge.net/api/file/index/project-id/244765/mtime/desc/limit/100/rss xpath: //item/link/text() - pattern: memetic-\d+.\d+.\d+-win32-gitian.zip + pattern: pepecoin-\d+.\d+.\d+-win32-gitian.zip signers: 0A82509767C7D4A5D14DA2301AE1D35043E08E54: weight: 40 diff --git a/contrib/linearize/README.md b/contrib/linearize/README.md index c5119f54..477b9a03 100644 --- a/contrib/linearize/README.md +++ b/contrib/linearize/README.md @@ -17,7 +17,7 @@ Optional config file setting for linearize-hashes: $ ./linearize-data.py linearize.cfg Required configuration file settings: -* "input": memeticd blocks/ directory containing blkNNNNN.dat +* "input": pepecoind blocks/ directory containing blkNNNNN.dat * "hashlist": text file containing list of block hashes, linearized-hashes.py output. * "output_file": bootstrap.dat diff --git a/contrib/linearize/example-linearize.cfg b/contrib/linearize/example-linearize.cfg index 3c4a07fb..2aed4186 100644 --- a/contrib/linearize/example-linearize.cfg +++ b/contrib/linearize/example-linearize.cfg @@ -1,5 +1,5 @@ -# memeticd RPC settings (linearize-hashes) +# pepecoind RPC settings (linearize-hashes) rpcuser=someuser rpcpassword=somepassword host=127.0.0.1 @@ -12,7 +12,7 @@ max_height=390000 # bootstrap.dat input/output settings (linearize-data) netmagic=70352205 -input=/home/example/.memetic +input=/home/example/.pepecoin output_file=/home/example/Downloads/bootstrap.dat hashlist=hashlist.txt split_year=1 diff --git a/contrib/linearize/linearize-hashes.py b/contrib/linearize/linearize-hashes.py index c0d06524..c534e21f 100644 --- a/contrib/linearize/linearize-hashes.py +++ b/contrib/linearize/linearize-hashes.py @@ -16,7 +16,7 @@ settings = {} -class MemeticRPC: +class PepeCoinRPC: OBJID = 1 def __init__(self, host, port, username, password): @@ -59,7 +59,7 @@ def getblockhash(self, index): return self.rpc('getblockhash', [index]) def get_block_hashes(settings): - rpc = MemeticRPC(settings['host'], settings['port'], + rpc = PepeCoinRPC(settings['host'], settings['port'], settings['rpcuser'], settings['rpcpassword']) for height in xrange(settings['min_height'], settings['max_height']+1): diff --git a/contrib/macdeploy/LICENSE b/contrib/macdeploy/LICENSE index dd49c5b6..369f85d5 100644 --- a/contrib/macdeploy/LICENSE +++ b/contrib/macdeploy/LICENSE @@ -98,7 +98,7 @@ 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 memetic of a copy, is not conveying. +a computer network, with no pepecoin 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 @@ -450,7 +450,7 @@ 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 memeticring control of an + An "entity transaction" is a transaction pepecoinring 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 diff --git a/contrib/macdeploy/fancy.plist b/contrib/macdeploy/fancy.plist index e5939f9b..38728891 100644 --- a/contrib/macdeploy/fancy.plist +++ b/contrib/macdeploy/fancy.plist @@ -22,7 +22,7 @@ 370 156 - memetic-Qt.app + pepecoin-Qt.app 128 156 diff --git a/contrib/macdeploy/notes.txt b/contrib/macdeploy/notes.txt index 9b060e3a..ebb4e603 100644 --- a/contrib/macdeploy/notes.txt +++ b/contrib/macdeploy/notes.txt @@ -6,7 +6,7 @@ You will need the appscript package for the fancy disk image creation to work. Install it by invoking "sudo easy_install appscript". Ths script should be invoked in the target directory like this: -$source_dir/contrib/macdeploy/macdeployqtplus memetic-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy $source_dir/contrib/macdeploy/fancy.plist -verbose 2 +$source_dir/contrib/macdeploy/macdeployqtplus pepecoin-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy $source_dir/contrib/macdeploy/fancy.plist -verbose 2 During the process, the disk image window will pop up briefly where the fancy settings are applied. This is normal, please do not interfere. @@ -19,8 +19,8 @@ Fill in the following. Enable custom process step: [x] Command: %{sourceDir}/contrib/macdeploy/macdeployqtplus Working directory: %{buildDir} -Command arguments: memetic-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy %{sourceDir}/contrib/macdeploy/fancy.plist -verbose 2 +Command arguments: pepecoin-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy %{sourceDir}/contrib/macdeploy/fancy.plist -verbose 2 After that you can start the deployment process through the menu with -Build -> Deploy Project "memetic-qt" +Build -> Deploy Project "pepecoin-qt" diff --git a/contrib/qt_translations.py b/contrib/qt_translations.py index 6cbe12b7..3f1be613 100644 --- a/contrib/qt_translations.py +++ b/contrib/qt_translations.py @@ -2,7 +2,7 @@ # Helpful little script that spits out a comma-separated list of # language codes for Qt icons that should be included -# in binary memetic distributions +# in binary pepecoin distributions import glob import os @@ -10,13 +10,13 @@ import sys if len(sys.argv) != 3: - sys.exit("Usage: %s $QTDIR/translations $MEMETICDIR/src/qt/locale"%sys.argv[0]) + sys.exit("Usage: %s $QTDIR/translations $PEPECOINDIR/src/qt/locale"%sys.argv[0]) d1 = sys.argv[1] d2 = sys.argv[2] l1 = set([ re.search(r'qt_(.*).qm', f).group(1) for f in glob.glob(os.path.join(d1, 'qt_*.qm')) ]) -l2 = set([ re.search(r'memetic_(.*).qm', f).group(1) for f in glob.glob(os.path.join(d2, 'memetic_*.qm')) ]) +l2 = set([ re.search(r'pepecoin_(.*).qm', f).group(1) for f in glob.glob(os.path.join(d2, 'pepecoin_*.qm')) ]) print ",".join(sorted(l1.intersection(l2))) diff --git a/doc/README b/doc/README index 04ace13b..09405f9b 100644 --- a/doc/README +++ b/doc/README @@ -1,4 +1,4 @@ -Memetic 0.4.4 BETA +PepeCoin 0.4.4 BETA Copyright (c) 2013 NovaCoin Developers Copyright (c) 2011-2012 PPCoin Developers @@ -11,7 +11,7 @@ cryptographic software written by Eric Young (eay@cryptsoft.com). Intro ----- -Memetic is a free open source project derived from Bitcoin, with +PepeCoin is a free open source project derived from Bitcoin, with the goal of providing a long-term energy-efficient scrypt-based crypto-currency. Built on the foundation of Bitcoin, PPCoin and NovaCoin, innovations such as proof-of-stake help further advance the field of crypto-currency. diff --git a/doc/RELEASENOTES.txt b/doc/RELEASENOTES.txt new file mode 100644 index 00000000..2e1fa149 --- /dev/null +++ b/doc/RELEASENOTES.txt @@ -0,0 +1,4 @@ +PepeCoin release notes + +PepeCoin / PEPE v. 2.3.2.2-KekdaqMT -- Required Update +Update to improve network connectivity and wallet stability. diff --git a/doc/assets-attribution.txt b/doc/assets-attribution.txt index 9b11a424..50710482 100644 --- a/doc/assets-attribution.txt +++ b/doc/assets-attribution.txt @@ -50,6 +50,6 @@ Designer: Crobbo (forum) Site: https://bitcointalk.org/index.php?topic=32273.0 License: Public domain -Memetic Logo +PepeCoin Logo Designer: Evan Zenker License: Creative Commons Attribution 4.0 International License diff --git a/doc/blockrewards.txt b/doc/blockrewards.txt index 3896b8c0..6baff2ce 100644 --- a/doc/blockrewards.txt +++ b/doc/blockrewards.txt @@ -1,51 +1,51 @@ -Memetic X11 Proof of Work Block Reward Schedule +PepeCoin X11 Proof of Work Block Reward Schedule ------------------------------------------------ ``` -Block 1 - 99 - MEME Development Fund and Checkpointing +Block 1 - 99 - PEPE Development Fund and Checkpointing * Block 100 Public Launch * -Block 100 to 900 - 1500 MEME -Block 900 to 1300 - 1200 MEME -Block 1300 to 1900 - 1050 MEME -Block 1900 to 2900 - 900 MEME -Block 2900 to 4100 - 700 MEME -Block 4100 to 6680 - 400 MEME -Block 6680 to 9260 - 500 MEME -Block 9260 to 11840 - 300 MEME -Block 11840 to 14420 - 200 MEME -Block 14420 to 17000 - 300 MEME -Block 17000 to 19580 - 100 MEME -Block 19580 to 22160 - 200 MEME -Block 22160 to 24740 - 90 MEME -Block 24740 to 27320 - 130 MEME -Block 27320 to 29900 - 80 MEME -Block 29900 to 32480 - 100 MEME -Block 32480 to 35060 - 70 MEME -Block 35060 to 37640 - 100 MEME -Block 37640 to 40220 - 60 MEME -Block 40220 to 42800 - 100 MEME -Block 42800 to 45380 - 50 MEME -Block 45380 to 47960 - 100 MEME -Block 47960 to 50540 - 40 MEME -Block 50540 to 53120 - 100 MEME -Block 53120 to 55700 - 40 MEME -Block 55700 to 58280 - 100 MEME -Block 58280 to 60860 - 40 MEME -Block 60860 to 63440 - 100 MEME -Block 63440 to 66020 - 40 MEME -Block 66020 to 68600 - 100 MEME -Block 68600 to 70000 - 40 MEME +Block 100 to 900 - 1500 PEPE +Block 900 to 1300 - 1200 PEPE +Block 1300 to 1900 - 1050 PEPE +Block 1900 to 2900 - 900 PEPE +Block 2900 to 4100 - 700 PEPE +Block 4100 to 6680 - 400 PEPE +Block 6680 to 9260 - 500 PEPE +Block 9260 to 11840 - 300 PEPE +Block 11840 to 14420 - 200 PEPE +Block 14420 to 17000 - 300 PEPE +Block 17000 to 19580 - 100 PEPE +Block 19580 to 22160 - 200 PEPE +Block 22160 to 24740 - 90 PEPE +Block 24740 to 27320 - 130 PEPE +Block 27320 to 29900 - 80 PEPE +Block 29900 to 32480 - 100 PEPE +Block 32480 to 35060 - 70 PEPE +Block 35060 to 37640 - 100 PEPE +Block 37640 to 40220 - 60 PEPE +Block 40220 to 42800 - 100 PEPE +Block 42800 to 45380 - 50 PEPE +Block 45380 to 47960 - 100 PEPE +Block 47960 to 50540 - 40 PEPE +Block 50540 to 53120 - 100 PEPE +Block 53120 to 55700 - 40 PEPE +Block 55700 to 58280 - 100 PEPE +Block 58280 to 60860 - 40 PEPE +Block 60860 to 63440 - 100 PEPE +Block 63440 to 66020 - 40 PEPE +Block 66020 to 68600 - 100 PEPE +Block 68600 to 70000 - 40 PEPE POW End Block 70,000 -Total from 1 Yr. POW: Approx 11.5m MEME +Total from 1 Yr. POW: Approx 11.5m PEPE -Development fund: 562,390 MEME +Development fund: 562,390 PEPE -Total MEME in POW & Fund: Approx 12m MEME +Total PEPE in POW & Fund: Approx 12m PEPE ``` diff --git a/doc/build-msw.md b/doc/build-msw.md index c24d3dff..f1a8770c 100644 --- a/doc/build-msw.md +++ b/doc/build-msw.md @@ -7,7 +7,7 @@ cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. -See readme-qt.rst for instructions on building Memetic QT, the +See readme-qt.rst for instructions on building PepeCoin QT, the graphical user interface. WINDOWS BUILD NOTES @@ -47,7 +47,7 @@ Secp256k1 OpenSSL ------- -MSYS memetic: +MSYS pepecoin: un-tar sources with MSYS 'tar xfz' to avoid issue with symlinks (OpenSSL ticket 2377) change 'MAKE' env. variable from 'C:\MinGW32\bin\mingw32-make.exe' to '/c/MinGW32/bin/mingw32-make.exe' @@ -57,7 +57,7 @@ make Berkeley DB ----------- -MSYS memetic: +MSYS pepecoin: cd /c/dev/coindeps32/db-4.8.30.NC-mgw/build_unix sh ../dist/configure --enable-mingw --enable-cxx @@ -73,7 +73,7 @@ DOS prompt: Secp256k1 ----------- -MSYS memetic: +MSYS pepecoin: ./autogen.sh ./configure --enable-module-recovery --prefix /c/dev/coindeps32/Secp256k1 @@ -84,17 +84,17 @@ MiniUPnPc --------- UPnP support is optional, make with USE_UPNP= to disable it. -MSYS memetic: +MSYS pepecoin: cd /c/miniupnpc-1.6-mgw make -f Makefile.mingw mkdir miniupnpc cp *.h miniupnpc/ -Build Memeticd +Build PepeCoind ------- DOS prompt: - cd \memetic\src + cd \pepecoin\src mingw32-make -f makefile.mingw - strip memeticd.exe + strip pepecoind.exe diff --git a/doc/build-osx.md b/doc/build-osx.md index 3c146013..ebc4a900 100644 --- a/doc/build-osx.md +++ b/doc/build-osx.md @@ -7,12 +7,12 @@ software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. -Mac OS X memeticd build instructions +Mac OS X pepecoind build instructions Laszlo Hanyecz Douglas Huff -See readme-qt.rst for instructions on building Memetic QT, the +See readme-qt.rst for instructions on building PepeCoin QT, the graphical user interface. Tested on 10.5 and 10.6 intel. PPC is not supported because it's big-endian. @@ -27,7 +27,7 @@ but you can get the current version from http://developer.apple.com 1. Clone the github tree to get the source code: -git clone http://gitlab.com/memetic/memetic/memetic memetic +git clone http://gitlab.com/pepecoin/pepecoin/pepecoin pepecoin 2. Download and install MacPorts from http://www.macports.org/ @@ -41,14 +41,14 @@ sudo port install boost db48 openssl miniupnpc Optionally install qrencode (and set USE_QRCODE=1): sudo port install qrencode -4. Now you should be able to build memeticd: +4. Now you should be able to build pepecoind: -cd memetic/src +cd pepecoin/src make -f makefile.osx Run: - ./memeticd --help # for a list of command-line options. + ./pepecoind --help # for a list of command-line options. Run - ./memeticd -daemon # to start the memetic daemon. + ./pepecoind -daemon # to start the pepecoin daemon. Run - ./memeticd help # When the daemon is running, to get a list of RPC commands + ./pepecoind help # When the daemon is running, to get a list of RPC commands diff --git a/doc/build-unix.md b/doc/build-unix.md index e3d654a3..8c9f36b5 100644 --- a/doc/build-unix.md +++ b/doc/build-unix.md @@ -39,7 +39,7 @@ System requirements -------------------- C++ compilers are memory-hungry. It is recommended to have at least 1 GB of -memory available when compiling Memetic Core. With 512MB of memory or less +memory available when compiling PepeCoin Core. With 512MB of memory or less compilation will take much longer due to swap thrashing. Dependency Build Instructions: Ubuntu & Debian @@ -77,7 +77,7 @@ Optional: Dependencies for the GUI: Ubuntu & Debian ----------------------------------------- -If you want to build memetic-Qt, make sure that the required packages for Qt development +If you want to build pepecoin-Qt, make sure that the required packages for Qt development are installed. Qt 5 is necessary to build the GUI. If both Qt 4 and Qt 5 are installed, Qt 5 will be used. @@ -89,7 +89,7 @@ libqrencode (optional) can be installed with: sudo apt-get install libqrencode-dev -Once these are installed, they will be found by configure and a memetic-qt executable will be +Once these are installed, they will be found by configure and a pepecoin-qt executable will be built by default. Berkeley DB @@ -97,10 +97,10 @@ Berkeley DB It is recommended to use Berkeley DB 4.8. If you have to build it yourself: ```bash -MEMETIC_ROOT=$(pwd) +PEPECOIN_ROOT=$(pwd) -# Pick some path to install BDB to, here we create a directory within the memetic directory -BDB_PREFIX="${MEMETIC_ROOT}/db4" +# Pick some path to install BDB to, here we create a directory within the pepecoin directory +BDB_PREFIX="${PEPECOIN_ROOT}/db4" mkdir -p $BDB_PREFIX # Fetch the source and verify that it is not tampered with @@ -115,8 +115,8 @@ cd db-4.8.30.NC/build_unix/ ../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX make install -# Configure Memetic Core to use our own-built instance of BDB -cd $MEMETIC_ROOT +# Configure PepeCoin Core to use our own-built instance of BDB +cd $PEPECOIN_ROOT ./autogen.sh ./configure LDFLAGS="-L${BDB_PREFIX}/lib/" CPPFLAGS="-I${BDB_PREFIX}/include/" # (other args...) ``` @@ -125,25 +125,25 @@ Notes ----- 1) You only need Berkeley DB if the wallet is enabled (see the section *Disable-Wallet mode* below). -2) The release is built with GCC and then "strip memeticd" to strip the debug +2) The release is built with GCC and then "strip pepecoind" to strip the debug symbols, which reduces the executable size by about 90%. -To Build Memeticd +To Build PepeCoind -------- With UPNP: cd src && \ make -f makefile.unix && \ - strip memeticd + strip pepecoind (Recommended) Without UPNP: cd src && \ make -f makefile.unix USE_UPNP= && \ - strip memeticd + strip pepecoind -To Build memetic-QT +To Build pepecoin-QT -------- With UPNP: @@ -175,7 +175,7 @@ If you need to build miniupnpc yourself: Security -------- -To help make your memetic installation more secure by making certain attacks impossible to +To help make your pepecoin installation more secure by making certain attacks impossible to exploit even if a vulnerability is found, you can take the following measures: * Position Independent Executable @@ -192,7 +192,7 @@ exploit even if a vulnerability is found, you can take the following measures: make -f makefile.unix ... -e PIE=1 To test that you have built PIE executable, install scanelf, part of paxutils, and use: - scanelf -e ./memetic + scanelf -e ./pepecoin The output should contain: TYPE @@ -200,13 +200,13 @@ exploit even if a vulnerability is found, you can take the following measures: * Non-executable Stack If the stack is executable then trivial stack based buffer overflow exploits are possible if - vulnerable buffers are found. By default, memetic should be built with a non-executable stack + vulnerable buffers are found. By default, pepecoin should be built with a non-executable stack but if one of the libraries it uses asks for an executable stack or someone makes a mistake and uses a compiler extension which requires an executable stack, it will silently build an executable without the non-executable stack protection. To verify that the stack is non-executable after compiling use: - scanelf -e ./memetic + scanelf -e ./pepecoin the output should contain: STK/REL/PTL diff --git a/doc/coding.txt b/doc/coding.txt index d274a9e7..1edd6d58 100644 --- a/doc/coding.txt +++ b/doc/coding.txt @@ -74,7 +74,7 @@ ThreadTopUpKeyPool : replenishes the keystore's keypool. ThreadCleanWalletPassphrase : re-locks an encrypted wallet after user has unlocked it for a period of time. -SendingDialogStartMemetic : used by pay-via-ip-address code (obsolete) +SendingDialogStartPepeCoin : used by pay-via-ip-address code (obsolete) ThreadDelayedRepaint : repaint the gui diff --git a/doc/readme-qt.rst b/doc/readme-qt.rst index be99adef..067e6932 100644 --- a/doc/readme-qt.rst +++ b/doc/readme-qt.rst @@ -1,14 +1,14 @@ -memetic-qt: Qt5 GUI for Memetic +pepecoin-qt: Qt5 GUI for PepeCoin =============================== Linux ------- -https://gitlab.com/memetic/blob/master/doc/build-unix.md +https://gitlab.com/pepecoin/blob/master/doc/build-unix.md Windows -------- -https://gitlab.com/memetic/blob/master/doc/build-msw.md +https://gitlab.com/pepecoin/blob/master/doc/build-msw.md Mac OS X -------- -https://gitlab.com/memetic/blob/master/doc/build-osx.md +https://gitlab.com/pepecoin/blob/master/doc/build-osx.md diff --git a/doc/tor.md b/doc/tor.md index 69c7b5c6..f78f8600 100644 --- a/doc/tor.md +++ b/doc/tor.md @@ -1,7 +1,7 @@ -TOR Support in Memetic +TOR Support in PepeCoin ======================= -It is possible to run Memetic as a Tor hidden service, and connect to such services. +It is possible to run PepeCoin as a Tor hidden service, and connect to such services. The following directions assume you have a Tor proxy running on port 9050. Many distributions default to having a SOCKS proxy listening on port 9050, but others may not. @@ -10,10 +10,10 @@ https://www.torproject.org/docs/faq.html.en#TBBSocksPort for how to properly configure Tor. -1. Run Memetic behind a Tor proxy +1. Run PepeCoin behind a Tor proxy --------------------------------- -The first step is running Memetic behind a Tor proxy. This will already make all +The first step is running PepeCoin behind a Tor proxy. This will already make all outgoing connections be anonimized, but more is possible. -proxy=ip:port Set the proxy server. If SOCKS5 is selected (default), this proxy @@ -34,26 +34,26 @@ outgoing connections be anonimized, but more is possible. In a typical situation, this suffices to run behind a Tor proxy: - ./memeticd -proxy=127.0.0.1:9050 + ./pepecoind -proxy=127.0.0.1:9050 -2. Run a Memetic hidden server +2. Run a PepeCoin hidden server ------------------------------ If you configure your Tor system accordingly, it is possible to make your node also reachable from the Tor network. Add these lines to your /etc/tor/torrc (or equivalent config file): - HiddenServiceDir /var/lib/tor/memetic-service/ + HiddenServiceDir /var/lib/tor/pepecoin-service/ HiddenServicePort 17170 127.0.0.1:17170 The directory can be different of course, but (both) port numbers should be equal to -your memeticd's P2P listen port (17170 by default). +your pepecoind's P2P listen port (17170 by default). -externalip=X You can tell litecoin about its publicly reachable address using this option, and this can be a .onion address. Given the above configuration, you can find your onion address in - /var/lib/tor/memetic-service/hostname. Onion addresses are given + /var/lib/tor/pepecoin-service/hostname. Onion addresses are given preference for your node to advertize itself with, for connections coming from unroutable addresses (such as 127.0.0.1, where the Tor proxy typically runs). @@ -70,18 +70,18 @@ your memeticd's P2P listen port (17170 by default). In a typical situation, where you're only reachable via Tor, this should suffice: - ./memeticd -proxy=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -listen + ./pepecoind -proxy=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -listen (obviously, replace the Onion address with your own). If you don't care too much about hiding your node, and want to be reachable on IPv4 as well, additionally specify: - ./memeticd ... -discover + ./pepecoind ... -discover and open port 17170 on your firewall (or use -upnp). If you only want to use Tor to reach onion addresses, but not use it as a proxy for normal IPv4/IPv6 communication, use: - ./memeticd -tor=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -discover + ./pepecoind -tor=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -discover diff --git a/memetic-qt.pro b/pepecoin-qt.pro similarity index 97% rename from memetic-qt.pro rename to pepecoin-qt.pro index c0d46061..483b9f92 100644 --- a/memetic-qt.pro +++ b/pepecoin-qt.pro @@ -1,6 +1,6 @@ TEMPLATE = app -TARGET = memetic-qt -VERSION = 1.0.0.0 +TARGET = pepecoin-qt +VERSION = 3.1.1.0 INCLUDEPATH += src src/json src/qt src/qt/plugins/mrichtexteditor QT += network printsupport DEFINES += ENABLE_WALLET @@ -274,12 +274,9 @@ HEADERS += src/qt/bitcoingui.h \ src/qt/darksendconfig.h \ src/masternode.h \ src/darksend.h \ - src/darksend-relay.h \ src/instantx.h \ src/activemasternode.h \ src/masternodeconfig.h \ - src/masternodeman.h \ - src/masternode-payments.h \ src/spork.h \ src/crypto/common.h \ src/crypto/hmac_sha256.h \ @@ -289,8 +286,8 @@ HEADERS += src/qt/bitcoingui.h \ src/crypto/sha256.h \ src/crypto/sha512.h \ src/qt/masternodemanager.h \ - src/qt/addeditadrenalinenode.h \ - src/qt/adrenalinenodeconfigdialog.h \ + src/qt/addeditmastertoad.h \ + src/qt/mastertoadconfigdialog.h \ src/qt/qcustomplot.h \ src/smessage.h \ src/qt/messagepage.h \ @@ -401,12 +398,9 @@ SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \ src/qt/darksendconfig.cpp \ src/masternode.cpp \ src/darksend.cpp \ - src/darksend-relay.cpp \ src/rpcdarksend.cpp \ src/instantx.cpp \ src/activemasternode.cpp \ - src/masternodeman.cpp \ - src/masternode-payments.cpp \ src/spork.cpp \ src/masternodeconfig.cpp \ src/crypto/hmac_sha256.cpp \ @@ -416,8 +410,8 @@ SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \ src/crypto/sha256.cpp \ src/crypto/sha512.cpp \ src/qt/masternodemanager.cpp \ - src/qt/addeditadrenalinenode.cpp \ - src/qt/adrenalinenodeconfigdialog.cpp \ + src/qt/addeditmastertoad.cpp \ + src/qt/mastertoadconfigdialog.cpp \ src/qt/qcustomplot.cpp \ src/smessage.cpp \ src/qt/messagepage.cpp \ @@ -460,8 +454,8 @@ FORMS += \ src/qt/forms/optionsdialog.ui \ src/qt/forms/darksendconfig.ui \ src/qt/forms/masternodemanager.ui \ - src/qt/forms/addeditadrenalinenode.ui \ - src/qt/forms/adrenalinenodeconfigdialog.ui \ + src/qt/forms/addeditmastertoad.ui \ + src/qt/forms/mastertoadconfigdialog.ui \ src/qt/forms/messagepage.ui \ src/qt/forms/sendmessagesentry.ui \ src/qt/forms/sendmessagesdialog.ui \ @@ -603,7 +597,7 @@ macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm src/qt/macnotificationhan macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit -framework CoreServices macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0 macx:ICON = src/qt/res/icons/bitcoin.icns -macx:TARGET = "Memetic-Qt" +macx:TARGET = "PepeCoin-Qt" macx:QMAKE_CFLAGS_THREAD += -pthread macx:QMAKE_LFLAGS_THREAD += -pthread macx:QMAKE_CXXFLAGS_THREAD += -pthread diff --git a/share/qt/Info.plist b/share/qt/Info.plist index 0702915e..e71876fd 100644 --- a/share/qt/Info.plist +++ b/share/qt/Info.plist @@ -7,23 +7,23 @@ CFBundlePackageType APPL CFBundleGetInfoString - memetic-Qt + pepecoin-Qt CFBundleSignature ???? CFBundleExecutable - memetic-Qt + pepecoin-Qt CFBundleIdentifier - co.memetic.memetic-Qt + co.pepecoin.pepecoin-Qt CFBundleURLTypes CFBundleTypeRole Editor CFBundleURLName - co.memetic.MemeticPayment + co.pepecoin.PepeCoinPayment CFBundleURLSchemes - memetic + pepecoin diff --git a/share/setup.nsi b/share/setup.nsi index 34e3afac..805b6ed0 100644 --- a/share/setup.nsi +++ b/share/setup.nsi @@ -102,7 +102,7 @@ Section -post SEC0001 # WriteRegStr HKCR "bitcoin" "URL Protocol" "" # WriteRegStr HKCR "bitcoin" "" "URL:Bitcoin" # WriteRegStr HKCR "bitcoin\DefaultIcon" "" $INSTDIR\bitcoin-qt.exe - # WriteRegStr HKCR "bitcoin\memetic\open\command" "" '"$INSTDIR\bitcoin-qt.exe" "$$1"' + # WriteRegStr HKCR "bitcoin\pepecoin\open\command" "" '"$INSTDIR\bitcoin-qt.exe" "$$1"' SectionEnd # Macro for selecting uninstaller sections diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 00000000..6c15c3ea --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,232 @@ +build/ +debug/ +release/ +*.o +*.exe +object_script.pepecoin-qt.* +src/pepecoind +pepecoin-qt +Makefile +qrc_bitcoin.cpp +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates +.vscode + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg + +# More files to ignore +.vscode +.qmake.stash +.autosave + diff --git a/src/COPYING b/src/COPYING index 7ddca2f9..c153f180 100644 --- a/src/COPYING +++ b/src/COPYING @@ -8,7 +8,7 @@ Copyright (c) 2014 Digibyte Developers Copyright (c) 2014 DashCoin Developers Copyright (c) 2014 NetCoin Developers Copyright (c) 2015 Transfercoin Developer -Copyright (c) 2015-2016 Memetic Developers +Copyright (c) 2015-2016 PepeCoin Developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/src/activemasternode.cpp b/src/activemasternode.cpp index 250c06fb..562d9e55 100644 --- a/src/activemasternode.cpp +++ b/src/activemasternode.cpp @@ -4,21 +4,22 @@ #include "protocol.h" #include "activemasternode.h" -#include "masternodeman.h" #include #include "clientversion.h" // -// Bootup the masternode, look for a 10000 MEME input and register on the network +// Bootup the masternode, look for a 500 PEPE input and register on the network // void CActiveMasternode::ManageStatus() { std::string errorMessage; - if (fDebug) LogPrintf("CActiveMasternode::ManageStatus() - Begin\n"); - if(!fMasterNode) return; + if(IsSyncing()) return; + + if (fDebug) LogPrintf("CActiveMasternode::ManageStatus() - Begin\n"); + //need correct adjusted time to send ping bool fIsInitialDownload = IsInitialBlockDownload(); if(fIsInitialDownload) { @@ -40,19 +41,28 @@ void CActiveMasternode::ManageStatus() return; } } else { - service = CService(strMasterNodeAddr, true); + service = CService(strMasterNodeAddr); } LogPrintf("CActiveMasternode::ManageStatus() - Checking inbound connection to '%s'\n", service.ToString().c_str()); + // There is no logical reason to restrict this to a specific port. Its a peer, what difference does it make. + /* if(service.GetPort() != 9999) { + notCapableReason = "Invalid port: " + boost::lexical_cast(service.GetPort()) + " -only 9999 is supported on mainnet."; + status = MASTERNODE_NOT_CAPABLE; + LogPrintf("CActiveMasternode::ManageStatus() - not capable: %s\n", notCapableReason.c_str()); + return; + } + */ + if(!ConnectNode((CAddress)service, service.ToString().c_str())){ notCapableReason = "Could not connect to " + service.ToString(); status = MASTERNODE_NOT_CAPABLE; LogPrintf("CActiveMasternode::ManageStatus() - not capable: %s\n", notCapableReason.c_str()); return; } - + if(pwalletMain->IsLocked()){ notCapableReason = "Wallet is locked."; @@ -72,9 +82,7 @@ void CActiveMasternode::ManageStatus() if(GetMasterNodeVin(vin, pubKeyCollateralAddress, keyCollateralAddress)) { if(GetInputAge(vin) < MASTERNODE_MIN_CONFIRMATIONS){ - notCapableReason = "Input must have least " + boost::lexical_cast(MASTERNODE_MIN_CONFIRMATIONS) + - " confirmations - " + boost::lexical_cast(GetInputAge(vin)) + " confirmations"; - LogPrintf("CActiveMasternode::ManageStatus() - %s\n", notCapableReason.c_str()); + LogPrintf("CActiveMasternode::ManageStatus() - Input must have least %d confirmations - %d confirmations\n", MASTERNODE_MIN_CONFIRMATIONS, GetInputAge(vin)); status = MASTERNODE_INPUT_TOO_NEW; return; } @@ -92,28 +100,23 @@ void CActiveMasternode::ManageStatus() if(!darkSendSigner.SetKey(strMasterNodePrivKey, errorMessage, keyMasternode, pubKeyMasternode)) { - LogPrintf("ActiveMasternode::Dseep() - Error upon calling SetKey: %s\n", errorMessage.c_str()); + LogPrintf("Register::ManageStatus() - Error upon calling SetKey: %s\n", errorMessage.c_str()); return; } - /* donations are not supported in memetic.conf */ - CScript donationAddress = CScript(); - int donationPercentage = 0; - - if(!Register(vin, service, keyCollateralAddress, pubKeyCollateralAddress, keyMasternode, pubKeyMasternode, donationAddress, donationPercentage, errorMessage)) { - LogPrintf("CActiveMasternode::ManageStatus() - Error on Register: %s\n", errorMessage.c_str()); + if(!Register(vin, service, keyCollateralAddress, pubKeyCollateralAddress, keyMasternode, pubKeyMasternode, errorMessage)) { + LogPrintf("CActiveMasternode::ManageStatus() - Error on Register: %s\n", errorMessage.c_str()); } return; } else { - notCapableReason = "Could not find suitable coins!"; LogPrintf("CActiveMasternode::ManageStatus() - Could not find suitable coins!\n"); } } //send to all peers if(!Dseep(errorMessage)) { - LogPrintf("CActiveMasternode::ManageStatus() - Error on Ping: %s\n", errorMessage.c_str()); + LogPrintf("CActiveMasternode::ManageStatus() - Error on Ping: %s", errorMessage.c_str()); } } @@ -128,7 +131,7 @@ bool CActiveMasternode::StopMasterNode(std::string strService, std::string strKe return false; } - return StopMasterNode(vin, CService(strService, true), keyMasternode, pubKeyMasternode, errorMessage); + return StopMasterNode(vin, CService(strService), keyMasternode, pubKeyMasternode, errorMessage); } // Send stop dseep to network for main masternode @@ -171,7 +174,7 @@ bool CActiveMasternode::Dseep(std::string& errorMessage) { if(!darkSendSigner.SetKey(strMasterNodePrivKey, errorMessage, keyMasternode, pubKeyMasternode)) { - LogPrintf("CActiveMasternode::Dseep() - Error upon calling SetKey: %s\n", errorMessage.c_str()); + LogPrintf("Register::ManageStatus() - Error upon calling SetKey: %s\n", errorMessage.c_str()); return false; } @@ -199,14 +202,16 @@ bool CActiveMasternode::Dseep(CTxIn vin, CService service, CKey keyMasternode, C } // Update Last Seen timestamp in masternode list - CMasternode* pmn = mnodeman.Find(vin); - if(pmn != NULL) - { - if(stop) - mnodeman.Remove(pmn->vin); - else - pmn->UpdateLastSeen(); - } else { + bool found = false; + BOOST_FOREACH(CMasterNode& mn, vecMasternodes) { + //LogPrintf(" -- %s\n", mn.vin.ToString().c_str()); + if(mn.vin == vin) { + found = true; + mn.UpdateLastSeen(); + } + } + + if(!found){ // Seems like we are trying to send a ping while the masternode is not registered in the network retErrorMessage = "Darksend Masternode List doesn't include our masternode, Shutting down masternode pinging service! " + vin.ToString(); LogPrintf("CActiveMasternode::Dseep() - Error: %s\n", retErrorMessage.c_str()); @@ -216,60 +221,55 @@ bool CActiveMasternode::Dseep(CTxIn vin, CService service, CKey keyMasternode, C } //send to all peers - LogPrintf("CActiveMasternode::Dseep() - RelayMasternodeEntryPing vin = %s\n", vin.ToString().c_str()); - mnodeman.RelayMasternodeEntryPing(vin, vchMasterNodeSignature, masterNodeSignatureTime, stop); + LogPrintf("CActiveMasternode::Dseep() - SendDarkSendElectionEntryPing vin = %s\n", vin.ToString().c_str()); + SendDarkSendElectionEntryPing(vin, vchMasterNodeSignature, masterNodeSignatureTime, stop); return true; } -bool CActiveMasternode::Register(std::string strService, std::string strKeyMasternode, std::string txHash, std::string strOutputIndex, std::string strDonationAddress, std::string strDonationPercentage, std::string& errorMessage) { - CTxIn vin; +bool CActiveMasternode::RegisterByPubKey(std::string strService, std::string strKeyMasternode, std::string collateralAddress, std::string& errorMessage) { + CTxIn vin; CPubKey pubKeyCollateralAddress; CKey keyCollateralAddress; CPubKey pubKeyMasternode; CKey keyMasternode; - CScript donationAddress = CScript(); - int donationPercentage = 0; if(!darkSendSigner.SetKey(strKeyMasternode, errorMessage, keyMasternode, pubKeyMasternode)) { - LogPrintf("CActiveMasternode::Register() - Error upon calling SetKey: %s\n", errorMessage.c_str()); - return false; + LogPrintf("CActiveMasternode::RegisterByPubKey() - Error upon calling SetKey: %s\n", errorMessage.c_str()); + return false; } - if(!GetMasterNodeVin(vin, pubKeyCollateralAddress, keyCollateralAddress, txHash, strOutputIndex)) { - errorMessage = "could not allocate vin"; - LogPrintf("CActiveMasternode::Register() - Error: %s\n", errorMessage.c_str()); - return false; - } - CBitcoinAddress address; - if (strDonationAddress != "") - { - if(!address.SetString(strDonationAddress)) - { - LogPrintf("ActiveMasternode::Register - Invalid Donation Address\n"); - return false; - } - donationAddress.SetDestination(address.Get()); + if(!GetMasterNodeVinForPubKey(collateralAddress, vin, pubKeyCollateralAddress, keyCollateralAddress)) { + errorMessage = "could not allocate vin for collateralAddress"; + LogPrintf("Register::Register() - Error: %s\n", errorMessage.c_str()); + return false; + } + return Register(vin, CService(strService), keyCollateralAddress, pubKeyCollateralAddress, keyMasternode, pubKeyMasternode, errorMessage); +} - try { - donationPercentage = boost::lexical_cast( strDonationPercentage ); - } catch( boost::bad_lexical_cast const& ) { - LogPrintf("ActiveMasternode::Register - Invalid Donation Percentage (Couldn't cast)\n"); - return false; - } +bool CActiveMasternode::Register(std::string strService, std::string strKeyMasternode, std::string txHash, std::string strOutputIndex, std::string& errorMessage) { + CTxIn vin; + CPubKey pubKeyCollateralAddress; + CKey keyCollateralAddress; + CPubKey pubKeyMasternode; + CKey keyMasternode; - if(donationPercentage < 0 || donationPercentage > 100) - { - LogPrintf("ActiveMasternode::Register - Donation Percentage Out Of Range\n"); - return false; - } + if(!darkSendSigner.SetKey(strKeyMasternode, errorMessage, keyMasternode, pubKeyMasternode)) + { + LogPrintf("CActiveMasternode::Register() - Error upon calling SetKey: %s\n", errorMessage.c_str()); + return false; } - return Register(vin, CService(strService, true), keyCollateralAddress, pubKeyCollateralAddress, keyMasternode, pubKeyMasternode, donationAddress, donationPercentage, errorMessage); + if(!GetMasterNodeVin(vin, pubKeyCollateralAddress, keyCollateralAddress, txHash, strOutputIndex)) { + errorMessage = "could not allocate vin"; + LogPrintf("Register::Register() - Error: %s\n", errorMessage.c_str()); + return false; + } + return Register(vin, CService(strService), keyCollateralAddress, pubKeyCollateralAddress, keyMasternode, pubKeyMasternode, errorMessage); } -bool CActiveMasternode::Register(CTxIn vin, CService service, CKey keyCollateralAddress, CPubKey pubKeyCollateralAddress, CKey keyMasternode, CPubKey pubKeyMasternode, CScript donationAddress, int donationPercentage, std::string &retErrorMessage) { +bool CActiveMasternode::Register(CTxIn vin, CService service, CKey keyCollateralAddress, CPubKey pubKeyCollateralAddress, CKey keyMasternode, CPubKey pubKeyMasternode, std::string &retErrorMessage) { std::string errorMessage; std::vector vchMasterNodeSignature; std::string strMasterNodeSignMessage; @@ -278,7 +278,7 @@ bool CActiveMasternode::Register(CTxIn vin, CService service, CKey keyCollateral std::string vchPubKey(pubKeyCollateralAddress.begin(), pubKeyCollateralAddress.end()); std::string vchPubKey2(pubKeyMasternode.begin(), pubKeyMasternode.end()); - std::string strMessage = service.ToString() + boost::lexical_cast(masterNodeSignatureTime) + vchPubKey + vchPubKey2 + boost::lexical_cast(PROTOCOL_VERSION) + donationAddress.ToString() + boost::lexical_cast(donationPercentage); + std::string strMessage = service.ToString() + boost::lexical_cast(masterNodeSignatureTime) + vchPubKey + vchPubKey2 + boost::lexical_cast(PROTOCOL_VERSION); if(!darkSendSigner.SignMessage(strMessage, errorMessage, vchMasterNodeSignature, keyCollateralAddress)) { retErrorMessage = "sign message failed: " + errorMessage; @@ -292,18 +292,22 @@ bool CActiveMasternode::Register(CTxIn vin, CService service, CKey keyCollateral return false; } - CMasternode* pmn = mnodeman.Find(vin); - if(pmn == NULL) - { + bool found = false; + LOCK(cs_masternodes); + BOOST_FOREACH(CMasterNode& mn, vecMasternodes) + if(mn.vin == vin) + found = true; + + if(!found) { LogPrintf("CActiveMasternode::Register() - Adding to masternode list service: %s - vin: %s\n", service.ToString().c_str(), vin.ToString().c_str()); - CMasternode mn(service, vin, pubKeyCollateralAddress, vchMasterNodeSignature, masterNodeSignatureTime, pubKeyMasternode, PROTOCOL_VERSION, donationAddress, donationPercentage); + CMasterNode mn(service, vin, pubKeyCollateralAddress, vchMasterNodeSignature, masterNodeSignatureTime, pubKeyMasternode, PROTOCOL_VERSION); mn.UpdateLastSeen(masterNodeSignatureTime); - mnodeman.Add(mn); + vecMasternodes.push_back(mn); } //send to all peers - LogPrintf("CActiveMasternode::Register() - RelayElectionEntry vin = %s\n", vin.ToString().c_str()); - mnodeman.RelayMasternodeEntry(vin, service, vchMasterNodeSignature, masterNodeSignatureTime, pubKeyCollateralAddress, pubKeyMasternode, -1, -1, masterNodeSignatureTime, PROTOCOL_VERSION, donationAddress, donationPercentage); + LogPrintf("CActiveMasternode::Register() - SendDarkSendElectionEntry vin = %s\n", vin.ToString().c_str()); + SendDarkSendElectionEntry(vin, service, vchMasterNodeSignature, masterNodeSignatureTime, pubKeyCollateralAddress, pubKeyMasternode, -1, -1, masterNodeSignatureTime, PROTOCOL_VERSION); return true; } @@ -429,12 +433,12 @@ vector CActiveMasternode::SelectCoinsMasternode() vector filteredCoins; // Retrieve all possible outputs - pwalletMain->AvailableCoinsMN(vCoins); + pwalletMain->AvailableCoins(vCoins); // Filter BOOST_FOREACH(const COutput& out, vCoins) { - if(out.tx->vout[out.i].nValue == GetMNCollateral(pindexBest->nHeight)*COIN) { //exactly + if(out.tx->vout[out.i].nValue == 15000*COIN) { //exactly filteredCoins.push_back(out); } } @@ -456,13 +460,39 @@ vector CActiveMasternode::SelectCoinsMasternodeForPubKey(std::string co // Filter BOOST_FOREACH(const COutput& out, vCoins) { - if(out.tx->vout[out.i].scriptPubKey == scriptPubKey && out.tx->vout[out.i].nValue == GetMNCollateral(pindexBest->nHeight)*COIN) { //exactly + if(out.tx->vout[out.i].scriptPubKey == scriptPubKey && out.tx->vout[out.i].nValue == 15000*COIN) { //exactly filteredCoins.push_back(out); } } return filteredCoins; } + +/* select coins with specified transaction hash and output index */ +/* +bool CActiveMasternode::SelectCoinsMasternode(CTxIn& vin, int64& nValueIn, CScript& pubScript, std::string strTxHash, std::string strOutputIndex) +{ + CWalletTx ctx; + + // Convert configuration strings + uint256 txHash; + int outputIndex; + txHash.SetHex(strTxHash); + std::istringstream(strOutputIndex) >> outputIndex; + + if(pwalletMain->GetTransaction(txHash, ctx)) { + if(ctx.vout[outputIndex].nValue == 1000*COIN) { //exactly + vin = CTxIn(ctx.GetHash(), outputIndex); + pubScript = ctx.vout[outputIndex].scriptPubKey; // the inputs PubKey + nValueIn = ctx.vout[outputIndex].nValue; + return true; + } + } + + return false; +} +*/ + // when starting a masternode, this can enable to run as a hot wallet with no funds bool CActiveMasternode::EnableHotColdMasterNode(CTxIn& newVin, CService& newService) { diff --git a/src/activemasternode.h b/src/activemasternode.h index b06a7c86..fef583a4 100644 --- a/src/activemasternode.h +++ b/src/activemasternode.h @@ -9,7 +9,7 @@ #include "sync.h" #include "net.h" #include "key.h" -#include "masternode.h" +//#include "primitives/transaction.h" #include "main.h" #include "init.h" #include "wallet.h" @@ -31,7 +31,7 @@ class CActiveMasternode std::string notCapableReason; CActiveMasternode() - { + { status = MASTERNODE_NOT_PROCESSED; } @@ -44,12 +44,11 @@ class CActiveMasternode bool StopMasterNode(std::string strService, std::string strKeyMasternode, std::string& errorMessage); // stop remote masternode bool StopMasterNode(CTxIn vin, CService service, CKey key, CPubKey pubKey, std::string& errorMessage); // stop any masternode - /// Register remote Masternode - bool Register(std::string strService, std::string strKey, std::string txHash, std::string strOutputIndex, std::string strDonationAddress, std::string strDonationPercentage, std::string& errorMessage); - /// Register any Masternode - bool Register(CTxIn vin, CService service, CKey key, CPubKey pubKey, CKey keyMasternode, CPubKey pubKeyMasternode, CScript donationAddress, int donationPercentage, std::string &retErrorMessage); + bool Register(std::string strService, std::string strKey, std::string txHash, std::string strOutputIndex, std::string& errorMessage); // register remote masternode + bool Register(CTxIn vin, CService service, CKey key, CPubKey pubKey, CKey keyMasternode, CPubKey pubKeyMasternode, std::string &retErrorMessage); // register any masternode + bool RegisterByPubKey(std::string strService, std::string strKeyMasternode, std::string collateralAddress, std::string& errorMessage); // register for a specific collateral address - // get 10000 MEME input that can be used for the masternode + // get 1000DRK input that can be used for the masternode bool GetMasterNodeVin(CTxIn& vin, CPubKey& pubkey, CKey& secretKey); bool GetMasterNodeVin(CTxIn& vin, CPubKey& pubkey, CKey& secretKey, std::string strTxHash, std::string strOutputIndex); bool GetMasterNodeVinForPubKey(std::string collateralAddress, CTxIn& vin, CPubKey& pubkey, CKey& secretKey); @@ -58,6 +57,8 @@ class CActiveMasternode vector SelectCoinsMasternodeForPubKey(std::string collateralAddress); bool GetVinFromOutput(COutput out, CTxIn& vin, CPubKey& pubkey, CKey& secretKey); + //bool SelectCoinsMasternode(CTxIn& vin, int64& nValueIn, CScript& pubScript, std::string strTxHash, std::string strOutputIndex); + // enable hot wallet mode (run a masternode with no funds) bool EnableHotColdMasterNode(CTxIn& vin, CService& addr); }; diff --git a/src/base58.cpp b/src/base58.cpp index 80152643..16cd39a3 100644 --- a/src/base58.cpp +++ b/src/base58.cpp @@ -6,6 +6,7 @@ #include "hash.h" #include "uint256.h" +#include "chainparams.h" #include #include @@ -210,6 +211,12 @@ bool CBase58Data::SetString(const std::string& str) { return SetString(str.c_str()); } +std::string CBase58Data::ToKekdaqString() const { + std::vector vch = Params().Base58Prefix(CChainParams::KEKDAQ_SECRET_KEY); + vch.insert(vch.end(), vchData.begin(), vchData.end()); + return EncodeBase58Check(vch); +} + std::string CBase58Data::ToString() const { std::vector vch = vchVersion; vch.insert(vch.end(), vchData.begin(), vchData.end()); @@ -238,6 +245,9 @@ namespace { }; }; +CChainParams::Base58Type pubkey_address = (CChainParams::Base58Type)0; +CChainParams::Base58Type script_address = (CChainParams::Base58Type)5; + bool CBitcoinAddress::Set(const CKeyID &id) { SetData(Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS), &id, 20); return true; @@ -292,6 +302,13 @@ void CBitcoinSecret::SetKey(const CKey& vchSecret) { vchData.push_back(1); } +void CBitcoinSecret::SetKekdaqKey(const CKey& vchSecret) { + assert(vchSecret.IsValid()); + SetData(Params().Base58Prefix(CChainParams::KEKDAQ_SECRET_KEY), vchSecret.begin(), vchSecret.size()); + if (vchSecret.IsCompressed()) + vchData.push_back(1); +} + CKey CBitcoinSecret::GetKey() { CKey ret; ret.Set(&vchData[0], &vchData[32], vchData.size() > 32 && vchData[32] == 1); @@ -300,7 +317,7 @@ CKey CBitcoinSecret::GetKey() { bool CBitcoinSecret::IsValid() const { bool fExpectedFormat = vchData.size() == 32 || (vchData.size() == 33 && vchData[32] == 1); - bool fCorrectVersion = vchVersion == Params().Base58Prefix(CChainParams::SECRET_KEY); + bool fCorrectVersion = vchVersion == Params().Base58Prefix(CChainParams::SECRET_KEY) || vchVersion == Params().Base58Prefix(CChainParams::KEKDAQ_SECRET_KEY); return fExpectedFormat && fCorrectVersion; } diff --git a/src/base58.h b/src/base58.h index 436ac103..78918ff2 100644 --- a/src/base58.h +++ b/src/base58.h @@ -83,6 +83,7 @@ class CBase58Data bool SetString(const char* psz, unsigned int nVersionBytes = 1); bool SetString(const std::string& str); std::string ToString() const; + std::string ToKekdaqString() const; int CompareTo(const CBase58Data& b58) const; bool operator==(const CBase58Data& b58) const { return CompareTo(b58) == 0; } @@ -92,7 +93,7 @@ class CBase58Data bool operator> (const CBase58Data& b58) const { return CompareTo(b58) > 0; } }; -/** base58-encoded Memetic addresses. +/** base58-encoded PepeCoin addresses. * Public-key-hash-addresses have version 0 (or 111 testnet). * The data vector contains RIPEMD160(SHA256(pubkey)), where pubkey is the serialized public key. * Script-hash-addresses have version 5 (or 196 testnet). @@ -122,11 +123,12 @@ class CBitcoinSecret : public CBase58Data { public: void SetKey(const CKey& vchSecret); + void SetKekdaqKey(const CKey& vchSecret); CKey GetKey(); bool IsValid() const; bool SetString(const char* pszSecret); bool SetString(const std::string& strSecret); - + CBitcoinSecret(const CKey& vchSecret) { SetKey(vchSecret); } CBitcoinSecret() {} }; @@ -156,4 +158,4 @@ template class CBitcoinExtK typedef CBitcoinExtKeyBase CBitcoinExtKey; typedef CBitcoinExtKeyBase CBitcoinExtPubKey; -#endif // BITCOIN_BASE58_H \ No newline at end of file +#endif // BITCOIN_BASE58_H \ No newline at end of file diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index 074afa70..4b3c10e2 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -52,12 +52,12 @@ bool AppInit(int argc, char* argv[]) if (mapArgs.count("-?") || mapArgs.count("--help")) { // First part of help message is specific to bitcoind / RPC client - std::string strUsage = _("Memetic version") + " " + FormatFullVersion() + "\n\n" + + std::string strUsage = _("PepeCoin version") + " " + FormatFullVersion() + "\n\n" + _("Usage:") + "\n" + - " memeticd [options] " + "\n" + - " memeticd [options] [params] " + _("Send command to -server or memeticd") + "\n" + - " memeticd [options] help " + _("List commands") + "\n" + - " memeticd [options] help " + _("Get help for a command") + "\n"; + " pepecoind [options] " + "\n" + + " pepecoind [options] [params] " + _("Send command to -server or pepecoind") + "\n" + + " pepecoind [options] help " + _("List commands") + "\n" + + " pepecoind [options] help " + _("Get help for a command") + "\n"; strUsage += "\n" + HelpMessage(); @@ -67,7 +67,7 @@ bool AppInit(int argc, char* argv[]) // Command-line RPC for (int i = 1; i < argc; i++) - if (!IsSwitchChar(argv[i][0]) && !boost::algorithm::istarts_with(argv[i], "memetic:")) + if (!IsSwitchChar(argv[i][0]) && !boost::algorithm::istarts_with(argv[i], "pepecoin:")) fCommandLine = true; if (fCommandLine) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index d4836de0..6b9189b1 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -2,58 +2,49 @@ // Copyright (c) 2014 DashCoin Developers // Copyright (c) 2015 Transfercoin Developer // Copyright (c) 2015-2016 PepeCoin Developers -// Copyright (c) 2016 The Memetic Developers +// Copyright (c) 2016-2019 The PepeCoin Developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. - + #include "assert.h" - + #include "chainparams.h" #include "main.h" #include "util.h" - + #include - + using namespace boost::assign; - + struct SeedSpec6 { uint8_t addr[16]; uint16_t port; }; - + #include "chainparamsseeds.h" - + // // Main network // - -// Convert the pnSeeds array into usable address objects. -static void convertSeeds(std::vector &vSeedsOut, const unsigned int *data, unsigned int count, int port) + +// Convert the pnSeeds6 array into usable address objects. +static void convertSeed6(std::vector &vSeedsOut, const SeedSpec6 *data, unsigned int count) { - // It'll only connect to one or two seed nodes because once it connects, - // it'll get a pile of addresses with newer timestamps. - // Seed nodes are given a random 'last seen time' of between one and two - // weeks ago. - const int64_t nOneWeek = 7*24*60*60; - for (unsigned int k = 0; k < count; ++k) + // It'll only connect to one or two seed nodes because once it connects, + // it'll get a pile of addresses with newer timestamps. + // Seed nodes are given a random 'last seen time' of between one and two + // weeks ago. + const int64_t nOneWeek = 7*24*60*60; + for (unsigned int i = 0; i < count; i++) { - struct in_addr ip; - unsigned int i = data[k], t; - - // -- convert to big endian - t = (i & 0x000000ff) << 24u - | (i & 0x0000ff00) << 8u - | (i & 0x00ff0000) >> 8u - | (i & 0xff000000) >> 24u; - - memcpy(&ip, &t, sizeof(ip)); - - CAddress addr(CService(ip, port)); - addr.nTime = GetTime()-GetRand(nOneWeek)-nOneWeek; + struct in6_addr ip; + memcpy(&ip, data[i].addr, sizeof(ip)); + CAddress addr(CService(ip, data[i].port)); + addr.nTime = GetTime() - GetRand(nOneWeek) - nOneWeek; vSeedsOut.push_back(addr); } } - + class CMainParams : public CChainParams { public: CMainParams() { @@ -64,11 +55,11 @@ class CMainParams : public CChainParams { pchMessageStart[1] = 0xc4; pchMessageStart[2] = 0x2c; pchMessageStart[3] = 0x2f; - vAlertPubKey = ParseHex("0x04688723a08e1038ff423c00483e7dee15f6a3016e27c2dadd23c6c338ad7a5cd7f9e3f3933b96b2c78705bba59845e07566b8c9f6638476fa60ff5ee8d1108888"); + vAlertPubKey = ParseHex("0x0451d55bb3330f555fed011b93a04a9d00ec542dd805c80b1babd7e29bca08dd7fc796cb822dfd20087421a5dc21c0a2fdd6dbb5c82229f41eb9f57e4a076dd4ed"); nDefaultPort = 29377; nRPCPort = 29376; bnProofOfWorkLimit = CBigNum(~uint256(0) >> 16); - + const char* pszTimestamp = "March 5, 2016: UN human rights chief backs Apple in FBI encryption row - BBC News"; std::vector vin; vin.resize(1); @@ -84,7 +75,7 @@ class CMainParams : public CChainParams { genesis.nTime = 1457184666; genesis.nBits = bnProofOfWorkLimit.GetCompact(); genesis.nNonce = 663024; - + hashGenesisBlock = genesis.GetHash(); /* if (false ) { @@ -101,7 +92,7 @@ class CMainParams : public CChainParams { } } } - + //// debug print printf("block.GetHash() == %s\n", genesis.GetHash().ToString().c_str()); printf("block.hashMerkleRoot == %s\n", genesis.hashMerkleRoot.ToString().c_str()); @@ -110,30 +101,34 @@ class CMainParams : public CChainParams { */ assert(hashGenesisBlock == uint256("0x00008cae6a01358d774087e2daf3b2108252b0b5a440195ffec4fd38f9892272")); assert(genesis.hashMerkleRoot == uint256("0xf8d91b2c93bd7222515770b67f20d3380edf8292548daeb3b0ce82fd5764dcac")); - - + + base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,55); // pepecoin addresses start with P base58Prefixes[SCRIPT_ADDRESS] = std::vector(1,85); base58Prefixes[SECRET_KEY] = std::vector(1,153); + base58Prefixes[KEKDAQ_SECRET_KEY] = std::vector(1,99); base58Prefixes[STEALTH_ADDRESS] = std::vector(1,40); base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x04)(0x88)(0xB2)(0x1E).convert_to_container >();; base58Prefixes[EXT_SECRET_KEY] = list_of(0x04)(0x88)(0xAD)(0xE4).convert_to_container >();; - - vSeeds.push_back(CDNSSeedData("First", "seed.memeticproject.com")); - convertSeeds(vFixedSeeds, pnSeed, ARRAYLEN(pnSeed), nDefaultPort); - + + vSeeds.push_back(CDNSSeedData("seed.kekdaq.com", "seed.kekdaq.com")); + vSeeds.push_back(CDNSSeedData("seed.pepecoin.net", "seed.pepecoin.net")); + vSeeds.push_back(CDNSSeedData("seed.memetic.ai", "seed.memetic.ai")); + + convertSeed6(vFixedSeeds, pnSeed6_main, ARRAYLEN(pnSeed6_main)); + nPoolMaxTransactions = 3; //strSporkKey = "046f78dcf911fbd61910136f7f0f8d90578f68d0b3ac973b5040fb7afb501b5939f39b108b0569dca71488f5bbf498d92e4d1194f6f941307ffd95f75e76869f0e"; //strMasternodePaymentsPubKey = "046f78dcf911fbd61910136f7f0f8d90578f68d0b3ac973b5040fb7afb501b5939f39b108b0569dca71488f5bbf498d92e4d1194f6f941307ffd95f75e76869f0e"; - strDarksendPoolDummyAddress = "0xPJJBpDg5LKJhAkqGDhG4Wuo9AUXBkz4SWY"; + strDarksendPoolDummyAddress = "PJJBpDg5LKJhAkqGDhG4Wuo9AUXBkz4SWY"; nLastPOWBlock = 71489; //change from 70000 to 71489 and increase protocol version to resolve the fork issue nPOSStartBlock = 9000; nRestartPOWBlock = 320000; // when POW restarts } - + virtual const CBlock& GenesisBlock() const { return genesis; } virtual Network NetworkID() const { return CChainParams::MAIN; } - + virtual const vector& FixedSeeds() const { return vFixedSeeds; } @@ -142,61 +137,62 @@ class CMainParams : public CChainParams { vector vFixedSeeds; }; static CMainParams mainParams; - - + + // // Testnet // - + class CTestNetParams : public CMainParams { public: CTestNetParams() { // The message start string is designed to be unlikely to occur in normal data. // The characters are rarely used upper ASCII, not valid as UTF-8, and produce // a large 4-byte int at any alignment. - pchMessageStart[0] = 0x3a; - pchMessageStart[1] = 0xc4; - pchMessageStart[2] = 0x2c; - pchMessageStart[3] = 0x2f; + pchMessageStart[0] = 0x2b; + pchMessageStart[1] = 0xca; + pchMessageStart[2] = 0x3c; + pchMessageStart[3] = 0x3f; bnProofOfWorkLimit = CBigNum(~uint256(0) >> 16); vAlertPubKey = ParseHex("04cc24ab003c828cdd9cf4db2ebbde8e1cecb3bbfa8b3127fcb9dd9b84d44112080827ed7c49a648af9fe788ff42e316aee665879c553f099e55299d6b54edd7e0"); nDefaultPort = 39377; nRPCPort = 39376; strDataDir = "testnet"; - + // Modify the testnet genesis block so the timestamp is valid for a later start. genesis.nBits = bnProofOfWorkLimit.GetCompact(); genesis.nNonce = 663024; - + assert(hashGenesisBlock == uint256("0x00008cae6a01358d774087e2daf3b2108252b0b5a440195ffec4fd38f9892272")); - + vFixedSeeds.clear(); vSeeds.clear(); - + base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,55); base58Prefixes[SCRIPT_ADDRESS] = std::vector(1,196); base58Prefixes[SECRET_KEY] = std::vector(1,239); + base58Prefixes[KEKDAQ_SECRET_KEY] = std::vector(1,63); base58Prefixes[STEALTH_ADDRESS] = std::vector(1,40); base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x04)(0x35)(0x87)(0xCF).convert_to_container >();; base58Prefixes[EXT_SECRET_KEY] = list_of(0x04)(0x35)(0x83)(0x94).convert_to_container >();; - - convertSeeds(vFixedSeeds, pnTestnetSeed, ARRAYLEN(pnTestnetSeed), nDefaultPort); - - nLastPOWBlock = 2000; - nPOSStartBlock = 20; - nRestartPOWBlock = 320000; // when POW restarts + + convertSeed6(vFixedSeeds, pnSeed6_test, ARRAYLEN(pnSeed6_test)); + + nLastPOWBlock = 5000000; + nPOSStartBlock = 100; + // nRestartPOWBlock = 320000; // when POW restarts } virtual Network NetworkID() const { return CChainParams::TESTNET; } }; static CTestNetParams testNetParams; - - + + static CChainParams *pCurrentParams = &mainParams; - + const CChainParams &Params() { return *pCurrentParams; } - + void SelectParams(CChainParams::Network network) { switch (network) { case CChainParams::MAIN: @@ -210,11 +206,11 @@ void SelectParams(CChainParams::Network network) { return; } } - + bool SelectParamsFromCommandLine() { - + bool fTestNet = GetBoolArg("-testnet", false); - + if (fTestNet) { SelectParams(CChainParams::TESTNET); } else { diff --git a/src/chainparams.h b/src/chainparams.h index 3fe78f07..0857f99f 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -50,7 +50,7 @@ class CChainParams STEALTH_ADDRESS, EXT_PUBLIC_KEY, EXT_SECRET_KEY, - + KEKDAQ_SECRET_KEY, MAX_BASE58_TYPES }; diff --git a/src/chainparamsseeds.h b/src/chainparamsseeds.h index f61d0032..ca8e048a 100644 --- a/src/chainparamsseeds.h +++ b/src/chainparamsseeds.h @@ -5,15 +5,15 @@ // Each line contains a 16-byte IPv6 address and a port. // IPv4 as well as onion addresses are wrapped inside a IPv6 address accordingly. -static const unsigned int pnSeed[] = +static const SeedSpec6 pnSeed6_main[] = { - // We will do this in DNS instead - seed.memeticproject.com - - + // We will do this in DNS instead - seed.pepecoin.co + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6b,0xaa,0x37,0xd3}, 29377}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x68,0xec,0x1e,0xc9}, 29377} }; -static const unsigned int pnTestnetSeed[] = { +static const SeedSpec6 pnSeed6_test[] = { }; #endif diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp index 1c3a8517..a1dc9a2d 100644 --- a/src/checkpoints.cpp +++ b/src/checkpoints.cpp @@ -12,7 +12,7 @@ #include "uint256.h" -static const int nCheckpointSpan = 100; +static int nCheckpointSpan = 100; namespace Checkpoints { @@ -23,7 +23,7 @@ namespace Checkpoints // + Is surrounded by blocks with reasonable timestamps // (no blocks before with a timestamp after, none after with // timestamp before) - // + Contains no strange transactions + // + Contains no strange transactionsg // static MapCheckpoints mapCheckpoints = boost::assign::map_list_of @@ -45,7 +45,38 @@ namespace Checkpoints (48398, uint256("0xdfe376d27cf8c6f11beaa29f4a3966f1011847b9af91ff81fbe69fc03178294b")) (71320, uint256("0x4298a1d06c0effb8a6f15205bb5e6d7c6ea3d6ef68a16a40ef9480c49a3cf212")) (219777, uint256("0xe9f0929405524b5a3b2888c392351c902a11b7a167b3e12d63720b62d344230f")) - + (333777, uint256("0x45bff45918baa567e50568a5e0218e9796b9ef8ea3bdb44e1e6c17f95e687542")) + (447777, uint256("0x307f3cb162219d6763439851f4c81ae6d0b867adccc97c6cc8d962b67f0de43a")) + (549333, uint256("0xfd66916698a7cb627b8187be3852b9df59d23a73e57d2e03eeee2da06a068bed")) + (580500, uint256("0xe0dec5f9a0f267fabf46413c331b9a8fc36ddac260a09afa0d0ecbbc574efff6")) + (581777, uint256("0xf578368df2ca18fe517931d2a51c9cc2a6c5e00b168be4773786ce80e33ed47e")) + (600000, uint256("0x69374e4dd79947ac885587b80a2730efef922772b01494885e95c533f415c46a")) + (736820, uint256("0x40beb7ceb66dd20e22854a77e020bc76bf401c92e3d1e455d711067ab0de0d81")) + (738522, uint256("0x8cfc6234f870351ab359a5f8d116af4e0203a50de8a111016f081902da2a782e")) + (746200, uint256("0xd5c3e2c2bf888cc9b3a594fafa8a67c8696bedb39daa2a28c475fe88b64d663f")) + (834600, uint256("0x0cd92f0d45ceb2c69c8d7845a584e69668cce098c01d3e1ec04af285afe2d378")) + (850000, uint256("0x010f9fd8aba13696829b5b6003770b8e947df06eaf507de592b4cc3bc9b04192")) + (885000, uint256("0x0fcb255ff69a157d13ff94bce583f2993b9bc1ed385ecb0d027c95b29c03b222")) + (889777, uint256("0x86a3ad3af9a93f4a5c5c6d5e020f1a323af4cd1d43fee72d6747177e71320d9e")) + (982877, uint256("0x5f2d4d7ab746a3373b82a45ec194d854688dff19b354038d71f410ed7bb15ea9")) + (984066, uint256("0x3497b6650d00fce42f448c1731327ad31616f073b4855331d4bc83923c11312a")) + (1034505, uint256("0x638a260d83c15e99959b08b1814cbf376136571900f8ba525c66deb8a8965167")) + (1090777, uint256("0x4c68bdbb07f106476bda8f98417c7ded56d26b8a46a4cd5d102e65076e63d293")) + (1118701, uint256("0x43481ac2839e6f4ab94d14d7fd683789d4f5a493cbef39f9cc7dcf9348163564")) + (1337777, uint256("0xd2d76e4321837506d5c399d69715a97e2fc7356e0f0f9ee809441077598fa64d")) + (1557775, uint256("0x24aa269659269c85ff8416e1bc475af3c91510c4669d826927b98a3cd50f965a")) + (1790400, uint256("0x0ce318476cf4676e2452c71c0c6b9570f73fc21a332b19b4a0bf6bc391a40f01")) + (1807255, uint256("0xc740d0099fee03a40f7af9a9696dbe64488c87222f2f392b35c180c16b83c0ca")) + (1814411, uint256("0x9b37845256869b5dfea201b702fb66ac3897a60b21c5982068ada1bf17617070")) + (1818757, uint256("0x4f2e5af91f2b310fc2011adc0a1e5a5efbdad86fb0548e286395f28c6a1babc7")) + (1819185, uint256("0x8db2c20395b399b4b684ded2bb536e9b13421d929955b94eb0f641dbbef8b034")) + (1828177, uint256("0x43c261b8d7df4726b529052ce9ea5c061af278692974873f9c0e77372f5dd33f")) + (1828220, uint256("0xae1f9c02bc61599db09fa61a6a9ca19d3dcbab7d29a6b9a6675a48bb0a9a5ad7")) + (1833222, uint256("0xdd9c82e950acd29943da35de27193c77ab7d1d7c2b60e1b9fb6625d6a300e470")) + (1839903, uint256("0x59154e986b1ddc7367b341ee6582818a4e7879fc9bb2f4c9a9eca036c29ab2f1")) + (2000077, uint256("0xc2f2b32dd89d51891c03565e54fcb9f3a40a35b193ce5c3f54c19c19672e6e49")) + (2239315, uint256("0xadd021fcc037bae4744397a95784534e40b7de3d6fbd4e55ffbec6e2aa566ed3")) + (2400777, uint256("0x4fed3c5bdd44ba97a2c0565bb41d59d1c8b68a6837dbca02c8a8be8ea2eebcfc")) ; // TestNet has no checkpoints @@ -86,6 +117,15 @@ namespace Checkpoints // Automatically select a suitable sync-checkpoint const CBlockIndex* AutoSelectSyncCheckpoint() { + // tighten automatic checkpointing to 10 blocks in past for reorg fix attempt + if (pindexBest->nHeight >= PEPE_JACKOLANTERN_FORK_HEIGHT) + nCheckpointSpan = 10; + + // set autocheckpointing to 25 blocks max to limit forced resyncs + if (pindexBest->nHeight >= PEPE_STAKE_CONF_TWEAK) + nCheckpointSpan = 25; + + const CBlockIndex *pindex = pindexBest; // Search backward for a block within max span and maturity window while (pindex->pprev && pindex->nHeight + nCheckpointSpan > pindexBest->nHeight) diff --git a/src/clientversion.h b/src/clientversion.h index 3fb14258..fce197f0 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -6,9 +6,9 @@ // // These need to be macros, as version.cpp's and bitcoin-qt.rc's voodoo requires it -#define CLIENT_VERSION_MAJOR 1 -#define CLIENT_VERSION_MINOR 8 -#define CLIENT_VERSION_REVISION 8 +#define CLIENT_VERSION_MAJOR 3 +#define CLIENT_VERSION_MINOR 1 +#define CLIENT_VERSION_REVISION 1 #define CLIENT_VERSION_BUILD 0 // Set to true for release, false for prerelease or test build diff --git a/src/contrib/bitrpc/bitrpc.py b/src/contrib/bitrpc/bitrpc.py index acabb30c..3fbda0d9 100644 --- a/src/contrib/bitrpc/bitrpc.py +++ b/src/contrib/bitrpc/bitrpc.py @@ -24,7 +24,7 @@ elif cmd == "getaccount": try: - addr = raw_input("Enter a Memetic address: ") + addr = raw_input("Enter a PepeCoin address: ") print access.getaccount(addr) except: print "\n---An error occurred---\n" @@ -126,7 +126,7 @@ elif cmd == "getreceivedbyaddress": try: - addr = raw_input("Enter a Memetic address (optional): ") + addr = raw_input("Enter a PepeCoin address (optional): ") mc = raw_input("Minimum confirmations (optional): ") try: print access.getreceivedbyaddress(addr, mc) diff --git a/src/contrib/gitian-descriptors/README b/src/contrib/gitian-descriptors/README index c9d1f52e..442044fd 100644 --- a/src/contrib/gitian-descriptors/README +++ b/src/contrib/gitian-descriptors/README @@ -161,7 +161,7 @@ login again: $ ssh debian@localhost -p 22222 $ git clone https://github.com/devrandom/gitian-builder.git -$ git clone https://github.com/SCDeveloper/Memetic.git memetic +$ git clone https://github.com/SCDeveloper/PepeCoin.git pepecoin $ cd gitian-builder @@ -170,7 +170,7 @@ $ ./bin/make-base-vm --lxc --arch i386 --suite trusty $ mkdir inputs; $ cd inputs; -$ cp ../../memetic/libs/secp256k1-master.zip . +$ cp ../../pepecoin/libs/secp256k1-master.zip . $ wget http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.9.20151008.tar.gz -Ominiupnpc-1.9.20151008.tar.gz; $ wget http://download.icu-project.org/files/icu4c/55.1/icu4c-55_1-src.tgz; $ wget http://download.oracle.com/berkeley-db/db-6.1.26.NC.tar.gz; @@ -193,20 +193,20 @@ $ wget http://download.qt.io/archive/qt/5.5/5.5.0/single/qt-everywhere-opensourc $ cd ~/gitian-builder; $ LXC_EXECUTE=lxc-execute; PATH="$(pwd)/libexec/:$PATH"; -$ ./bin/gbuild --commit memetic=HEAD ../memetic/contrib/gitian-descriptors/deps-linux.yml -$ mv build/out/memetic-deps-*.zip inputs/ +$ ./bin/gbuild --commit pepecoin=HEAD ../pepecoin/contrib/gitian-descriptors/deps-linux.yml +$ mv build/out/pepecoin-deps-*.zip inputs/ -$ ./bin/gbuild --commit memetic=HEAD ../memetic/contrib/gitian-descriptors/gitian-linux.yml +$ ./bin/gbuild --commit pepecoin=HEAD ../pepecoin/contrib/gitian-descriptors/gitian-linux.yml $ mkdir -p ../compiled/linux $ mv build/out/* ../compiled/linux/ -$ ./bin/gbuild --commit memetic=HEAD ../memetic/contrib/gitian-descriptors/deps-win.yml -$ mv build/out/memetic-deps-*.zip inputs/ +$ ./bin/gbuild --commit pepecoin=HEAD ../pepecoin/contrib/gitian-descriptors/deps-win.yml +$ mv build/out/pepecoin-deps-*.zip inputs/ -$ ./bin/gbuild --commit memetic=HEAD ../memetic/contrib/gitian-descriptors/qt-win.yml +$ ./bin/gbuild --commit pepecoin=HEAD ../pepecoin/contrib/gitian-descriptors/qt-win.yml $ mv build/out/qt-win*.zip inputs/ -$ ./bin/gbuild --commit memetic=HEAD ../memetic/contrib/gitian-descriptors/gitian-win.yml +$ ./bin/gbuild --commit pepecoin=HEAD ../pepecoin/contrib/gitian-descriptors/gitian-win.yml $ mkdir -p ../compiled/win $ mv build/out/* ../compiled/win/ diff --git a/src/contrib/gitian-descriptors/deps-linux.yml b/src/contrib/gitian-descriptors/deps-linux.yml index f57eafbe..d7fa97e8 100644 --- a/src/contrib/gitian-descriptors/deps-linux.yml +++ b/src/contrib/gitian-descriptors/deps-linux.yml @@ -1,5 +1,5 @@ --- -name: "memetic-deps" +name: "pepecoin-deps" suites: - "trusty" architectures: @@ -135,5 +135,5 @@ script: | # # cd $STAGING - find include lib bin host | sort | zip -X@ $OUTDIR/memetic-deps-linux${GBUILD_BITS}-gitian.zip + find include lib bin host | sort | zip -X@ $OUTDIR/pepecoin-deps-linux${GBUILD_BITS}-gitian.zip diff --git a/src/contrib/gitian-descriptors/deps-osx.yml b/src/contrib/gitian-descriptors/deps-osx.yml index 25ef19e2..879056a1 100644 --- a/src/contrib/gitian-descriptors/deps-osx.yml +++ b/src/contrib/gitian-descriptors/deps-osx.yml @@ -1,5 +1,5 @@ --- -name: "memetic-deps" +name: "pepecoin-deps" suites: - "trusty" architectures: @@ -135,4 +135,4 @@ script: | #done # cd $INSTALLPREFIX - find include lib | sort | zip -X@ $OUTDIR/memetic-deps-osx-gitian.zip + find include lib | sort | zip -X@ $OUTDIR/pepecoin-deps-osx-gitian.zip diff --git a/src/contrib/gitian-descriptors/deps-win.yml b/src/contrib/gitian-descriptors/deps-win.yml index ea7a3015..a056ecc9 100644 --- a/src/contrib/gitian-descriptors/deps-win.yml +++ b/src/contrib/gitian-descriptors/deps-win.yml @@ -1,5 +1,5 @@ --- -name: "memetic-deps" +name: "pepecoin-deps" suites: - "trusty" architectures: @@ -204,5 +204,5 @@ script: | # cd $INSTALLPREFIX find -print0 | xargs -r0 touch # fix up timestamps before packaging - find include lib | sort | zip -X@ $OUTDIR/memetic-deps-win$BITS-gitian.zip + find include lib | sort | zip -X@ $OUTDIR/pepecoin-deps-win$BITS-gitian.zip done # for BITS in diff --git a/src/contrib/gitian-descriptors/gitian-linux.yml b/src/contrib/gitian-descriptors/gitian-linux.yml index dafb708e..a230089c 100644 --- a/src/contrib/gitian-descriptors/gitian-linux.yml +++ b/src/contrib/gitian-descriptors/gitian-linux.yml @@ -1,5 +1,5 @@ --- -name: "memetic" +name: "pepecoin" suites: - "trusty" architectures: @@ -19,14 +19,14 @@ packages: - "bsdmainutils" reference_datetime: "2015-05-25 00:00:00" remotes: -- "url": "https://github.com/SCDeveloper/Memetic.git" - "dir": "memetic" +- "url": "https://github.com/SCDeveloper/PepeCoin.git" + "dir": "pepecoin" files: -- "memetic-deps-linux32-gitian.zip" -- "memetic-deps-linux64-gitian.zip" +- "pepecoin-deps-linux32-gitian.zip" +- "pepecoin-deps-linux64-gitian.zip" script: | - echo "6324ba3b1d571dc833528bf13efd5534a28fb35b59885543533cc7ec018d969b memetic-deps-linux32-gitian.zip" | sha256sum -c - echo "713f164feb9fab5d200c8587e04a4ac53cbab78ddada6022d80895372e684ecd memetic-deps-linux64-gitian.zip" | sha256sum -c + echo "6324ba3b1d571dc833528bf13efd5534a28fb35b59885543533cc7ec018d969b pepecoin-deps-linux32-gitian.zip" | sha256sum -c + echo "713f164feb9fab5d200c8587e04a4ac53cbab78ddada6022d80895372e684ecd pepecoin-deps-linux64-gitian.zip" | sha256sum -c STAGING="$HOME/install" OPTFLAGS='-O2' BINDIR="${OUTDIR}/bin/${GBUILD_BITS}" # 32/64 bit build specific output directory @@ -43,21 +43,21 @@ script: | # mkdir -p $STAGING cd $STAGING - unzip ../build/memetic-deps-linux${GBUILD_BITS}-gitian.zip + unzip ../build/pepecoin-deps-linux${GBUILD_BITS}-gitian.zip cd ../build # - cd memetic + cd pepecoin mkdir -p $OUTDIR/src git archive HEAD | tar -x -C $OUTDIR/src cp $OUTDIR/src/doc/README $OUTDIR cp $OUTDIR/src/COPYING $OUTDIR cd src cp -r crypto obj - make -f makefile.unix STATIC=1 USE_NATIVE_I2P=1 OPENSSL_INCLUDE_PATH="$STAGING/include" OPENSSL_LIB_PATH="$STAGING/lib" $MAKEOPTS memeticd USE_UPNP=1 BOOST_LIB_SUFFIX="-mt" DEBUGFLAGS= + make -f makefile.unix STATIC=1 USE_NATIVE_I2P=1 OPENSSL_INCLUDE_PATH="$STAGING/include" OPENSSL_LIB_PATH="$STAGING/lib" $MAKEOPTS pepecoind USE_UPNP=1 BOOST_LIB_SUFFIX="-mt" DEBUGFLAGS= mkdir -p $STAGING/bin/$GBUILD_BITS - install -s memeticd $OUTDIR/bin/$GBUILD_BITS + install -s pepecoind $OUTDIR/bin/$GBUILD_BITS # cd .. qmake INCLUDEPATH="$STAGING/include" LIBS="-L$STAGING/lib" BOOST_LIB_SUFFIX="-mt" RELEASE=1 USE_QRCODE=1 USE_NATIVE_I2P=1 make $MAKEOPTS - install Memetic $OUTDIR/bin/$GBUILD_BITS + install PepeCoin $OUTDIR/bin/$GBUILD_BITS diff --git a/src/contrib/gitian-descriptors/gitian-osx.yml b/src/contrib/gitian-descriptors/gitian-osx.yml index 1f9b9e29..96953b0b 100644 --- a/src/contrib/gitian-descriptors/gitian-osx.yml +++ b/src/contrib/gitian-descriptors/gitian-osx.yml @@ -1,5 +1,5 @@ --- -name: "memetic" +name: "pepecoin" suites: - "trusty" architectures: @@ -21,11 +21,11 @@ packages: - "genisoimage" reference_datetime: "2013-06-01 00:00:00" remotes: -- "url": "https://github.com/SCDeveloper/Memetic.git" - "dir": "memetic" +- "url": "https://github.com/SCDeveloper/PepeCoin.git" + "dir": "pepecoin" files: - "qt-osx-5.5.0-gitian.tar.xz" -- "memetic-deps-osx-gitian.zip" +- "pepecoin-deps-osx-gitian.zip" - "osxcross.tar.xz" script: | # Defines @@ -51,38 +51,38 @@ script: | export QT_RCC_TEST=1 mkdir -p $BUILDDIR $BINDIR $DEPSDIR cd $DEPSDIR - unzip -o $BUILDDIR/memetic-deps-osx-gitian.zip + unzip -o $BUILDDIR/pepecoin-deps-osx-gitian.zip tar xf $BUILDDIR/osxcross.tar.xz mkdir -p $HOME/install cd $HOME/install tar xf $BUILDDIR/qt-osx-5.5.0-gitian.tar.xz # - cd $BUILDDIR/memetic + cd $BUILDDIR/pepecoin mkdir -p $OUTDIR/src git archive HEAD | tar -x -C $OUTDIR/src cp $OUTDIR/src/doc/README $OUTDIR/readme.txt cp $OUTDIR/src/COPYING $OUTDIR/COPYING.txt # #cd src - #make -f makefile.linux-mingw HOST="$HOST" DEPSDIR="$DEPSDIR" CURDIR="$BUILDDIR/memetic/src" STATIC=1 $MAKEOPTS USE_UPNP=1 BOOST_LIB_SUFFIX="-mt-s" DEBUGFLAGS= - #cp memetic $BINDIR/ + #make -f makefile.linux-mingw HOST="$HOST" DEPSDIR="$DEPSDIR" CURDIR="$BUILDDIR/pepecoin/src" STATIC=1 $MAKEOPTS USE_UPNP=1 BOOST_LIB_SUFFIX="-mt-s" DEBUGFLAGS= + #cp pepecoin $BINDIR/ #cd .. # #$DEPSDIR/qt/host/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/lib BOOST_INCLUDE_PATH=$HOME/build/include BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.1h OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.1h/include INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin USE_BUILD_INFO=1 - ~/install/host/bin/qmake -xplatform macx-clang-linux RELEASE=1 QMAKE_LRELEASE="~/install/host/bin/lrelease" MINIUPNPC_LIB_PATH="$DEPSDIR/lib" MINIUPNPC_INCLUDE_PATH="$DEPSDIR/include" BDB_LIB_PATH="$DEPSDIR/lib" BDB_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_PATH="$DEPSDIR/lib" BOOST_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_SUFFIX="-mt-s" BOOST_THREAD_LIB_SUFFIX="-mt-s" OPENSSL_LIB_PATH="$DEPSDIR/lib" OPENSSL_INCLUDE_PATH="$DEPSDIR/include" INCLUDEPATH="$DEPSDIR/include" DEFINES="BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 USE_BUILD_INFO=1" QMAKE_CXXFLAGS+=" -I/home/ubuntu/deps/SDK/MacOSX10.9.sdk/usr/include -DBOOST_HAS_INT128=1 -frandom-seed=memetic" + ~/install/host/bin/qmake -xplatform macx-clang-linux RELEASE=1 QMAKE_LRELEASE="~/install/host/bin/lrelease" MINIUPNPC_LIB_PATH="$DEPSDIR/lib" MINIUPNPC_INCLUDE_PATH="$DEPSDIR/include" BDB_LIB_PATH="$DEPSDIR/lib" BDB_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_PATH="$DEPSDIR/lib" BOOST_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_SUFFIX="-mt-s" BOOST_THREAD_LIB_SUFFIX="-mt-s" OPENSSL_LIB_PATH="$DEPSDIR/lib" OPENSSL_INCLUDE_PATH="$DEPSDIR/include" INCLUDEPATH="$DEPSDIR/include" DEFINES="BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 USE_BUILD_INFO=1" QMAKE_CXXFLAGS+=" -I/home/ubuntu/deps/SDK/MacOSX10.9.sdk/usr/include -DBOOST_HAS_INT128=1 -frandom-seed=pepecoin" make $MAKEOPTS # macdeploy: TODO: .dmg export OTOOL=${HOST}-otool export INSTALLNAMETOOL=${HOST}-install_name_tool export STRIP=${HOST}-strip chmod +x contrib/macdeploy/macdeployqtplus - OTOOL=${HOST}-otool INSTALLNAMETOOL=${HOST}-install_name_tool STRIP=${HOST}-strip contrib/macdeploy/macdeployqtplus memetic-Qt.app + OTOOL=${HOST}-otool INSTALLNAMETOOL=${HOST}-install_name_tool STRIP=${HOST}-strip contrib/macdeploy/macdeployqtplus pepecoin-Qt.app mkdir -p dist/.background install contrib/macdeploy/background.png dist/.background install contrib/macdeploy/DS_Store dist/.DS_Store cd dist ln -sf /Applications Applications cd .. - genisoimage -no-cache-inodes -l -probe -V "memetic-Qt" -no-pad -r -apple -o Shadow.tmp.dmg dist - dmg dmg memetic-Qt.tmp.dmg $OUTDIR/Memetic.dmg + genisoimage -no-cache-inodes -l -probe -V "pepecoin-Qt" -no-pad -r -apple -o Shadow.tmp.dmg dist + dmg dmg pepecoin-Qt.tmp.dmg $OUTDIR/PepeCoin.dmg # diff --git a/src/contrib/gitian-descriptors/gitian-win.yml b/src/contrib/gitian-descriptors/gitian-win.yml index eb70245a..c5f04933 100644 --- a/src/contrib/gitian-descriptors/gitian-win.yml +++ b/src/contrib/gitian-descriptors/gitian-win.yml @@ -1,5 +1,5 @@ --- -name: "memetic" +name: "pepecoin" suites: - "trusty" architectures: @@ -19,13 +19,13 @@ packages: - "bsdmainutils" reference_datetime: "2013-06-01 00:00:00" remotes: -- "url": "https://github.com/rynomster/memetic.git" - "dir": "memetic" +- "url": "https://github.com/rynomster/pepecoin.git" + "dir": "pepecoin" files: - "qt-win32-5.5.0-gitian.zip" - "qt-win64-5.5.0-gitian.zip" -- "memetic-deps-win32-gitian.zip" -- "memetic-deps-win64-gitian.zip" +- "pepecoin-deps-win32-gitian.zip" +- "pepecoin-deps-win64-gitian.zip" script: | # Defines export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1 @@ -36,8 +36,8 @@ script: | TEMPDIR="$HOME/tempdir" echo "2d4fafbd04d5e233416c83c618dda2f111891f995eba585cc0a2ea637d0b3be2 qt-win32-5.5.0-gitian.zip" | sha256sum -c echo "130685a66c344e53b131aa7cfac77f7796c6e113563bfd37eeb3cfd7c7fb4f08 qt-win64-5.5.0-gitian.zip" | sha256sum -c - echo "1cf99b3e264725580fd0f22ef36afbf96d3da0d5f659057e7100089b96a18ece memetic-deps-win32-gitian.zip" | sha256sum -c - echo "76e769fc3147dc819c4495839b7a5270fd058658bf1ef1adba22394b4f465ccb memetic-deps-win64-gitian.zip" | sha256sum -c + echo "1cf99b3e264725580fd0f22ef36afbf96d3da0d5f659057e7100089b96a18ece pepecoin-deps-win32-gitian.zip" | sha256sum -c + echo "76e769fc3147dc819c4495839b7a5270fd058658bf1ef1adba22394b4f465ccb pepecoin-deps-win64-gitian.zip" | sha256sum -c NEEDDIST=1 # Qt: workaround for determinism in resource ordering # Qt5's rcc uses a QHash to store the files for the resource. @@ -69,25 +69,25 @@ script: | cd $STAGING unzip -o $INDIR/qt-win${BITS}-5.5.0-gitian.zip cd $DEPSDIR - unzip -o $INDIR/memetic-deps-win${BITS}-gitian.zip + unzip -o $INDIR/pepecoin-deps-win${BITS}-gitian.zip # cd $BUILDDIR - cp -r ../build/memetic . - cd memetic + cp -r ../build/pepecoin . + cd pepecoin mkdir -p $OUTDIR/src git archive HEAD | tar -x -C $OUTDIR/src cp $OUTDIR/src/doc/README_windows.txt $OUTDIR/readme.txt cp $OUTDIR/src/COPYING $OUTDIR/COPYING.txt # cd src - make -f makefile.linux-mingw HOST="$HOST" DEPSDIR="$DEPSDIR" CURDIR="$BUILDDIR/memetic/src" STATIC=1 $MAKEOPTS USE_UPNP=1 BOOST_LIB_SUFFIX="-mt-s" USE_WALLET=1 DEBUGFLAGS= - cp memeticd.exe $BINDIR/ + make -f makefile.linux-mingw HOST="$HOST" DEPSDIR="$DEPSDIR" CURDIR="$BUILDDIR/pepecoin/src" STATIC=1 $MAKEOPTS USE_UPNP=1 BOOST_LIB_SUFFIX="-mt-s" USE_WALLET=1 DEBUGFLAGS= + cp pepecoind.exe $BINDIR/ cd .. # #$DEPSDIR/qt/host/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/lib BOOST_INCLUDE_PATH=$HOME/build/include BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.1h OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.1h/include INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin USE_BUILD_INFO=1 - $STAGING/host/bin/qmake -xplatform win32-g++ RELEASE=1 QMAKE_LRELEASE="$STAGING/host/bin/lrelease" MINIUPNPC_LIB_PATH="$DEPSDIR/lib" MINIUPNPC_INCLUDE_PATH="$DEPSDIR/include" BDB_LIB_PATH="$DEPSDIR/lib" BDB_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_PATH="$DEPSDIR/lib" BOOST_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_SUFFIX="-mt-s" BOOST_THREAD_LIB_SUFFIX="_win32-mt-s" OPENSSL_LIB_PATH="$DEPSDIR/lib" OPENSSL_INCLUDE_PATH="$DEPSDIR/include" INCLUDEPATH="$DEPSDIR/include" DEFINES="BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 USE_BUILD_INFO=1 USE_NATIVE_I2P=1 USE_QRENCODE=1" QMAKE_CXXFLAGS=-frandom-seed=memetic + $STAGING/host/bin/qmake -xplatform win32-g++ RELEASE=1 QMAKE_LRELEASE="$STAGING/host/bin/lrelease" MINIUPNPC_LIB_PATH="$DEPSDIR/lib" MINIUPNPC_INCLUDE_PATH="$DEPSDIR/include" BDB_LIB_PATH="$DEPSDIR/lib" BDB_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_PATH="$DEPSDIR/lib" BOOST_INCLUDE_PATH="$DEPSDIR/include" BOOST_LIB_SUFFIX="-mt-s" BOOST_THREAD_LIB_SUFFIX="_win32-mt-s" OPENSSL_LIB_PATH="$DEPSDIR/lib" OPENSSL_INCLUDE_PATH="$DEPSDIR/include" INCLUDEPATH="$DEPSDIR/include" DEFINES="BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 USE_BUILD_INFO=1 USE_NATIVE_I2P=1 USE_QRENCODE=1" QMAKE_CXXFLAGS=-frandom-seed=pepecoin make $MAKEOPTS - cp release/Memetic.exe $BINDIR/ + cp release/PepeCoin.exe $BINDIR/ # unset LD_PRELOAD unset FAKETIME @@ -99,5 +99,5 @@ script: | mkdir -p $TEMPDIR cd $TEMPDIR cd $BINDIR - #tar -xvf $HOME/build/memetic/$DISTNAME | sort | tar --no-recursion -cT /dev/stdin --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 --mtime="$REFERENCE_DATETIME" | gzip -n > $OUTDIR/src/$DISTNAME - find | sort | zip -X@ $OUTDIR/memetic_$DISTNAME.zip + #tar -xvf $HOME/build/pepecoin/$DISTNAME | sort | tar --no-recursion -cT /dev/stdin --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 --mtime="$REFERENCE_DATETIME" | gzip -n > $OUTDIR/src/$DISTNAME + find | sort | zip -X@ $OUTDIR/pepecoin_$DISTNAME.zip diff --git a/src/contrib/gitian-descriptors/qt-osx.yml b/src/contrib/gitian-descriptors/qt-osx.yml index 53f3f5f9..07429037 100644 --- a/src/contrib/gitian-descriptors/qt-osx.yml +++ b/src/contrib/gitian-descriptors/qt-osx.yml @@ -1,5 +1,5 @@ --- -name: "memetic-osx-qt" +name: "pepecoin-osx-qt" suites: - "trusty" architectures: @@ -22,7 +22,7 @@ reference_datetime: "2011-01-30 00:00:00" remotes: [] files: - "qt-everywhere-opensource-src-5.5.0.tar.xz" -- "memetic-deps-osx-gitian.zip" +- "pepecoin-deps-osx-gitian.zip" - "flex-2.5.38.tar.gz" - "osxcross.tar.xz" script: | @@ -66,9 +66,9 @@ script: | make install cd .. # - # Need mingw-compiled openssl from memetic-deps: + # Need mingw-compiled openssl from pepecoin-deps: cd $DEPSDIR - unzip -o $BUILDDIR/memetic-deps-osx-gitian.zip + unzip -o $BUILDDIR/pepecoin-deps-osx-gitian.zip tar xf $BUILDDIR/osxcross.tar.xz # cd $BUILDDIR diff --git a/src/contrib/gitian-descriptors/qt-win.yml b/src/contrib/gitian-descriptors/qt-win.yml index a78e68cf..b11074ea 100644 --- a/src/contrib/gitian-descriptors/qt-win.yml +++ b/src/contrib/gitian-descriptors/qt-win.yml @@ -15,8 +15,8 @@ reference_datetime: "2013-06-01 00:00:00" remotes: [] files: - "qt-everywhere-opensource-src-5.5.0.tar.xz" -- "memetic-deps-win32-gitian.zip" -- "memetic-deps-win64-gitian.zip" +- "pepecoin-deps-win32-gitian.zip" +- "pepecoin-deps-win64-gitian.zip" script: | # Defines export TZ=UTC @@ -31,8 +31,8 @@ script: | # For now luckily there is a test mode that forces a fixed seed. export QT_RCC_TEST=1 # Integrity Check - echo "c603942b866f8a8ffff441c0d3e8c69d29a45e0bd3e48d386e7dc27d03237178 memetic-deps-win32-gitian.zip" | sha256sum -c - echo "1cb5e1b498e86917db690bc07ee73c9d6ffc23cf3509607d4f79aba53e87ecff memetic-deps-win64-gitian.zip" | sha256sum -c + echo "c603942b866f8a8ffff441c0d3e8c69d29a45e0bd3e48d386e7dc27d03237178 pepecoin-deps-win32-gitian.zip" | sha256sum -c + echo "1cb5e1b498e86917db690bc07ee73c9d6ffc23cf3509607d4f79aba53e87ecff pepecoin-deps-win64-gitian.zip" | sha256sum -c echo "7ea2a16ecb8088e67db86b0835b887d5316121aeef9565d5d19be3d539a2c2af qt-everywhere-opensource-src-5.5.0.tar.xz" | sha256sum -c for BITS in 32 64; do # for architectures # @@ -47,9 +47,9 @@ script: | # mkdir -p $INSTALLPREFIX $INSTALLPREFIX/host/bin $DEPSDIR $BUILDDIR # - # Need mingw-compiled openssl from memetic-deps: + # Need mingw-compiled openssl from pepecoin-deps: cd $DEPSDIR - unzip -o $INDIR/memetic-deps-win${BITS}-gitian.zip + unzip -o $INDIR/pepecoin-deps-win${BITS}-gitian.zip # cd $BUILDDIR # diff --git a/src/contrib/gitian-downloader/linux-download-config b/src/contrib/gitian-downloader/linux-download-config index 3d01b482..2b94dc0f 100644 --- a/src/contrib/gitian-downloader/linux-download-config +++ b/src/contrib/gitian-downloader/linux-download-config @@ -1,11 +1,11 @@ --- -name: memetic +name: pepecoin urls: -- http://memetic.org/memetic-latest-linux-gitian.zip +- http://pepecoin.org/pepecoin-latest-linux-gitian.zip rss: - url: http://sourceforge.net/api/file/index/project-id/244765/mtime/desc/limit/100/rss xpath: //item/link/text() - pattern: memetic-\d+.\d+.\d+-linux-gitian.zip + pattern: pepecoin-\d+.\d+.\d+-linux-gitian.zip signers: 0A82509767C7D4A5D14DA2301AE1D35043E08E54: weight: 40 diff --git a/src/contrib/gitian-downloader/win32-download-config b/src/contrib/gitian-downloader/win32-download-config index b7010147..473e33eb 100644 --- a/src/contrib/gitian-downloader/win32-download-config +++ b/src/contrib/gitian-downloader/win32-download-config @@ -1,11 +1,11 @@ --- -name: memetic +name: pepecoin urls: -- http://memetic.org/memetic-latest-win32-gitian.zip +- http://pepecoin.org/pepecoin-latest-win32-gitian.zip rss: - url: http://sourceforge.net/api/file/index/project-id/244765/mtime/desc/limit/100/rss xpath: //item/link/text() - pattern: memetic-\d+.\d+.\d+-win32-gitian.zip + pattern: pepecoin-\d+.\d+.\d+-win32-gitian.zip signers: 0A82509767C7D4A5D14DA2301AE1D35043E08E54: weight: 40 diff --git a/src/contrib/linearize/README.md b/src/contrib/linearize/README.md index c5119f54..477b9a03 100644 --- a/src/contrib/linearize/README.md +++ b/src/contrib/linearize/README.md @@ -17,7 +17,7 @@ Optional config file setting for linearize-hashes: $ ./linearize-data.py linearize.cfg Required configuration file settings: -* "input": memeticd blocks/ directory containing blkNNNNN.dat +* "input": pepecoind blocks/ directory containing blkNNNNN.dat * "hashlist": text file containing list of block hashes, linearized-hashes.py output. * "output_file": bootstrap.dat diff --git a/src/contrib/linearize/example-linearize.cfg b/src/contrib/linearize/example-linearize.cfg index 3c4a07fb..2aed4186 100644 --- a/src/contrib/linearize/example-linearize.cfg +++ b/src/contrib/linearize/example-linearize.cfg @@ -1,5 +1,5 @@ -# memeticd RPC settings (linearize-hashes) +# pepecoind RPC settings (linearize-hashes) rpcuser=someuser rpcpassword=somepassword host=127.0.0.1 @@ -12,7 +12,7 @@ max_height=390000 # bootstrap.dat input/output settings (linearize-data) netmagic=70352205 -input=/home/example/.memetic +input=/home/example/.pepecoin output_file=/home/example/Downloads/bootstrap.dat hashlist=hashlist.txt split_year=1 diff --git a/src/contrib/linearize/linearize-hashes.py b/src/contrib/linearize/linearize-hashes.py index c0d06524..c534e21f 100644 --- a/src/contrib/linearize/linearize-hashes.py +++ b/src/contrib/linearize/linearize-hashes.py @@ -16,7 +16,7 @@ settings = {} -class MemeticRPC: +class PepeCoinRPC: OBJID = 1 def __init__(self, host, port, username, password): @@ -59,7 +59,7 @@ def getblockhash(self, index): return self.rpc('getblockhash', [index]) def get_block_hashes(settings): - rpc = MemeticRPC(settings['host'], settings['port'], + rpc = PepeCoinRPC(settings['host'], settings['port'], settings['rpcuser'], settings['rpcpassword']) for height in xrange(settings['min_height'], settings['max_height']+1): diff --git a/src/contrib/macdeploy/LICENSE b/src/contrib/macdeploy/LICENSE index dd49c5b6..369f85d5 100644 --- a/src/contrib/macdeploy/LICENSE +++ b/src/contrib/macdeploy/LICENSE @@ -98,7 +98,7 @@ 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 memetic of a copy, is not conveying. +a computer network, with no pepecoin 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 @@ -450,7 +450,7 @@ 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 memeticring control of an + An "entity transaction" is a transaction pepecoinring 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 diff --git a/src/contrib/macdeploy/fancy.plist b/src/contrib/macdeploy/fancy.plist index e5939f9b..38728891 100644 --- a/src/contrib/macdeploy/fancy.plist +++ b/src/contrib/macdeploy/fancy.plist @@ -22,7 +22,7 @@ 370 156 - memetic-Qt.app + pepecoin-Qt.app 128 156 diff --git a/src/contrib/macdeploy/notes.txt b/src/contrib/macdeploy/notes.txt index 9b060e3a..ebb4e603 100644 --- a/src/contrib/macdeploy/notes.txt +++ b/src/contrib/macdeploy/notes.txt @@ -6,7 +6,7 @@ You will need the appscript package for the fancy disk image creation to work. Install it by invoking "sudo easy_install appscript". Ths script should be invoked in the target directory like this: -$source_dir/contrib/macdeploy/macdeployqtplus memetic-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy $source_dir/contrib/macdeploy/fancy.plist -verbose 2 +$source_dir/contrib/macdeploy/macdeployqtplus pepecoin-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy $source_dir/contrib/macdeploy/fancy.plist -verbose 2 During the process, the disk image window will pop up briefly where the fancy settings are applied. This is normal, please do not interfere. @@ -19,8 +19,8 @@ Fill in the following. Enable custom process step: [x] Command: %{sourceDir}/contrib/macdeploy/macdeployqtplus Working directory: %{buildDir} -Command arguments: memetic-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy %{sourceDir}/contrib/macdeploy/fancy.plist -verbose 2 +Command arguments: pepecoin-Qt.app -add-qt-tr da,de,es,hu,ru,uk,zh_CN,zh_TW -dmg -fancy %{sourceDir}/contrib/macdeploy/fancy.plist -verbose 2 After that you can start the deployment process through the menu with -Build -> Deploy Project "memetic-qt" +Build -> Deploy Project "pepecoin-qt" diff --git a/src/contrib/qt_translations.py b/src/contrib/qt_translations.py index 6cbe12b7..3f1be613 100644 --- a/src/contrib/qt_translations.py +++ b/src/contrib/qt_translations.py @@ -2,7 +2,7 @@ # Helpful little script that spits out a comma-separated list of # language codes for Qt icons that should be included -# in binary memetic distributions +# in binary pepecoin distributions import glob import os @@ -10,13 +10,13 @@ import sys if len(sys.argv) != 3: - sys.exit("Usage: %s $QTDIR/translations $MEMETICDIR/src/qt/locale"%sys.argv[0]) + sys.exit("Usage: %s $QTDIR/translations $PEPECOINDIR/src/qt/locale"%sys.argv[0]) d1 = sys.argv[1] d2 = sys.argv[2] l1 = set([ re.search(r'qt_(.*).qm', f).group(1) for f in glob.glob(os.path.join(d1, 'qt_*.qm')) ]) -l2 = set([ re.search(r'memetic_(.*).qm', f).group(1) for f in glob.glob(os.path.join(d2, 'memetic_*.qm')) ]) +l2 = set([ re.search(r'pepecoin_(.*).qm', f).group(1) for f in glob.glob(os.path.join(d2, 'pepecoin_*.qm')) ]) print ",".join(sorted(l1.intersection(l2))) diff --git a/src/darksend-relay.cpp b/src/darksend-relay.cpp deleted file mode 100644 index 4c209933..00000000 --- a/src/darksend-relay.cpp +++ /dev/null @@ -1,121 +0,0 @@ - -#include "darksend-relay.h" - - -CDarkSendRelay::CDarkSendRelay() -{ - vinMasternode = CTxIn(); - nBlockHeight = 0; - nRelayType = 0; - in = CTxIn(); - out = CTxOut(); -} - -CDarkSendRelay::CDarkSendRelay(CTxIn& vinMasternodeIn, vector& vchSigIn, int nBlockHeightIn, int nRelayTypeIn, CTxIn& in2, CTxOut& out2) -{ - vinMasternode = vinMasternodeIn; - vchSig = vchSigIn; - nBlockHeight = nBlockHeightIn; - nRelayType = nRelayTypeIn; - in = in2; - out = out2; -} - -std::string CDarkSendRelay::ToString() -{ - std::ostringstream info; - - info << "vin: " << vinMasternode.ToString() << - " nBlockHeight: " << (int)nBlockHeight << - " nRelayType: " << (int)nRelayType << - " in " << in.ToString() << - " out " << out.ToString(); - - return info.str(); -} - -bool CDarkSendRelay::Sign(std::string strSharedKey) -{ - std::string strMessage = in.ToString() + out.ToString(); - - CKey key2; - CPubKey pubkey2; - std::string errorMessage = ""; - - if(!darkSendSigner.SetKey(strSharedKey, errorMessage, key2, pubkey2)) - { - LogPrintf("CDarkSendRelay():Sign - ERROR: Invalid shared key: '%s'\n", errorMessage.c_str()); - return false; - } - - if(!darkSendSigner.SignMessage(strMessage, errorMessage, vchSig2, key2)) { - LogPrintf("CDarkSendRelay():Sign - Sign message failed\n"); - return false; - } - - if(!darkSendSigner.VerifyMessage(pubkey2, vchSig2, strMessage, errorMessage)) { - LogPrintf("CDarkSendRelay():Sign - Verify message failed\n"); - return false; - } - - return true; -} - -bool CDarkSendRelay::VerifyMessage(std::string strSharedKey) -{ - std::string strMessage = in.ToString() + out.ToString(); - - CKey key2; - CPubKey pubkey2; - std::string errorMessage = ""; - - if(!darkSendSigner.SetKey(strSharedKey, errorMessage, key2, pubkey2)) - { - LogPrintf("CDarkSendRelay()::VerifyMessage - ERROR: Invalid shared key: '%s'\n", errorMessage.c_str()); - return false; - } - - if(!darkSendSigner.VerifyMessage(pubkey2, vchSig2, strMessage, errorMessage)) { - LogPrintf("CDarkSendRelay()::VerifyMessage - Verify message failed\n"); - return false; - } - - return true; -} - -void CDarkSendRelay::Relay() -{ - int nCount = std::min(mnodeman.CountEnabled(), 20); - int nRank1 = (rand() % nCount)+1; - int nRank2 = (rand() % nCount)+1; - - //keep picking another second number till we get one that doesn't match - while(nRank1 == nRank2) nRank2 = (rand() % nCount)+1; - - //printf("rank 1 - rank2 %d %d \n", nRank1, nRank2); - - //relay this message through 2 separate nodes for redundancy - RelayThroughNode(nRank1); - RelayThroughNode(nRank2); -} - -void CDarkSendRelay::RelayThroughNode(int nRank) -{ - CMasternode* pmn = mnodeman.GetMasternodeByRank(nRank, nBlockHeight, MIN_POOL_PEER_PROTO_VERSION); - - if(pmn != NULL){ - //printf("RelayThroughNode %s\n", pmn->addr.ToString().c_str()); - if(ConnectNode((CAddress)pmn->addr, NULL, true)){ - //printf("Connected\n"); - CNode* pNode = FindNode(pmn->addr); - if(pNode) - { - //printf("Found\n"); - pNode->PushMessage("dsr", (*this)); - return; - } - } - } else { - //printf("RelayThroughNode NULL\n"); - } -} diff --git a/src/darksend-relay.h b/src/darksend-relay.h deleted file mode 100644 index 19566ed9..00000000 --- a/src/darksend-relay.h +++ /dev/null @@ -1,50 +0,0 @@ - -// Copyright (c) 2014-2015 The Darkcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#ifndef DARKSEND_RELAY_H -#define DARKSEND_RELAY_H - -#include "core.h" -#include "main.h" -#include "activemasternode.h" -#include "masternodeman.h" - - -class CDarkSendRelay -{ -public: - CTxIn vinMasternode; - vector vchSig; - vector vchSig2; - int nBlockHeight; - int nRelayType; - CTxIn in; - CTxOut out; - - CDarkSendRelay(); - CDarkSendRelay(CTxIn& vinMasternodeIn, vector& vchSigIn, int nBlockHeightIn, int nRelayTypeIn, CTxIn& in2, CTxOut& out2); - - IMPLEMENT_SERIALIZE - ( - READWRITE(vinMasternode); - READWRITE(vchSig); - READWRITE(vchSig2); - READWRITE(nBlockHeight); - READWRITE(nRelayType); - READWRITE(in); - READWRITE(out); - ) - - std::string ToString(); - - bool Sign(std::string strSharedKey); - bool VerifyMessage(std::string strSharedKey); - void Relay(); - void RelayThroughNode(int nRank); -}; - - - -#endif diff --git a/src/darksend.cpp b/src/darksend.cpp index f0481f14..87b6fe79 100644 --- a/src/darksend.cpp +++ b/src/darksend.cpp @@ -2,13 +2,18 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. + #include "darksend.h" #include "main.h" #include "init.h" +//#include "script/sign.h" #include "util.h" -#include "masternodeman.h" +#include "masternode.h" #include "instantx.h" #include "ui_interface.h" +//#include "random.h" + +#include #include #include @@ -17,52 +22,98 @@ #include #include -#include + using namespace std; using namespace boost; -// The main object for accessing darksend -CDarksendPool darkSendPool; -// A helper object for signing messages from Masternodes +CCriticalSection cs_darksend; + +/** The main object for accessing darksend */ +CDarkSendPool darkSendPool; +/** A helper object for signing messages from masternodes */ CDarkSendSigner darkSendSigner; -// The current darksends in progress on the network +/** The current darksends in progress on the network */ std::vector vecDarksendQueue; -// Keep track of the used Masternodes +/** Keep track of the used masternodes */ std::vector vecMasternodesUsed; // keep track of the scanning errors I've seen map mapDarksendBroadcastTxes; -// Keep track of the active Masternode +// CActiveMasternode activeMasternode; // count peers we've requested the list from int RequestedMasterNodeList = 0; -/* *** BEGIN DARKSEND MAGIC - DASH ********** - Copyright (c) 2014-2015, Dash Developers - eduffield - evan@dashpay.io - udjinm6 - udjinm6@dashpay.io +/* *** BEGIN DARKSEND MAGIC ********** + Copyright 2014, Darkcoin Developers + eduffield - evan@darkcoin.io */ - -void CDarksendPool::ProcessMessageDarksend(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) +void ProcessMessageDarksend(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) { - if(fLiteMode) return; //disable all darksend/Masternode related functionality - if(!IsBlockchainSynced()) return; + if(fLiteMode) return; //disable all darksend/masternode related functionality + + if (strCommand == "dsf") { //DarkSend Final tx + if (pfrom->nVersion < darkSendPool.MIN_PEER_PROTO_VERSION) { + return; + } + + if((CNetAddr)darkSendPool.submittedToMasternode != (CNetAddr)pfrom->addr){ + //LogPrintf("dsc - message doesn't match current masternode - %s != %s\n", darkSendPool.submittedToMasternode.ToString().c_str(), pfrom->addr.ToString().c_str()); + return; + } + + int sessionID; + CTransaction txNew; + vRecv >> sessionID >> txNew; + + if(darkSendPool.sessionID != sessionID){ + if (fDebug) LogPrintf("dsf - message doesn't match current darksend session %d %d\n", darkSendPool.sessionID, sessionID); + return; + } + + //check to see if input is spent already? (and probably not confirmed) + darkSendPool.SignFinalTransaction(txNew, pfrom); + } + + else if (strCommand == "dsc") { //DarkSend Complete + if (pfrom->nVersion < darkSendPool.MIN_PEER_PROTO_VERSION) { + return; + } + + if((CNetAddr)darkSendPool.submittedToMasternode != (CNetAddr)pfrom->addr){ + //LogPrintf("dsc - message doesn't match current masternode - %s != %s\n", darkSendPool.submittedToMasternode.ToString().c_str(), pfrom->addr.ToString().c_str()); + return; + } + + int sessionID; + bool error; + std::string lastMessage; + vRecv >> sessionID >> error >> lastMessage; + + if(darkSendPool.sessionID != sessionID){ + if (fDebug) LogPrintf("dsc - message doesn't match current darksend session %d %d\n", darkSendPool.sessionID, sessionID); + return; + } + + darkSendPool.CompletedTransaction(error, lastMessage); + } - if (strCommand == "dsa") { //DarkSend Accept Into Pool - if (pfrom->nVersion < MIN_POOL_PEER_PROTO_VERSION) { + else if (strCommand == "dsa") { //DarkSend Acceptable + + if (pfrom->nVersion < darkSendPool.MIN_PEER_PROTO_VERSION) { std::string strError = _("Incompatible version."); LogPrintf("dsa -- incompatible version! \n"); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, strError); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, strError); return; } if(!fMasterNode){ - std::string strError = _("This is not a Masternode."); - LogPrintf("dsa -- not a Masternode! \n"); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, strError); + std::string strError = _("This is not a masternode."); + LogPrintf("dsa -- not a masternode! \n"); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, strError); return; } @@ -72,39 +123,36 @@ void CDarksendPool::ProcessMessageDarksend(CNode* pfrom, std::string& strCommand vRecv >> nDenom >> txCollateral; std::string error = ""; - CMasternode* pmn = mnodeman.Find(activeMasternode.vin); - if(pmn == NULL) - { - std::string strError = _("Not in the Masternode list."); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, strError); + int mn = GetMasternodeByVin(activeMasternode.vin); + if(mn == -1){ + std::string strError = _("Not in the masternode list."); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, strError); return; } - if(sessionUsers == 0) { - if(pmn->nLastDsq != 0 && - pmn->nLastDsq + mnodeman.CountMasternodesAboveProtocol(MIN_POOL_PEER_PROTO_VERSION)/5 > mnodeman.nDsqCount){ - LogPrintf("dsa -- last dsq too recent, must wait. %s \n", pfrom->addr.ToString().c_str()); + if(darkSendPool.sessionUsers == 0) { + if(vecMasternodes[mn].nLastDsq != 0 && + vecMasternodes[mn].nLastDsq + CountMasternodesAboveProtocol(darkSendPool.MIN_PEER_PROTO_VERSION)/5 > darkSendPool.nDsqCount){ + //LogPrintf("dsa -- last dsq too recent, must wait. %s \n", vecMasternodes[mn].addr.ToString().c_str()); std::string strError = _("Last Darksend was too recent."); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, strError); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, strError); return; } } - if(!IsCompatibleWithSession(nDenom, txCollateral, error)) + if(!darkSendPool.IsCompatibleWithSession(nDenom, txCollateral, error)) { LogPrintf("dsa -- not compatible with existing transactions! \n"); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, error); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, error); return; } else { LogPrintf("dsa -- is compatible, please submit! \n"); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_ACCEPTED, error); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_ACCEPTED, error); return; } - } else if (strCommand == "dsq") { //Darksend Queue - TRY_LOCK(cs_darksend, lockRecv); - if(!lockRecv) return; + } else if (strCommand == "dsq") { //DarkSend Queue - if (pfrom->nVersion < MIN_POOL_PEER_PROTO_VERSION) { + if (pfrom->nVersion < darkSendPool.MIN_PEER_PROTO_VERSION) { return; } @@ -118,38 +166,35 @@ void CDarksendPool::ProcessMessageDarksend(CNode* pfrom, std::string& strCommand if(dsq.IsExpired()) return; - CMasternode* pmn = mnodeman.Find(dsq.vin); - if(pmn == NULL) return; + int mn = GetMasternodeByVin(dsq.vin); + if(mn == -1) return; // if the queue is ready, submit if we can if(dsq.ready) { - if(!pSubmittedToMasternode) return; - if((CNetAddr)pSubmittedToMasternode->addr != (CNetAddr)addr){ - LogPrintf("dsq - message doesn't match current Masternode - %s != %s\n", pSubmittedToMasternode->addr.ToString().c_str(), addr.ToString().c_str()); + if((CNetAddr)darkSendPool.submittedToMasternode != (CNetAddr)addr){ + LogPrintf("dsq - message doesn't match current masternode - %s != %s\n", darkSendPool.submittedToMasternode.ToString().c_str(), pfrom->addr.ToString().c_str()); return; } - if(state == POOL_STATUS_QUEUE){ - LogPrintf("Darksend queue is ready - %s\n", addr.ToString().c_str()); - PrepareDarksendDenominate(); - } + if (fDebug) LogPrintf("darksend queue is ready - %s\n", addr.ToString().c_str()); + darkSendPool.PrepareDarksendDenominate(); } else { BOOST_FOREACH(CDarksendQueue q, vecDarksendQueue){ if(q.vin == dsq.vin) return; } - LogPrint("darksend", "dsq last %d last2 %d count %d\n", pmn->nLastDsq, pmn->nLastDsq + mnodeman.size()/5, mnodeman.nDsqCount); + if(fDebug) LogPrintf("dsq last %d last2 %d count %d\n", vecMasternodes[mn].nLastDsq, vecMasternodes[mn].nLastDsq + (int)vecMasternodes.size()/5, darkSendPool.nDsqCount); //don't allow a few nodes to dominate the queuing process - if(pmn->nLastDsq != 0 && - pmn->nLastDsq + mnodeman.CountMasternodesAboveProtocol(MIN_POOL_PEER_PROTO_VERSION)/5 > mnodeman.nDsqCount){ - LogPrint("darksend", "dsq -- Masternode sending too many dsq messages. %s \n", pmn->addr.ToString().c_str()); + if(vecMasternodes[mn].nLastDsq != 0 && + vecMasternodes[mn].nLastDsq + CountMasternodesAboveProtocol(darkSendPool.MIN_PEER_PROTO_VERSION)/5 > darkSendPool.nDsqCount){ + if(fDebug) LogPrintf("dsq -- masternode sending too many dsq messages. %s \n", vecMasternodes[mn].addr.ToString().c_str()); return; } - mnodeman.nDsqCount++; - pmn->nLastDsq = mnodeman.nDsqCount; - pmn->allowFreeTx = true; + darkSendPool.nDsqCount++; + vecMasternodes[mn].nLastDsq = darkSendPool.nDsqCount; + vecMasternodes[mn].allowFreeTx = true; - LogPrint("darksend", "dsq - new Darksend queue object - %s\n", addr.ToString().c_str()); + if(fDebug) LogPrintf("dsq - new darksend queue object - %s\n", addr.ToString().c_str()); vecDarksendQueue.push_back(dsq); dsq.Relay(); dsq.time = GetTime(); @@ -157,18 +202,18 @@ void CDarksendPool::ProcessMessageDarksend(CNode* pfrom, std::string& strCommand } else if (strCommand == "dsi") { //DarkSend vIn std::string error = ""; - if (pfrom->nVersion < MIN_POOL_PEER_PROTO_VERSION) { + if (pfrom->nVersion < darkSendPool.MIN_PEER_PROTO_VERSION) { LogPrintf("dsi -- incompatible version! \n"); error = _("Incompatible version."); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, error); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, error); return; } if(!fMasterNode){ - LogPrintf("dsi -- not a Masternode! \n"); - error = _("This is not a Masternode."); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, error); + LogPrintf("dsi -- not a masternode! \n"); + error = _("This is not a masternode."); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, error); return; } @@ -180,19 +225,19 @@ void CDarksendPool::ProcessMessageDarksend(CNode* pfrom, std::string& strCommand vRecv >> in >> nAmount >> txCollateral >> out; //do we have enough users in the current session? - if(!IsSessionReady()){ + if(!darkSendPool.IsSessionReady()){ LogPrintf("dsi -- session not complete! \n"); error = _("Session not complete!"); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, error); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, error); return; } //do we have the same denominations as the current session? - if(!IsCompatibleWithEntries(out)) + if(!darkSendPool.IsCompatibleWithEntries(out)) { LogPrintf("dsi -- not compatible with existing transactions! \n"); error = _("Not compatible with existing transactions."); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, error); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, error); return; } @@ -205,20 +250,20 @@ void CDarksendPool::ProcessMessageDarksend(CNode* pfrom, std::string& strCommand CValidationState state; CTransaction tx; - BOOST_FOREACH(const CTxOut o, out){ + BOOST_FOREACH(CTxOut o, out){ nValueOut += o.nValue; tx.vout.push_back(o); if(o.scriptPubKey.size() != 25){ LogPrintf("dsi - non-standard pubkey detected! %s\n", o.scriptPubKey.ToString().c_str()); error = _("Non-standard public key detected."); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, error); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, error); return; } if(!o.scriptPubKey.IsNormalPaymentScript()){ LogPrintf("dsi - invalid script! %s\n", o.scriptPubKey.ToString().c_str()); error = _("Invalid script detected."); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, error); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, error); return; } } @@ -226,11 +271,12 @@ void CDarksendPool::ProcessMessageDarksend(CNode* pfrom, std::string& strCommand BOOST_FOREACH(const CTxIn i, in){ tx.vin.push_back(i); - LogPrint("darksend", "dsi -- tx in %s\n", i.ToString().c_str()); + if(fDebug) LogPrintf("dsi -- tx in %s\n", i.ToString().c_str()); CTransaction tx2; uint256 hash; - if(GetTransaction(i.prevout.hash, tx2, hash)){ + //if(GetTransaction(i.prevout.hash, tx2, hash, true)){ + if(GetTransaction(i.prevout.hash, tx2, hash, false)){ if(tx2.vout.size() > i.prevout.n) { nValueIn += tx2.vout[i.prevout.n].nValue; } @@ -240,9 +286,9 @@ void CDarksendPool::ProcessMessageDarksend(CNode* pfrom, std::string& strCommand } if (nValueIn > DARKSEND_POOL_MAX) { - LogPrintf("dsi -- more than Darksend pool max! %s\n", tx.ToString().c_str()); + LogPrintf("dsi -- more than darksend pool max! %s\n", tx.ToString().c_str()); error = _("Value more than Darksend pool maximum allows."); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, error); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, error); return; } @@ -250,60 +296,79 @@ void CDarksendPool::ProcessMessageDarksend(CNode* pfrom, std::string& strCommand if (nValueIn-nValueOut > nValueIn*.01) { LogPrintf("dsi -- fees are too high! %s\n", tx.ToString().c_str()); error = _("Transaction fees are too high."); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, error); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, error); return; } } else { LogPrintf("dsi -- missing input tx! %s\n", tx.ToString().c_str()); error = _("Missing input transaction information."); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, error); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, error); return; } - if(!AcceptableInputs(mempool, tx, false, NULL, false, true)){ + //if(!AcceptableInputs(mempool, state, tx)){ + bool* pfMissingInputs; + if(!AcceptableInputs(mempool, tx, false, pfMissingInputs)){ LogPrintf("dsi -- transaction not valid! \n"); error = _("Transaction not valid."); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, error); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, error); return; } } - if(AddEntry(in, nAmount, txCollateral, out, error)){ - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_ACCEPTED, error); - Check(); + if(darkSendPool.AddEntry(in, nAmount, txCollateral, out, error)){ + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_ACCEPTED, error); + darkSendPool.Check(); - RelayStatus(sessionID, GetState(), GetEntriesCount(), MASTERNODE_RESET); + RelayDarkSendStatus(darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_RESET); } else { - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, error); + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_REJECTED, error); } - } else if (strCommand == "dssu") { //Darksend status update - if (pfrom->nVersion < MIN_POOL_PEER_PROTO_VERSION) { + } + + else if (strCommand == "dssub") { //DarkSend Subscribe To + if (pfrom->nVersion < darkSendPool.MIN_PEER_PROTO_VERSION) { return; } - if(!pSubmittedToMasternode) return; - if((CNetAddr)pSubmittedToMasternode->addr != (CNetAddr)pfrom->addr){ - //LogPrintf("dssu - message doesn't match current Masternode - %s != %s\n", pSubmittedToMasternode->addr.ToString().c_str(), pfrom->addr.ToString().c_str()); + + if(!fMasterNode) return; + + std::string error = ""; + pfrom->PushMessage("dssu", darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_RESET, error); + return; + } + + else if (strCommand == "dssu") { //DarkSend status update + + if (pfrom->nVersion < darkSendPool.MIN_PEER_PROTO_VERSION) { return; } - int sessionIDMessage; + if((CNetAddr)darkSendPool.submittedToMasternode != (CNetAddr)pfrom->addr){ + //LogPrintf("dssu - message doesn't match current masternode - %s != %s\n", darkSendPool.submittedToMasternode.ToString().c_str(), pfrom->addr.ToString().c_str()); + return; + } + + int sessionID; int state; int entriesCount; int accepted; std::string error; - vRecv >> sessionIDMessage >> state >> entriesCount >> accepted >> error; + vRecv >> sessionID >> state >> entriesCount >> accepted >> error; - LogPrint("darksend", "dssu - state: %i entriesCount: %i accepted: %i error: %s \n", state, entriesCount, accepted, error.c_str()); + if(fDebug) LogPrintf("dssu - state: %i entriesCount: %i accepted: %i error: %s \n", state, entriesCount, accepted, error.c_str()); - if((accepted != 1 && accepted != 0) && sessionID != sessionIDMessage){ - LogPrintf("dssu - message doesn't match current Darksend session %d %d\n", sessionID, sessionIDMessage); + if((accepted != 1 && accepted != 0) && darkSendPool.sessionID != sessionID){ + LogPrintf("dssu - message doesn't match current darksend session %d %d\n", darkSendPool.sessionID, sessionID); return; } - StatusUpdate(state, entriesCount, accepted, error, sessionIDMessage); + darkSendPool.StatusUpdate(state, entriesCount, accepted, error, sessionID); + + } - } else if (strCommand == "dss") { //DarkSend Sign Final Tx - if (pfrom->nVersion < MIN_POOL_PEER_PROTO_VERSION) { + else if (strCommand == "dss") { //DarkSend Sign Final Tx + if (pfrom->nVersion < darkSendPool.MIN_PEER_PROTO_VERSION) { return; } @@ -313,349 +378,266 @@ void CDarksendPool::ProcessMessageDarksend(CNode* pfrom, std::string& strCommand bool success = false; int count = 0; + LogPrintf(" -- sigs count %d %d\n", (int)sigs.size(), count); + BOOST_FOREACH(const CTxIn item, sigs) { - if(AddScriptSig(item)) success = true; - LogPrint("darksend", " -- sigs count %d %d\n", (int)sigs.size(), count); + if(darkSendPool.AddScriptSig(item)) success = true; + if(fDebug) LogPrintf(" -- sigs count %d %d\n", (int)sigs.size(), count); count++; } if(success){ - darkSendPool.Check(); - RelayStatus(darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_RESET); - } - } else if (strCommand == "dsf") { //Darksend Final tx - if (pfrom->nVersion < MIN_POOL_PEER_PROTO_VERSION) { - return; - } - if(!pSubmittedToMasternode) return; - if((CNetAddr)pSubmittedToMasternode->addr != (CNetAddr)pfrom->addr){ - //LogPrintf("dsc - message doesn't match current Masternode - %s != %s\n", pSubmittedToMasternode->addr.ToString().c_str(), pfrom->addr.ToString().c_str()); - return; - } - int sessionIDMessage; - CTransaction txNew; - vRecv >> sessionIDMessage >> txNew; - if(sessionID != sessionIDMessage){ - LogPrint("darksend", "dsf - message doesn't match current darksend session %d %d\n", sessionID, sessionIDMessage); - return; - } - //check to see if input is spent already? (and probably not confirmed) - SignFinalTransaction(txNew, pfrom); - } else if (strCommand == "dsc") { //Darksend Complete - if (pfrom->nVersion < MIN_POOL_PEER_PROTO_VERSION) { - return; + darkSendPool.Check(); + RelayDarkSendStatus(darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_RESET); } + } - if(!pSubmittedToMasternode) return; - if((CNetAddr)pSubmittedToMasternode->addr != (CNetAddr)pfrom->addr){ - //LogPrintf("dsc - message doesn't match current Masternode - %s != %s\n", pSubmittedToMasternode->addr.ToString().c_str(), pfrom->addr.ToString().c_str()); - return; - } +} - int sessionIDMessage; - bool error; - int errorID; - vRecv >> sessionIDMessage >> error >> errorID; +int randomizeList (int i) { return std::rand()%i;} - if(sessionID != sessionIDMessage){ - LogPrint("darksend", "dsc - message doesn't match current darksend session %d %d\n", darkSendPool.sessionID, sessionIDMessage); - return; +// Recursively determine the rounds of a given input (How deep is the darksend chain for a given input) +int GetInputDarksendRounds(CTxIn in, int rounds) +{ + if(rounds >= 17) return rounds; + + std::string padding = ""; + padding.insert(0, ((rounds+1)*5)+3, ' '); + + CWalletTx tx; + if(pwalletMain->GetTransaction(in.prevout.hash,tx)) + { + // bounds check + if(in.prevout.n >= tx.vout.size()) return -4; + + if(tx.vout[in.prevout.n].nValue == DARKSEND_FEE) return -3; + + //make sure the final output is non-denominate + if(rounds == 0 && !pwalletMain->IsDenominatedAmount(tx.vout[in.prevout.n].nValue)) return -2; //NOT DENOM + + bool found = false; + BOOST_FOREACH(CTxOut out, tx.vout) + { + found = pwalletMain->IsDenominatedAmount(out.nValue); + if(found) break; // no need to loop more } + if(!found) return rounds - 1; //NOT FOUND, "-1" because of the pre-mixing creation of denominated amounts - darkSendPool.CompletedTransaction(error, errorID); + // find my vin and look that up + BOOST_FOREACH(CTxIn in2, tx.vin) + { + if(pwalletMain->IsMine(in2)) + { + //LogPrintf("rounds :: %s %s %d NEXT\n", padding.c_str(), in.ToString().c_str(), rounds); + int n = GetInputDarksendRounds(in2, rounds+1); + if(n != -3) return n; + } + } } + return rounds-1; } -int randomizeList (int i) { return std::rand()%i;} - -void CDarksendPool::Reset(){ +void CDarkSendPool::Reset(){ cachedLastSuccess = 0; - lastNewBlock = 0; - txCollateral = CTransaction(); vecMasternodesUsed.clear(); UnlockCoins(); SetNull(); } -void CDarksendPool::SetNull(){ +void CDarkSendPool::SetNull(bool clearEverything){ + finalTransaction.vin.clear(); + finalTransaction.vout.clear(); - // MN side - sessionUsers = 0; - vecSessionCollateral.clear(); + entries.clear(); + + state = POOL_STATUS_ACCEPTING_ENTRIES; + + lastTimeChanged = GetTimeMillis(); - // Client side entriesCount = 0; lastEntryAccepted = 0; countEntriesAccepted = 0; - sessionFoundMasternode = false; + lastNewBlock = 0; - // Both sides - state = POOL_STATUS_IDLE; - sessionID = 0; + sessionUsers = 0; sessionDenom = 0; - entries.clear(); - finalTransaction.vin.clear(); - finalTransaction.vout.clear(); - lastTimeChanged = GetTimeMillis(); + sessionFoundMasternode = false; + vecSessionCollateral.clear(); + txCollateral = CTransaction(); + + if(clearEverything){ + myEntries.clear(); + + if(fMasterNode){ + sessionID = 1 + (rand() % 999999); + } else { + sessionID = 0; + } + } // -- seed random number generator (used for ordering output lists) unsigned int seed = 0; - RAND_bytes((unsigned char*)&seed, sizeof(seed)); + GetRandBytes((unsigned char*)&seed, sizeof(seed)); std::srand(seed); } -bool CDarksendPool::SetCollateralAddress(std::string strAddress){ +bool CDarkSendPool::SetCollateralAddress(std::string strAddress){ CBitcoinAddress address; if (!address.SetString(strAddress)) { - LogPrintf("CDarksendPool::SetCollateralAddress - Invalid DarkSend collateral address\n"); + LogPrintf("CDarkSendPool::SetCollateralAddress - Invalid DarkSend collateral address\n"); return false; } - collateralPubKey = GetScriptForDestination(address.Get()); + collateralPubKey= GetScriptForDestination(address.Get()); return true; } // // Unlock coins after Darksend fails or succeeds // -void CDarksendPool::UnlockCoins(){ - while(true) { - TRY_LOCK(pwalletMain->cs_wallet, lockWallet); - if(!lockWallet) {MilliSleep(50); continue;} - BOOST_FOREACH(CTxIn v, lockedCoins) - pwalletMain->UnlockCoin(v.prevout); - break; - } +void CDarkSendPool::UnlockCoins(){ + BOOST_FOREACH(CTxIn v, lockedCoins) + pwalletMain->UnlockCoin(v.prevout); lockedCoins.clear(); } -/// from masternode-sync.cpp -bool CDarksendPool::IsBlockchainSynced() -{ - static bool fBlockchainSynced = false; - static int64_t lastProcess = GetTime(); - - // if the last call to this function was more than 60 minutes ago (client was in sleep mode) reset the sync process - if(GetTime() - lastProcess > 60*60) { - Reset(); - fBlockchainSynced = false; - } - lastProcess = GetTime(); - - if(fBlockchainSynced) return true; - - if (fImporting || fReindex) return false; - - TRY_LOCK(cs_main, lockMain); - if(!lockMain) return false; - - CBlockIndex* pindex = pindexBest; - if(pindex == NULL) return false; - - - if(pindex->nTime + 60*60 < GetTime()) - return false; - - fBlockchainSynced = true; - - return true; -} - -std::string CDarksendPool::GetStatus() -{ - static int showingDarkSendMessage = 0; - showingDarkSendMessage+=10; - std::string suffix = ""; - - if(pindexBest->nHeight - cachedLastSuccess < minBlockSpacing ||!IsBlockchainSynced()) { - return strAutoDenomResult; - } - switch(state) { - case POOL_STATUS_IDLE: - return _("Darksend is idle."); - case POOL_STATUS_ACCEPTING_ENTRIES: - if(entriesCount == 0) { - showingDarkSendMessage = 0; - return strAutoDenomResult; - } else if (lastEntryAccepted == 1) { - if(showingDarkSendMessage % 10 > 8) { - lastEntryAccepted = 0; - showingDarkSendMessage = 0; - } - return _("Darksend request complete:") + " " + _("Your transaction was accepted into the pool!"); - } else { - std::string suffix = ""; - if( showingDarkSendMessage % 70 <= 40) return strprintf(_("Submitted following entries to masternode: %u / %d"), entriesCount, GetMaxPoolTransactions()); - else if(showingDarkSendMessage % 70 <= 50) suffix = "."; - else if(showingDarkSendMessage % 70 <= 60) suffix = ".."; - else if(showingDarkSendMessage % 70 <= 70) suffix = "..."; - return strprintf(_("Submitted to masternode, waiting for more entries ( %u / %d ) %s"), entriesCount, GetMaxPoolTransactions(), suffix); - } - case POOL_STATUS_SIGNING: - if( showingDarkSendMessage % 70 <= 40) return _("Found enough users, signing ..."); - else if(showingDarkSendMessage % 70 <= 50) suffix = "."; - else if(showingDarkSendMessage % 70 <= 60) suffix = ".."; - else if(showingDarkSendMessage % 70 <= 70) suffix = "..."; - return strprintf(_("Found enough users, signing ( waiting %s )"), suffix); - case POOL_STATUS_TRANSMISSION: - return _("Transmitting final transaction."); - case POOL_STATUS_FINALIZE_TRANSACTION: - return _("Finalizing transaction."); - case POOL_STATUS_ERROR: - return _("Darksend request incomplete:") + " " + lastMessage + " " + _("Will retry..."); - case POOL_STATUS_SUCCESS: - return _("Darksend request complete:") + " " + lastMessage; - case POOL_STATUS_QUEUE: - if( showingDarkSendMessage % 70 <= 30) suffix = "."; - else if(showingDarkSendMessage % 70 <= 50) suffix = ".."; - else if(showingDarkSendMessage % 70 <= 70) suffix = "..."; - return strprintf(_("Submitted to masternode, waiting in queue %s"), suffix);; - default: - return strprintf(_("Unknown state: id = %u"), state); - } -} - // -// Check the Darksend progress and send client updates if a Masternode +// Check the Darksend progress and send client updates if a masternode // -void CDarksendPool::Check() +void CDarkSendPool::Check() { - if(fMasterNode) LogPrint("darksend", "CDarksendPool::Check() - entries count %lu\n", entries.size()); - //printf("CDarksendPool::Check() %d - %d - %d\n", state, anonTx.CountEntries(), GetTimeMillis()-lastTimeChanged); + if(fDebug) LogPrintf("CDarkSendPool::Check()\n"); + if(fDebug) LogPrintf("CDarkSendPool::Check() - entries count %lu\n", entries.size()); - if(fMasterNode) { - LogPrint("darksend", "CDarksendPool::Check() - entries count %lu\n", entries.size()); - // If entries is full, then move on to the next phase - if(state == POOL_STATUS_ACCEPTING_ENTRIES && (int)entries.size() >= GetMaxPoolTransactions()) - { - LogPrint("darksend", "CDarksendPool::Check() -- TRYING TRANSACTION \n"); - UpdateState(POOL_STATUS_FINALIZE_TRANSACTION); - } + // If entries is full, then move on to the next phase + if(state == POOL_STATUS_ACCEPTING_ENTRIES && (int)entries.size() >= GetMaxPoolTransactions()) + { + if(fDebug) LogPrintf("CDarkSendPool::Check() -- ACCEPTING OUTPUTS\n"); + UpdateState(POOL_STATUS_FINALIZE_TRANSACTION); } // create the finalized transaction for distribution to the clients - if(state == POOL_STATUS_FINALIZE_TRANSACTION) { - LogPrint("darksend", "CDarksendPool::Check() -- FINALIZE TRANSACTIONS\n"); + if(state == POOL_STATUS_FINALIZE_TRANSACTION && finalTransaction.vin.empty() && finalTransaction.vout.empty()) { + if(fDebug) LogPrintf("CDarkSendPool::Check() -- FINALIZE TRANSACTIONS\n"); UpdateState(POOL_STATUS_SIGNING); if (fMasterNode) { - CTransaction txNew; - // make our new transaction + CTransaction txNew; for(unsigned int i = 0; i < entries.size(); i++){ - BOOST_FOREACH(const CTxOut& v, entries[i].vout) + BOOST_FOREACH(const CTxOut v, entries[i].vout) txNew.vout.push_back(v); - BOOST_FOREACH(const CTxDSIn& s, entries[i].sev) - txNew.vin.push_back(s); + BOOST_FOREACH(const CDarkSendEntryVin s, entries[i].sev) + txNew.vin.push_back(s.vin); } - // shuffle the outputs for improved anonymity - std::random_shuffle ( txNew.vin.begin(), txNew.vin.end(), randomizeList); std::random_shuffle ( txNew.vout.begin(), txNew.vout.end(), randomizeList); + if(fDebug) LogPrintf("Transaction 1: %s\n", txNew.ToString().c_str()); - LogPrint("darksend", "Transaction 1: %s\n", txNew.ToString()); - finalTransaction = txNew; + SignFinalTransaction(txNew, NULL); // request signatures from clients - RelayFinalTransaction(sessionID, finalTransaction); + RelayDarkSendFinalTransaction(sessionID, txNew); } } + // collect signatures from clients + // If we have all of the signatures, try to compile the transaction - if(fMasterNode && state == POOL_STATUS_SIGNING && SignaturesComplete()) { - LogPrint("darksend", "CDarksendPool::Check() -- SIGNING\n"); + if(state == POOL_STATUS_SIGNING && SignaturesComplete()) { + if(fDebug) LogPrintf("CDarkSendPool::Check() -- SIGNING\n"); UpdateState(POOL_STATUS_TRANSMISSION); - CheckFinalTransaction(); - } - - // reset if we're here for 10 seconds - if((state == POOL_STATUS_ERROR || state == POOL_STATUS_SUCCESS) && GetTimeMillis()-lastTimeChanged >= 10000) { - LogPrint("darksend", "CDarksendPool::Check() -- timeout, RESETTING\n"); - UnlockCoins(); - SetNull(); - if(fMasterNode) RelayStatus(sessionID, GetState(), GetEntriesCount(), MASTERNODE_RESET); - } -} -void CDarksendPool::CheckFinalTransaction() -{ - if (!fMasterNode) return; // check and relay final tx only on masternode + CWalletTx txNew = CWalletTx(pwalletMain, finalTransaction); - CWalletTx txNew = CWalletTx(pwalletMain, finalTransaction); + LOCK2(cs_main, pwalletMain->cs_wallet); + { + if (fMasterNode) { //only the main node is master atm + if(fDebug) LogPrintf("Transaction 2: %s\n", txNew.ToString().c_str()); - LOCK2(cs_main, pwalletMain->cs_wallet); - { - LogPrint("darksend", "Transaction 2: %s\n", txNew.ToString()); + // See if the transaction is valid + if (!txNew.AcceptToMemoryPool(true)) + { + LogPrintf("CDarkSendPool::Check() - CommitTransaction : Error: Transaction not valid\n"); + SetNull(); + pwalletMain->Lock(); - // See if the transaction is valid - if (!txNew.AcceptToMemoryPool(false, true, true)) - { - LogPrintf("CDarksendPool::Check() - CommitTransaction : Error: Transaction not valid\n"); - SetNull(); + // not much we can do in this case + UpdateState(POOL_STATUS_ACCEPTING_ENTRIES); + RelayDarkSendCompletedTransaction(sessionID, true, "Transaction not valid, please try again"); + return; + } - // not much we can do in this case - UpdateState(POOL_STATUS_ACCEPTING_ENTRIES); - RelayCompletedTransaction(sessionID, true, _("Transaction not valid, please try again")); - return; - } + LogPrintf("CDarkSendPool::Check() -- IS MASTER -- TRANSMITTING DARKSEND\n"); - LogPrintf("CDarksendPool::Check() -- IS MASTER -- TRANSMITTING DARKSEND\n"); + // sign a message - // sign a message + int64_t sigTime = GetAdjustedTime(); + std::string strMessage = txNew.GetHash().ToString() + boost::lexical_cast(sigTime); + std::string strError = ""; + std::vector vchSig; + CKey key2; + CPubKey pubkey2; - int64_t sigTime = GetAdjustedTime(); - std::string strMessage = txNew.GetHash().ToString() + boost::lexical_cast(sigTime); - std::string strError = ""; - std::vector vchSig; - CKey key2; - CPubKey pubkey2; + if(!darkSendSigner.SetKey(strMasterNodePrivKey, strError, key2, pubkey2)) + { + LogPrintf("CDarkSendPool::Check() - ERROR: Invalid masternodeprivkey: '%s'\n", strError.c_str()); + return; + } - if(!darkSendSigner.SetKey(strMasterNodePrivKey, strError, key2, pubkey2)) - { - LogPrintf("CDarksendPool::Check() - ERROR: Invalid Masternodeprivkey: '%s'\n", strError); - return; - } + if(!darkSendSigner.SignMessage(strMessage, strError, vchSig, key2)) { + LogPrintf("CDarkSendPool::Check() - Sign message failed\n"); + return; + } - if(!darkSendSigner.SignMessage(strMessage, strError, vchSig, key2)) { - LogPrintf("CDarksendPool::Check() - Sign message failed\n"); - return; - } + if(!darkSendSigner.VerifyMessage(pubkey2, vchSig, strMessage, strError)) { + LogPrintf("CDarkSendPool::Check() - Verify message failed\n"); + return; + } - if(!darkSendSigner.VerifyMessage(pubkey2, vchSig, strMessage, strError)) { - LogPrintf("CDarksendPool::Check() - Verify message failed\n"); - return; - } + if(!mapDarksendBroadcastTxes.count(txNew.GetHash())){ + CDarksendBroadcastTx dstx; + dstx.tx = txNew; + dstx.vin = activeMasternode.vin; + dstx.vchSig = vchSig; + dstx.sigTime = sigTime; - string txHash = txNew.GetHash().ToString().c_str(); - LogPrintf("CDarksendPool::Check() -- txHash %d \n", txHash); - if(!mapDarksendBroadcastTxes.count(txNew.GetHash())){ - CDarksendBroadcastTx dstx; - dstx.tx = txNew; - dstx.vin = activeMasternode.vin; - dstx.vchSig = vchSig; - dstx.sigTime = sigTime; + mapDarksendBroadcastTxes.insert(make_pair(txNew.GetHash(), dstx)); + } - mapDarksendBroadcastTxes.insert(make_pair(txNew.GetHash(), dstx)); - } + // Broadcast the transaction to the network + txNew.fTimeReceivedIsTxTime = true; + txNew.RelayWalletTransaction(); - CInv inv(MSG_DSTX, txNew.GetHash()); - RelayInventory(inv); + // Tell the clients it was successful + RelayDarkSendCompletedTransaction(sessionID, false, _("Transaction created successfully.")); - // Tell the clients it was successful - RelayCompletedTransaction(sessionID, false, _("Transaction created successfully.")); + // Randomly charge clients + ChargeRandomFees(); + } + } + } - // Randomly charge clients - ChargeRandomFees(); + // move on to next phase, allow 3 seconds incase the masternode wants to send us anything else + if((state == POOL_STATUS_TRANSMISSION && fMasterNode) || (state == POOL_STATUS_SIGNING && completedTransaction) ) { + if(fDebug) LogPrintf("CDarkSendPool::Check() -- COMPLETED -- RESETTING \n"); + SetNull(true); + UnlockCoins(); + if(fMasterNode) RelayDarkSendStatus(darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_RESET); + pwalletMain->Lock(); + } - // Reset - LogPrint("darksend", "CDarksendPool::Check() -- COMPLETED -- RESETTING \n"); - SetNull(); - RelayStatus(sessionID, GetState(), GetEntriesCount(), MASTERNODE_RESET); + // reset if we're here for 10 seconds + if((state == POOL_STATUS_ERROR || state == POOL_STATUS_SUCCESS) && GetTimeMillis()-lastTimeChanged >= 10000) { + if(fDebug) LogPrintf("CDarkSendPool::Check() -- RESETTING MESSAGE \n"); + SetNull(true); + if(fMasterNode) RelayDarkSendStatus(darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_RESET); + UnlockCoins(); } } @@ -667,106 +649,106 @@ void CDarksendPool::CheckFinalTransaction() // a client submits a transaction then refused to sign, there must be a cost. Otherwise they // would be able to do this over and over again and bring the mixing to a hault. // -// How does this work? Messages to Masternodes come in via "dsi", these require a valid collateral -// transaction for the client to be able to enter the pool. This transaction is kept by the Masternode +// How does this work? Messages to masternodes come in via "dsi", these require a valid collateral +// transaction for the client to be able to enter the pool. This transaction is kept by the masternode // until the transaction is either complete or fails. // -void CDarksendPool::ChargeFees(){ - if(!fMasterNode) return; - - //we don't need to charge collateral for every offence. - int offences = 0; - int r = rand()%100; - if(r > 33) return; - - if(state == POOL_STATUS_ACCEPTING_ENTRIES){ - BOOST_FOREACH(const CTransaction& txCollateral, vecSessionCollateral) { - bool found = false; - BOOST_FOREACH(const CDarkSendEntry& v, entries) { - if(v.collateral == txCollateral) { - found = true; +void CDarkSendPool::ChargeFees(){ + if(fMasterNode) { + //we don't need to charge collateral for every offence. + int offences = 0; + int r = rand()%100; + if(r > 33) return; + + if(state == POOL_STATUS_ACCEPTING_ENTRIES){ + BOOST_FOREACH(const CTransaction& txCollateral, vecSessionCollateral) { + bool found = false; + BOOST_FOREACH(const CDarkSendEntry& v, entries) { + if(v.collateral == txCollateral) { + found = true; + } } - } - // This queue entry didn't send us the promised transaction - if(!found){ - LogPrintf("CDarksendPool::ChargeFees -- found uncooperative node (didn't send transaction). Found offence.\n"); - offences++; + // This queue entry didn't send us the promised transaction + if(!found){ + LogPrintf("CDarkSendPool::ChargeFees -- found uncooperative node (didn't send transaction). Found offence.\n"); + offences++; + } } } - } - if(state == POOL_STATUS_SIGNING) { - // who didn't sign? - BOOST_FOREACH(const CDarkSendEntry v, entries) { - BOOST_FOREACH(const CTxDSIn s, v.sev) { - if(!s.fHasSig){ - LogPrintf("CDarksendPool::ChargeFees -- found uncooperative node (didn't sign). Found offence\n"); - offences++; + if(state == POOL_STATUS_SIGNING) { + // who didn't sign? + BOOST_FOREACH(const CDarkSendEntry v, entries) { + BOOST_FOREACH(const CDarkSendEntryVin s, v.sev) { + if(!s.isSigSet){ + LogPrintf("CDarkSendPool::ChargeFees -- found uncooperative node (didn't sign). Found offence\n"); + offences++; + } } } } - } - r = rand()%100; - int target = 0; + r = rand()%100; + int target = 0; - //mostly offending? - if(offences >= Params().PoolMaxTransactions()-1 && r > 33) return; + //mostly offending? + if(offences >= POOL_MAX_TRANSACTIONS-1 && r > 33) return; - //everyone is an offender? That's not right - if(offences >= Params().PoolMaxTransactions()) return; + //everyone is an offender? That's not right + if(offences >= POOL_MAX_TRANSACTIONS) return; - //charge one of the offenders randomly - if(offences > 1) target = 50; + //charge one of the offenders randomly + if(offences > 1) target = 50; - //pick random client to charge - r = rand()%100; + //pick random client to charge + r = rand()%100; - if(state == POOL_STATUS_ACCEPTING_ENTRIES){ - BOOST_FOREACH(const CTransaction& txCollateral, vecSessionCollateral) { - bool found = false; - BOOST_FOREACH(const CDarkSendEntry& v, entries) { - if(v.collateral == txCollateral) { - found = true; + if(state == POOL_STATUS_ACCEPTING_ENTRIES){ + BOOST_FOREACH(const CTransaction& txCollateral, vecSessionCollateral) { + bool found = false; + BOOST_FOREACH(const CDarkSendEntry& v, entries) { + if(v.collateral == txCollateral) { + found = true; + } } - } - // This queue entry didn't send us the promised transaction - if(!found && r > target){ - LogPrintf("CDarksendPool::ChargeFees -- found uncooperative node (didn't send transaction). charging fees.\n"); + // This queue entry didn't send us the promised transaction + if(!found && r > target){ + LogPrintf("CDarkSendPool::ChargeFees -- found uncooperative node (didn't send transaction). charging fees.\n"); - CWalletTx wtxCollateral = CWalletTx(pwalletMain, txCollateral); + CWalletTx wtxCollateral = CWalletTx(pwalletMain, txCollateral); - // Broadcast - if (!wtxCollateral.AcceptToMemoryPool(true)) - { - // This must not fail. The transaction has already been signed and recorded. - LogPrintf("CDarksendPool::ChargeFees() : Error: Transaction not valid"); + // Broadcast + if (!wtxCollateral.AcceptToMemoryPool(true)) + { + // This must not fail. The transaction has already been signed and recorded. + LogPrintf("CDarkSendPool::ChargeFees() : Error: Transaction not valid"); + } + wtxCollateral.RelayWalletTransaction(); + return; } - wtxCollateral.RelayWalletTransaction(); - return; } } - } - if(state == POOL_STATUS_SIGNING) { - // who didn't sign? - BOOST_FOREACH(const CDarkSendEntry v, entries) { - BOOST_FOREACH(const CTxDSIn s, v.sev) { - if(!s.fHasSig && r > target){ - LogPrintf("CDarksendPool::ChargeFees -- found uncooperative node (didn't sign). charging fees.\n"); + if(state == POOL_STATUS_SIGNING) { + // who didn't sign? + BOOST_FOREACH(const CDarkSendEntry v, entries) { + BOOST_FOREACH(const CDarkSendEntryVin s, v.sev) { + if(!s.isSigSet && r > target){ + LogPrintf("CDarkSendPool::ChargeFees -- found uncooperative node (didn't sign). charging fees.\n"); - CWalletTx wtxCollateral = CWalletTx(pwalletMain, v.collateral); + CWalletTx wtxCollateral = CWalletTx(pwalletMain, v.collateral); - // Broadcast - if (!wtxCollateral.AcceptToMemoryPool(false)) - { - // This must not fail. The transaction has already been signed and recorded. - LogPrintf("CDarksendPool::ChargeFees() : Error: Transaction not valid"); + // Broadcast + if (!wtxCollateral.AcceptToMemoryPool(true)) + { + // This must not fail. The transaction has already been signed and recorded. + LogPrintf("CDarkSendPool::ChargeFees() : Error: Transaction not valid"); + } + wtxCollateral.RelayWalletTransaction(); + return; } - wtxCollateral.RelayWalletTransaction(); - return; } } } @@ -775,25 +757,25 @@ void CDarksendPool::ChargeFees(){ // charge the collateral randomly // - Darksend is completely free, to pay miners we randomly pay the collateral of users. -void CDarksendPool::ChargeRandomFees(){ +void CDarkSendPool::ChargeRandomFees(){ if(fMasterNode) { int i = 0; BOOST_FOREACH(const CTransaction& txCollateral, vecSessionCollateral) { - int r = rand()%100; + int r = rand()%1000; /* Collateral Fee Charges: Being that DarkSend has "no fees" we need to have some kind of cost associated with using it to stop abuse. Otherwise it could serve as an attack vector and - allow endless transaction that would bloat Memetic and make it unusable. To + allow endless transaction that would bloat PepeCoin and make it unusable. To stop these kinds of attacks 1 in 50 successful transactions are charged. This - adds up to a cost of 0.002 MEME per transaction on average. + adds up to a cost of 0.002DRK per transaction on average. */ - if(r <= 10) + if(r <= 20) { - LogPrintf("CDarksendPool::ChargeRandomFees -- charging random fees. %u\n", i); + LogPrintf("CDarkSendPool::ChargeRandomFees -- charging random fees. %u\n", i); CWalletTx wtxCollateral = CWalletTx(pwalletMain, txCollateral); @@ -801,7 +783,7 @@ void CDarksendPool::ChargeRandomFees(){ if (!wtxCollateral.AcceptToMemoryPool(true)) { // This must not fail. The transaction has already been signed and recorded. - LogPrintf("CDarksendPool::ChargeRandomFees() : Error: Transaction not valid"); + LogPrintf("CDarkSendPool::ChargeRandomFees() : Error: Transaction not valid"); } wtxCollateral.RelayWalletTransaction(); } @@ -812,111 +794,105 @@ void CDarksendPool::ChargeRandomFees(){ // // Check for various timeouts (queue objects, darksend, etc) // -void CDarksendPool::CheckTimeout(){ +void CDarkSendPool::CheckTimeout(){ if(!fEnableDarksend && !fMasterNode) return; // catching hanging sessions if(!fMasterNode) { - switch(state) { - case POOL_STATUS_TRANSMISSION: - LogPrint("darksend", "CDarksendPool::CheckTimeout() -- Session complete -- Running Check()\n"); - Check(); - break; - case POOL_STATUS_ERROR: - LogPrint("darksend", "CDarksendPool::CheckTimeout() -- Pool error -- Running Check()\n"); - Check(); - break; - case POOL_STATUS_SUCCESS: - LogPrint("darksend", "CDarksendPool::CheckTimeout() -- Pool success -- Running Check()\n"); - Check(); - break; + if(state == POOL_STATUS_TRANSMISSION) { + if(fDebug) LogPrintf("CDarkSendPool::CheckTimeout() -- Session complete -- Running Check()\n"); + Check(); } } - // check Darksend queue objects for timeouts + // check darksend queue objects for timeouts int c = 0; - vector::iterator it = vecDarksendQueue.begin(); - while(it != vecDarksendQueue.end()){ + vector::iterator it; + for(it=vecDarksendQueue.begin();it *vec = &myEntries; + if(fMasterNode) vec = &entries; + // check for a timeout and reset if needed - vector::iterator it2 = entries.begin(); - while(it2 != entries.end()){ + vector::iterator it2; + for(it2=vec->begin();it2end();it2++){ if((*it2).IsExpired()){ - LogPrint("darksend", "CDarksendPool::CheckTimeout() : Removing expired entry - %d\n", c); - it2 = entries.erase(it2); - if(entries.size() == 0){ + if(fDebug) LogPrintf("CDarkSendPool::CheckTimeout() : Removing expired entry - %d\n", c); + vec->erase(it2); + if(entries.size() == 0 && myEntries.size() == 0){ + SetNull(true); UnlockCoins(); - SetNull(); } if(fMasterNode){ - RelayStatus(sessionID, GetState(), GetEntriesCount(), MASTERNODE_RESET); + RelayDarkSendStatus(darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_RESET); } - } else ++it2; + break; + } c++; } if(GetTimeMillis()-lastTimeChanged >= (DARKSEND_QUEUE_TIMEOUT*1000)+addLagTime){ - UnlockCoins(); - SetNull(); + lastTimeChanged = GetTimeMillis(); + + ChargeFees(); + // reset session information for the queue query stage (before entering a masternode, clients will send a queue request to make sure they're compatible denomination wise) + sessionUsers = 0; + sessionDenom = 0; + sessionFoundMasternode = false; + vecSessionCollateral.clear(); + + UpdateState(POOL_STATUS_ACCEPTING_ENTRIES); } } else if(GetTimeMillis()-lastTimeChanged >= (DARKSEND_QUEUE_TIMEOUT*1000)+addLagTime){ - LogPrint("darksend", "CDarksendPool::CheckTimeout() -- Session timed out (%ds) -- resetting\n", DARKSEND_QUEUE_TIMEOUT); - UnlockCoins(); + if(fDebug) LogPrintf("CDarkSendPool::CheckTimeout() -- Session timed out (30s) -- resetting\n"); SetNull(); + UnlockCoins(); UpdateState(POOL_STATUS_ERROR); - lastMessage = _("Session timed out."); + lastMessage = _("Session timed out (30 seconds), please resubmit."); } if(state == POOL_STATUS_SIGNING && GetTimeMillis()-lastTimeChanged >= (DARKSEND_SIGNING_TIMEOUT*1000)+addLagTime ) { - LogPrint("darksend", "CDarksendPool::CheckTimeout() -- Session timed out (%ds) -- restting\n", DARKSEND_SIGNING_TIMEOUT); - ChargeFees(); - UnlockCoins(); - SetNull(); - - UpdateState(POOL_STATUS_ERROR); - lastMessage = _("Signing timed out."); - } -} - -// -// Check for complete queue -// -void CDarksendPool::CheckForCompleteQueue(){ - if(!fEnableDarksend && !fMasterNode) return; - - /* Check to see if we're ready for submissions from clients */ - // - // After receiving multiple dsa messages, the queue will switch to "accepting entries" - // which is the active state right before merging the transaction - // - if(state == POOL_STATUS_QUEUE && sessionUsers == GetMaxPoolTransactions()) { - UpdateState(POOL_STATUS_ACCEPTING_ENTRIES); + if(fDebug) LogPrintf("CDarkSendPool::CheckTimeout() -- Session timed out -- restting\n"); + ChargeFees(); + SetNull(); + UnlockCoins(); + //add my transactions to the new session - CDarksendQueue dsq; - dsq.nDenom = sessionDenom; - dsq.vin = activeMasternode.vin; - dsq.time = GetTime(); - dsq.ready = true; - dsq.Sign(); - dsq.Relay(); + UpdateState(POOL_STATUS_ERROR); + lastMessage = _("Signing timed out, please resubmit."); } } // check to see if the signature is valid -bool CDarksendPool::SignatureValid(const CScript& newSig, const CTxIn& newVin){ +bool CDarkSendPool::SignatureValid(const CScript& newSig, const CTxIn& newVin){ CTransaction txNew; txNew.vin.clear(); txNew.vout.clear(); @@ -925,16 +901,16 @@ bool CDarksendPool::SignatureValid(const CScript& newSig, const CTxIn& newVin){ CScript sigPubKey = CScript(); unsigned int i = 0; - BOOST_FOREACH(CDarkSendEntry& e, entries) { - BOOST_FOREACH(const CTxOut& out, e.vout) + BOOST_FOREACH(CDarkSendEntry e, entries) { + BOOST_FOREACH(const CTxOut out, e.vout) txNew.vout.push_back(out); - BOOST_FOREACH(const CTxDSIn& s, e.sev){ - txNew.vin.push_back(s); + BOOST_FOREACH(const CDarkSendEntryVin s, e.sev){ + txNew.vin.push_back(s.vin); - if(s == newVin){ + if(s.vin == newVin){ found = i; - sigPubKey = s.prevPubKey; + sigPubKey = s.vin.prevPubKey; } i++; } @@ -943,19 +919,19 @@ bool CDarksendPool::SignatureValid(const CScript& newSig, const CTxIn& newVin){ if(found >= 0){ //might have to do this one input at a time? int n = found; txNew.vin[n].scriptSig = newSig; - LogPrint("darksend", "CDarksendPool::SignatureValid() - Sign with sig %s\n", newSig.ToString().substr(0,24)); - if (!VerifyScript(txNew.vin[n].scriptSig, sigPubKey, txNew, n, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC, 0)){ - LogPrint("darksend", "CDarksendPool::SignatureValid() - Signing - Error signing input %u\n", n); + if(fDebug) LogPrintf("CDarkSendPool::SignatureValid() - Sign with sig %s\n", newSig.ToString().substr(0,24).c_str()); + if (!VerifyScript(txNew.vin[n].scriptSig, sigPubKey, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC, SignatureChecker(txNew, i))){ + if(fDebug) LogPrintf("CDarkSendPool::SignatureValid() - Signing - Error signing input %u\n", n); return false; } } - LogPrint("darksend", "CDarksendPool::SignatureValid() - Signing - Successfully validated input\n"); + if(fDebug) LogPrintf("CDarkSendPool::SignatureValid() - Signing - Succesfully signed input\n"); return true; } // check to make sure the collateral provided by the client is valid -bool CDarksendPool::IsCollateralValid(const CTransaction& txCollateral){ +bool CDarkSendPool::IsCollateralValid(const CTransaction& txCollateral){ if(txCollateral.vout.size() < 1) return false; if(txCollateral.nLockTime != 0) return false; @@ -967,7 +943,7 @@ bool CDarksendPool::IsCollateralValid(const CTransaction& txCollateral){ nValueOut += o.nValue; if(!o.scriptPubKey.IsNormalPaymentScript()){ - LogPrintf ("CDarksendPool::IsCollateralValid - Invalid Script %s\n", txCollateral.ToString()); + LogPrintf ("CDarkSendPool::IsCollateralValid - Invalid Script %s\n", txCollateral.ToString().c_str()); return false; } } @@ -975,7 +951,8 @@ bool CDarksendPool::IsCollateralValid(const CTransaction& txCollateral){ BOOST_FOREACH(const CTxIn i, txCollateral.vin){ CTransaction tx2; uint256 hash; - if(GetTransaction(i.prevout.hash, tx2, hash)){ + //if(GetTransaction(i.prevout.hash, tx2, hash, true)){ + if(GetTransaction(i.prevout.hash, tx2, hash, false)){ if(tx2.vout.size() > i.prevout.n) { nValueIn += tx2.vout[i.prevout.n].nValue; } @@ -985,25 +962,24 @@ bool CDarksendPool::IsCollateralValid(const CTransaction& txCollateral){ } if(missingTx){ - LogPrint("darksend", "CDarksendPool::IsCollateralValid - Unknown inputs in collateral transaction - %s\n", txCollateral.ToString()); + if(fDebug) LogPrintf ("CDarkSendPool::IsCollateralValid - Unknown inputs in collateral transaction - %s\n", txCollateral.ToString().c_str()); return false; } //collateral transactions are required to pay out DARKSEND_COLLATERAL as a fee to the miners if(nValueIn-nValueOut < DARKSEND_COLLATERAL) { - LogPrint("darksend", "CDarksendPool::IsCollateralValid - did not include enough fees in transaction %d\n%s\n", nValueOut-nValueIn, txCollateral.ToString()); + if(fDebug) LogPrintf ("CDarkSendPool::IsCollateralValid - did not include enough fees in transaction %d\n%s\n", nValueOut-nValueIn, txCollateral.ToString().c_str()); return false; } - LogPrint("darksend", "CDarksendPool::IsCollateralValid %s\n", txCollateral.ToString()); + if(fDebug) LogPrintf("CDarkSendPool::IsCollateralValid %s\n", txCollateral.ToString().c_str()); - { - LOCK(cs_main); - CValidationState state; - if(!AcceptableInputs(mempool, txCollateral, true, NULL)){ - LogPrintf ("CDarksendPool::IsCollateralValid - didn't pass IsAcceptable\n"); - return false; - } + CValidationState state; + //if(!AcceptableInputs(mempool, state, txCollateral)){ + bool* pfMissingInputs; + if(!AcceptableInputs(mempool, txCollateral, false, pfMissingInputs)){ + if(fDebug) LogPrintf ("CDarkSendPool::IsCollateralValid - didn't pass IsAcceptable\n"); + return false; } return true; @@ -1013,12 +989,12 @@ bool CDarksendPool::IsCollateralValid(const CTransaction& txCollateral){ // // Add a clients transaction to the pool // -bool CDarksendPool::AddEntry(const std::vector& newInput, const int64_t& nAmount, const CTransaction& txCollateral, const std::vector& newOutput, std::string& error){ +bool CDarkSendPool::AddEntry(const std::vector& newInput, const int64_t& nAmount, const CTransaction& txCollateral, const std::vector& newOutput, std::string& error){ if (!fMasterNode) return false; BOOST_FOREACH(CTxIn in, newInput) { if (in.prevout.IsNull() || nAmount < 0) { - LogPrint("darksend", "CDarksendPool::AddEntry - input not valid!\n"); + if(fDebug) LogPrintf ("CDarkSendPool::AddEntry - input not valid!\n"); error = _("Input is not valid."); sessionUsers--; return false; @@ -1026,25 +1002,25 @@ bool CDarksendPool::AddEntry(const std::vector& newInput, const int64_t& } if (!IsCollateralValid(txCollateral)){ - LogPrint("darksend", "CDarksendPool::AddEntry - collateral not valid!\n"); + if(fDebug) LogPrintf ("CDarkSendPool::AddEntry - collateral not valid!\n"); error = _("Collateral is not valid."); sessionUsers--; return false; } if((int)entries.size() >= GetMaxPoolTransactions()){ - LogPrint("darksend", "CDarksendPool::AddEntry - entries is full!\n"); + if(fDebug) LogPrintf ("CDarkSendPool::AddEntry - entries is full!\n"); error = _("Entries are full."); sessionUsers--; return false; } BOOST_FOREACH(CTxIn in, newInput) { - LogPrint("darksend", "looking for vin -- %s\n", in.ToString()); - BOOST_FOREACH(const CDarkSendEntry& v, entries) { - BOOST_FOREACH(const CTxDSIn& s, v.sev){ - if((CTxIn)s == in) { - LogPrint("darksend", "CDarksendPool::AddEntry - found in vin\n"); + if(fDebug) LogPrintf("looking for vin -- %s\n", in.ToString().c_str()); + BOOST_FOREACH(const CDarkSendEntry v, entries) { + BOOST_FOREACH(const CDarkSendEntryVin s, v.sev){ + if(s.vin == in) { + if(fDebug) LogPrintf ("CDarkSendPool::AddEntry - found in vin\n"); error = _("Already have that input."); sessionUsers--; return false; @@ -1053,77 +1029,78 @@ bool CDarksendPool::AddEntry(const std::vector& newInput, const int64_t& } } - CDarkSendEntry v; - v.Add(newInput, nAmount, txCollateral, newOutput); - entries.push_back(v); + if(state == POOL_STATUS_ACCEPTING_ENTRIES) { + CDarkSendEntry v; + v.Add(newInput, nAmount, txCollateral, newOutput); + entries.push_back(v); - LogPrint("darksend", "CDarksendPool::AddEntry -- adding %s\n", newInput[0].ToString()); - error = ""; + if(fDebug) LogPrintf("CDarkSendPool::AddEntry -- adding %s\n", newInput[0].ToString().c_str()); + error = ""; - return true; + return true; + } + + if(fDebug) LogPrintf ("CDarkSendPool::AddEntry - can't accept new entry, wrong state!\n"); + error = _("Wrong state."); + sessionUsers--; + return false; } -bool CDarksendPool::AddScriptSig(const CTxIn& newVin){ - LogPrint("darksend", "CDarksendPool::AddScriptSig -- new sig %s\n", newVin.scriptSig.ToString().substr(0,24)); +bool CDarkSendPool::AddScriptSig(const CTxIn newVin){ + if(fDebug) LogPrintf("CDarkSendPool::AddScriptSig -- new sig %s\n", newVin.scriptSig.ToString().substr(0,24).c_str()); - BOOST_FOREACH(const CDarkSendEntry& v, entries) { - BOOST_FOREACH(const CTxDSIn& s, v.sev){ - if(s.scriptSig == newVin.scriptSig) { - LogPrint("darksend", "CDarksendPool::AddScriptSig - already exists \n"); + BOOST_FOREACH(const CDarkSendEntry v, entries) { + BOOST_FOREACH(const CDarkSendEntryVin s, v.sev){ + if(s.vin.scriptSig == newVin.scriptSig) { + LogPrintf("CDarkSendPool::AddScriptSig - already exists \n"); return false; } } } if(!SignatureValid(newVin.scriptSig, newVin)){ - LogPrint("darksend", "CDarksendPool::AddScriptSig - Invalid Sig\n"); + if(fDebug) LogPrintf("CDarkSendPool::AddScriptSig - Invalid Sig\n"); return false; } - LogPrint("darksend", "CDarksendPool::AddScriptSig -- sig %s\n", newVin.ToString()); + if(fDebug) LogPrintf("CDarkSendPool::AddScriptSig -- sig %s\n", newVin.ToString().c_str()); - BOOST_FOREACH(CTxIn& vin, finalTransaction.vin){ - if(newVin.prevout == vin.prevout && vin.nSequence == newVin.nSequence){ - vin.scriptSig = newVin.scriptSig; - vin.prevPubKey = newVin.prevPubKey; - LogPrint("darksend", "CDarksendPool::AddScriptSig -- adding to finalTransaction %s\n", newVin.scriptSig.ToString().substr(0,24)); + if(state == POOL_STATUS_SIGNING) { + BOOST_FOREACH(CTxIn& vin, finalTransaction.vin){ + if(newVin.prevout == vin.prevout && vin.nSequence == newVin.nSequence){ + vin.scriptSig = newVin.scriptSig; + vin.prevPubKey = newVin.prevPubKey; + if(fDebug) LogPrintf("CDarkSendPool::AddScriptSig -- adding to finalTransaction %s\n", newVin.scriptSig.ToString().substr(0,24).c_str()); + } } - } - for(unsigned int i = 0; i < entries.size(); i++){ - if(entries[i].AddSig(newVin)){ - LogPrint("darksend", "CDarksendPool::AddScriptSig -- adding %s\n", newVin.scriptSig.ToString().substr(0,24)); - return true; + for(unsigned int i = 0; i < entries.size(); i++){ + if(entries[i].AddSig(newVin)){ + if(fDebug) LogPrintf("CDarkSendPool::AddScriptSig -- adding %s\n", newVin.scriptSig.ToString().substr(0,24).c_str()); + return true; + } } } - - LogPrintf("CDarksendPool::AddScriptSig -- Couldn't set sig!\n" ); + LogPrintf("CDarkSendPool::AddScriptSig -- Couldn't set sig!\n" ); return false; } // check to make sure everything is signed -bool CDarksendPool::SignaturesComplete(){ - - BOOST_FOREACH(const CDarkSendEntry& v, entries) { - BOOST_FOREACH(const CTxDSIn& s, v.sev){ - if(!s.fHasSig) return false; +bool CDarkSendPool::SignaturesComplete(){ + BOOST_FOREACH(const CDarkSendEntry v, entries) { + BOOST_FOREACH(const CDarkSendEntryVin s, v.sev){ + if(!s.isSigSet) return false; } } return true; } // -// Execute a darksend denomination via a Masternode. +// Execute a darksend denomination via a masternode. // This is only ran from clients // -void CDarksendPool::SendDarksendDenominate(std::vector& vin, std::vector& vout, int64_t amount){ - - if(fMasterNode) { - LogPrintf("CDarksendPool::SendDarksendDenominate() - Darksend from a Masternode is not supported currently.\n"); - return; - } - - if(txCollateral == CTransaction()){ +void CDarkSendPool::SendDarksendDenominate(std::vector& vin, std::vector& vout, int64_t amount){ + if(darkSendPool.txCollateral == CTransaction()){ LogPrintf ("CDarksendPool:SendDarksendDenominate() - Darksend collateral not set"); return; } @@ -1136,29 +1113,28 @@ void CDarksendPool::SendDarksendDenominate(std::vector& vin, std::vector< lockedCoins.push_back(in); //BOOST_FOREACH(CTxOut o, vout) - // LogPrintf(" vout - %s\n", o.ToString()); + // LogPrintf(" vout - %s\n", o.ToString().c_str()); - // we should already be connected to a Masternode + // we should already be connected to a masternode if(!sessionFoundMasternode){ - LogPrintf("CDarksendPool::SendDarksendDenominate() - No Masternode has been selected yet.\n"); + LogPrintf("CDarkSendPool::SendDarksendDenominate() - No masternode has been selected yet.\n"); UnlockCoins(); - SetNull(); + SetNull(true); return; } - if (!CheckDiskSpace()) { - UnlockCoins(); - SetNull(); - fEnableDarksend = false; + if (!CheckDiskSpace()) + return; - LogPrintf("CDarksendPool::SendDarksendDenominate() - Not enough disk space, disabling Darksend.\n"); + if(fMasterNode) { + LogPrintf("CDarkSendPool::SendDarksendDenominate() - DarkSend from a masternode is not supported currently.\n"); return; } UpdateState(POOL_STATUS_ACCEPTING_ENTRIES); - LogPrintf("CDarksendPool::SendDarksendDenominate() - Added transaction to pool.\n"); + LogPrintf("CDarkSendPool::SendDarksendDenominate() - Added transaction to pool.\n"); ClearLastMessage(); @@ -1169,47 +1145,41 @@ void CDarksendPool::SendDarksendDenominate(std::vector& vin, std::vector< CValidationState state; CTransaction tx; - BOOST_FOREACH(const CTxOut& o, vout){ + BOOST_FOREACH(const CTxOut o, vout){ nValueOut += o.nValue; tx.vout.push_back(o); } - BOOST_FOREACH(const CTxIn& i, vin){ + BOOST_FOREACH(const CTxIn i, vin){ tx.vin.push_back(i); - LogPrint("darksend", "dsi -- tx in %s\n", i.ToString()); + if(fDebug) LogPrintf("dsi -- tx in %s\n", i.ToString().c_str()); } - LogPrintf("Submitting tx %s\n", tx.ToString()); - - while(true){ - TRY_LOCK(cs_main, lockMain); - if(!lockMain) { MilliSleep(50); continue;} - if(!AcceptableInputs(mempool, txCollateral, false, NULL, false, true)){ - LogPrintf("dsi -- transaction not valid! %s \n", tx.ToString()); - UnlockCoins(); - SetNull(); - return; - } - break; + //if(!AcceptableInputs(mempool, state, tx)){ + bool* pfMissingInputs; + if(!AcceptableInputs(mempool, tx, false, pfMissingInputs)){ + LogPrintf("dsi -- transaction not valid! %s \n", tx.ToString().c_str()); + return; } } // store our entry for later use CDarkSendEntry e; e.Add(vin, amount, txCollateral, vout); - entries.push_back(e); + myEntries.push_back(e); - RelayIn(entries[0].sev, entries[0].amount, txCollateral, entries[0].vout); + // relay our entry to the master node + RelayDarkSendIn(vin, amount, txCollateral, vout); Check(); } -// Incoming message from Masternode updating the progress of darksend +// Incoming message from masternode updating the progress of darksend // newAccepted: -1 mean's it'n not a "transaction accepted/not accepted" message, just a standard update // 0 means transaction was not accepted // 1 means transaction was accepted -bool CDarksendPool::StatusUpdate(int newState, int newEntriesCount, int newAccepted, std::string& error, int newSessionID){ +bool CDarkSendPool::StatusUpdate(int newState, int newEntriesCount, int newAccepted, std::string& error, int newSessionID){ if(fMasterNode) return false; if(state == POOL_STATUS_ERROR || state == POOL_STATUS_SUCCESS) return false; @@ -1226,24 +1196,24 @@ bool CDarksendPool::StatusUpdate(int newState, int newEntriesCount, int newAccep lastMessage = error; } - if(newAccepted == 1 && newSessionID != 0) { + if(newAccepted == 1) { sessionID = newSessionID; - LogPrintf("CDarksendPool::StatusUpdate - set sessionID to %d\n", sessionID); + LogPrintf("CDarkSendPool::StatusUpdate - set sessionID to %d\n", sessionID); sessionFoundMasternode = true; } } if(newState == POOL_STATUS_ACCEPTING_ENTRIES){ if(newAccepted == 1){ - LogPrintf("CDarksendPool::StatusUpdate - entry accepted! \n"); + LogPrintf("CDarkSendPool::StatusUpdate - entry accepted! \n"); sessionFoundMasternode = true; //wait for other users. Masternode will report when ready UpdateState(POOL_STATUS_QUEUE); } else if (newAccepted == 0 && sessionID == 0 && !sessionFoundMasternode) { - LogPrintf("CDarksendPool::StatusUpdate - entry not accepted by Masternode \n"); + LogPrintf("CDarkSendPool::StatusUpdate - entry not accepted by masternode \n"); UnlockCoins(); UpdateState(POOL_STATUS_ACCEPTING_ENTRIES); - DoAutomaticDenominating(); //try another Masternode + DoAutomaticDenominating(); //try another masternode } if(sessionFoundMasternode) return true; } @@ -1252,46 +1222,47 @@ bool CDarksendPool::StatusUpdate(int newState, int newEntriesCount, int newAccep } // -// After we receive the finalized transaction from the Masternode, we must +// After we receive the finalized transaction from the masternode, we must // check it to make sure it's what we want, then sign it if we agree. // If we refuse to sign, it's possible we'll be charged collateral // -bool CDarksendPool::SignFinalTransaction(CTransaction& finalTransactionNew, CNode* node){ - if(fMasterNode) return false; +bool CDarkSendPool::SignFinalTransaction(CTransaction& finalTransactionNew, CNode* node){ + if(fDebug) LogPrintf("CDarkSendPool::AddFinalTransaction - Got Finalized Transaction\n"); + + if(!finalTransaction.vin.empty()){ + LogPrintf("CDarkSendPool::AddFinalTransaction - Rejected Final Transaction!\n"); + return false; + } finalTransaction = finalTransactionNew; - LogPrintf("CDarksendPool::SignFinalTransaction %s\n", finalTransaction.ToString()); + LogPrintf("CDarkSendPool::SignFinalTransaction %s\n", finalTransaction.ToString().c_str()); vector sigs; //make sure my inputs/outputs are present, otherwise refuse to sign - BOOST_FOREACH(const CDarkSendEntry e, entries) { - BOOST_FOREACH(const CTxDSIn s, e.sev) { + BOOST_FOREACH(const CDarkSendEntry e, myEntries) { + BOOST_FOREACH(const CDarkSendEntryVin s, e.sev) { /* Sign my transaction and all outputs */ int mine = -1; CScript prevPubKey = CScript(); CTxIn vin = CTxIn(); for(unsigned int i = 0; i < finalTransaction.vin.size(); i++){ - if(finalTransaction.vin[i] == s){ + if(finalTransaction.vin[i] == s.vin){ mine = i; - prevPubKey = s.prevPubKey; - vin = s; + prevPubKey = s.vin.prevPubKey; + vin = s.vin; } } - if(mine >= 0){ //might have to do this one input at a time? int foundOutputs = 0; - CAmount nValue1 = 0; - CAmount nValue2 = 0; + int64_t nValue1 = 0; + int64_t nValue2 = 0; for(unsigned int i = 0; i < finalTransaction.vout.size(); i++){ - BOOST_FOREACH(const CTxOut& o, e.vout) { - string Ftx = finalTransaction.vout[i].scriptPubKey.ToString().c_str(); - string Otx = o.scriptPubKey.ToString().c_str(); - if(Ftx == Otx){ - //if(fDebug) LogPrintf("CDarksendPool::SignFinalTransaction - foundOutputs = %d \n", foundOutputs); + BOOST_FOREACH(const CTxOut o, e.vout) { + if(finalTransaction.vout[i] == o){ foundOutputs++; nValue1 += finalTransaction.vout[i].nValue; } @@ -1305,38 +1276,35 @@ bool CDarksendPool::SignFinalTransaction(CTransaction& finalTransactionNew, CNod if(foundOutputs < targetOuputs || nValue1 != nValue2) { // in this case, something went wrong and we'll refuse to sign. It's possible we'll be charged collateral. But that's // better then signing if the transaction doesn't look like what we wanted. - LogPrintf("CDarksendPool::Sign - My entries are not correct! Refusing to sign. %d entries %d target. \n", foundOutputs, targetOuputs); - UnlockCoins(); - SetNull(); + LogPrintf("CDarkSendPool::Sign - My entries are not correct! Refusing to sign. %d entries %d target. \n", foundOutputs, targetOuputs); return false; } - - const CKeyStore& keystore = *pwalletMain; - - LogPrint("darksend", "CDarksendPool::Sign - Signing my input %i\n", mine); - if(!SignSignature(keystore, prevPubKey, finalTransaction, mine, int(SIGHASH_ALL|SIGHASH_ANYONECANPAY))) { // changes scriptSig - LogPrint("darksend", "CDarksendPool::Sign - Unable to sign my own transaction! \n"); + + if(fDebug) LogPrintf("CDarkSendPool::Sign - Signing my input %i\n", mine); + if(!SignSignature(*pwalletMain, prevPubKey, finalTransaction, mine, int(SIGHASH_ALL|SIGHASH_ANYONECANPAY))) { // changes scriptSig + if(fDebug) LogPrintf("CDarkSendPool::Sign - Unable to sign my own transaction! \n"); // not sure what to do here, it will timeout...? } sigs.push_back(finalTransaction.vin[mine]); - LogPrint("darksend", " -- dss %d %d %s\n", mine, (int)sigs.size(), finalTransaction.vin[mine].scriptSig.ToString()); + if(fDebug) LogPrintf(" -- dss %d %d %s\n", mine, (int)sigs.size(), finalTransaction.vin[mine].scriptSig.ToString().c_str()); } } - LogPrint("darksend", "CDarksendPool::Sign - txNew:\n%s", finalTransaction.ToString()); + if(fDebug) LogPrintf("CDarkSendPool::Sign - txNew:\n%s", finalTransaction.ToString().c_str()); } - // push all of our signatures to the Masternode - if(sigs.size() > 0 && node != NULL) - node->PushMessage("dss", sigs); + // push all of our signatures to the masternode + if(sigs.size() > 0 && node != NULL) + node->PushMessage("dss", sigs); + return true; } -void CDarksendPool::NewBlock() +void CDarkSendPool::NewBlock() { - LogPrint("darksend", "CDarksendPool::NewBlock \n"); + if(fDebug) LogPrintf("CDarkSendPool::NewBlock \n"); //we we're processing lots of blocks, we'll just leave if(GetTime() - lastNewBlock < 10) return; @@ -1344,33 +1312,40 @@ void CDarksendPool::NewBlock() darkSendPool.CheckTimeout(); + if(!fEnableDarksend) return; + + if(!fMasterNode){ + //denominate all non-denominated inputs every 25 minutes. + if(pindexBest->nHeight % 10 == 0) UnlockCoins(); + ProcessMasternodeConnections(); + } } -// Darksend transaction was completed (failed or successful) -void CDarksendPool::CompletedTransaction(bool error, int errorID) +// Darksend transaction was completed (failed or successed) +void CDarkSendPool::CompletedTransaction(bool error, std::string lastMessageNew) { if(fMasterNode) return; if(error){ LogPrintf("CompletedTransaction -- error \n"); UpdateState(POOL_STATUS_ERROR); - Check(); - UnlockCoins(); - SetNull(); } else { LogPrintf("CompletedTransaction -- success \n"); UpdateState(POOL_STATUS_SUCCESS); - UnlockCoins(); - SetNull(); + myEntries.clear(); + // To avoid race conditions, we'll only let DS run once per block cachedLastSuccess = pindexBest->nHeight; } - lastMessage = GetMessageByID(errorID); + lastMessage = lastMessageNew; + completedTransaction = true; + Check(); + UnlockCoins(); } -void CDarksendPool::ClearLastMessage() +void CDarkSendPool::ClearLastMessage() { lastMessage = ""; } @@ -1380,27 +1355,25 @@ void CDarksendPool::ClearLastMessage() // // This does NOT run by default for daemons, only for QT. // -bool CDarksendPool::DoAutomaticDenominating(bool fDryRun) +bool CDarkSendPool::DoAutomaticDenominating(bool fDryRun, bool ready) { + // check if enabled first thing so we don't waste time acquiring a lock + if(!fEnableDarksend) { + if(fDebug) LogPrintf("CDarkSendPool::DoAutomaticDenominating - Darksend is disabled\n"); + strAutoDenomResult = _("Darksend is disabled."); + return false; + } - if(!fEnableDarksend) return false; + LOCK(cs_darksend); + + if(IsInitialBlockDownload()) return false; if(fMasterNode) return false; if(state == POOL_STATUS_ERROR || state == POOL_STATUS_SUCCESS) return false; - if(GetEntriesCount() > 0) { - strAutoDenomResult = _("Mixing in progress..."); - return false; - } - - TRY_LOCK(cs_darksend, lockDS); - if(!lockDS) { - strAutoDenomResult = _("Lock is already in place."); - return false; - } - - if(!IsBlockchainSynced()) { - strAutoDenomResult = _("Can't mix while sync in progress."); + if(pindexBest->nHeight - cachedLastSuccess < minBlockSpacing) { + LogPrintf("CDarkSendPool::DoAutomaticDenominating - Last successful darksend action was too recent\n"); + strAutoDenomResult = _("Last successful darksend action was too recent."); return false; } @@ -1409,51 +1382,54 @@ bool CDarksendPool::DoAutomaticDenominating(bool fDryRun) return false; } - if(pindexBest->nHeight - cachedLastSuccess < minBlockSpacing) { - LogPrintf("CDarksendPool::DoAutomaticDenominating - Last successful Darksend action was too recent\n"); - strAutoDenomResult = _("Last successful Darksend action was too recent."); - return false; + if(darkSendPool.GetState() != POOL_STATUS_ERROR && darkSendPool.GetState() != POOL_STATUS_SUCCESS){ + if(darkSendPool.GetMyTransactionCount() > 0){ + return true; + } } - if(mnodeman.size() == 0){ - LogPrint("darksend", "CDarksendPool::DoAutomaticDenominating - No Masternodes detected\n"); - strAutoDenomResult = _("No Masternodes detected."); + if(vecMasternodes.size() == 0){ + if(fDebug) LogPrintf("CDarkSendPool::DoAutomaticDenominating - No masternodes detected\n"); + strAutoDenomResult = _("No masternodes detected."); return false; } // ** find the coins we'll use std::vector vCoins; - CAmount nValueMin = CENT; - CAmount nValueIn = 0; - - CAmount nOnlyDenominatedBalance; - CAmount nBalanceNeedsDenominated; + std::vector vCoins2; + int64_t nValueMin = CENT; + int64_t nValueIn = 0; - // should not be less than fees in DARKSEND_COLLATERAL + few (lets say 5) smallest denoms - CAmount nLowestDenom = DARKSEND_COLLATERAL + darkSendDenominations[darkSendDenominations.size() - 1]*5; + // should not be less than fees in DARKSEND_FEE + few (lets say 5) smallest denoms + int64_t nLowestDenom = DARKSEND_FEE + darkSendDenominations[darkSendDenominations.size() - 1]*5; // if there are no DS collateral inputs yet if(!pwalletMain->HasCollateralInputs()) // should have some additional amount for them - nLowestDenom += DARKSEND_COLLATERAL*4; + nLowestDenom += (DARKSEND_COLLATERAL*4)+DARKSEND_FEE*2; - CAmount nBalanceNeedsAnonymized = nAnonymizeTransferAmount*COIN - pwalletMain->GetAnonymizedBalance(); + int64_t nBalanceNeedsAnonymized = nAnonymizePepeCoinAmount*COIN - pwalletMain->GetAnonymizedBalance(); // if balanceNeedsAnonymized is more than pool max, take the pool max if(nBalanceNeedsAnonymized > DARKSEND_POOL_MAX) nBalanceNeedsAnonymized = DARKSEND_POOL_MAX; // if balanceNeedsAnonymized is more than non-anonymized, take non-anonymized - CAmount nAnonymizableBalance = pwalletMain->GetAnonymizableBalance(); - if(nBalanceNeedsAnonymized > nAnonymizableBalance) nBalanceNeedsAnonymized = nAnonymizableBalance; + int64_t nBalanceNotYetAnonymized = pwalletMain->GetBalance() - pwalletMain->GetAnonymizedBalance(); + if(nBalanceNeedsAnonymized > nBalanceNotYetAnonymized) nBalanceNeedsAnonymized = nBalanceNotYetAnonymized; if(nBalanceNeedsAnonymized < nLowestDenom) { - LogPrintf("DoAutomaticDenominating : No funds detected in need of denominating \n"); - strAutoDenomResult = _("No funds detected in need of denominating."); - return false; +// if(nBalanceNeedsAnonymized > nValueMin) +// nBalanceNeedsAnonymized = nLowestDenom; +// else +// { + LogPrintf("DoAutomaticDenominating : No funds detected in need of denominating \n"); + strAutoDenomResult = _("No funds detected in need of denominating."); + return false; +// } } - LogPrint("darksend", "DoAutomaticDenominating : nLowestDenom=%d, nBalanceNeedsAnonymized=%d\n", nLowestDenom, nBalanceNeedsAnonymized); + if (fDebug) LogPrintf("DoAutomaticDenominating : nLowestDenom=%d, nBalanceNeedsAnonymized=%d\n", nLowestDenom, nBalanceNeedsAnonymized); // select coins that should be given to the pool if (!pwalletMain->SelectCoinsDark(nValueMin, nBalanceNeedsAnonymized, vCoins, nValueIn, 0, nDarksendRounds)) @@ -1463,18 +1439,7 @@ bool CDarksendPool::DoAutomaticDenominating(bool fDryRun) if (pwalletMain->SelectCoinsDark(nValueMin, 9999999*COIN, vCoins, nValueIn, -2, 0)) { - nOnlyDenominatedBalance = pwalletMain->GetDenominatedBalance(true) + pwalletMain->GetDenominatedBalance() - pwalletMain->GetAnonymizedBalance(); - nBalanceNeedsDenominated = nBalanceNeedsAnonymized - nOnlyDenominatedBalance; - - if(nBalanceNeedsDenominated > nValueIn) nBalanceNeedsDenominated = nValueIn; - - if(nBalanceNeedsDenominated < nLowestDenom) return false; // most likely we just waiting for denoms to confirm - if(!fDryRun){ - LogPrintf("DoAutomaticDenominating : !fDryRun Returning CreateDenominated(nBalanceNeedsDenominated); \n"); - return CreateDenominated(nBalanceNeedsDenominated); - } - LogPrintf("DoAutomaticDenominating : fDryRun Returning true \n"); - + if(!fDryRun) return CreateDenominated(nBalanceNeedsAnonymized); return true; } else { LogPrintf("DoAutomaticDenominating : Can't denominate - no compatible inputs left\n"); @@ -1482,30 +1447,27 @@ bool CDarksendPool::DoAutomaticDenominating(bool fDryRun) return false; } - } else { - LogPrintf("DoAutomaticDenominating : fDryRun Returning true 2 \n"); } - if(fDryRun) return true; + //check to see if we have the collateral sized inputs, it requires these + if(!pwalletMain->HasCollateralInputs()){ + if(!fDryRun) MakeCollateralAmounts(); + return true; + } - nOnlyDenominatedBalance = pwalletMain->GetDenominatedBalance(true) + pwalletMain->GetDenominatedBalance() - pwalletMain->GetAnonymizedBalance(); - nBalanceNeedsDenominated = nBalanceNeedsAnonymized - nOnlyDenominatedBalance; + if(fDryRun) return true; - //check if we have should create more denominated inputs - if(nBalanceNeedsDenominated > nOnlyDenominatedBalance) return CreateDenominated(nBalanceNeedsDenominated); + // initial phase, find a masternode + if(!sessionFoundMasternode){ + int nUseQueue = rand()%100; - //check if we have the collateral sized inputs - if(!pwalletMain->HasCollateralInputs()) return !pwalletMain->HasCollateralInputs(false) && MakeCollateralAmounts(); + sessionTotalValue = pwalletMain->GetTotalValue(vCoins); - std::vector vOut; + //randomize the amounts we mix + if(sessionTotalValue > nBalanceNeedsAnonymized) sessionTotalValue = nBalanceNeedsAnonymized; - // initial phase, find a Masternode - if(!sessionFoundMasternode){ - // Clean if there is anything left from previous session - UnlockCoins(); - SetNull(); - int nUseQueue = rand()%100; - UpdateState(POOL_STATUS_ACCEPTING_ENTRIES); + double fPepeCoinSubmitted = (sessionTotalValue / CENT); + LogPrintf("Submitting Darksend for %f DRK CENT - sessionTotalValue %d\n", fPepeCoinSubmitted, sessionTotalValue); if(pwalletMain->GetDenominatedBalance(true) > 0){ //get denominated unconfirmed inputs LogPrintf("DoAutomaticDenominating -- Found unconfirmed denominated outputs, will wait till they confirm to continue.\n"); @@ -1513,31 +1475,6 @@ bool CDarksendPool::DoAutomaticDenominating(bool fDryRun) return false; } - //check our collateral - std::string strReason; - if(txCollateral == CTransaction()){ - if(!pwalletMain->CreateCollateralTransaction(txCollateral, strReason)){ - LogPrintf("% -- create collateral error:%s\n", __func__, strReason); - return false; - } - } else { - if(!IsCollateralValid(txCollateral)) { - LogPrintf("%s -- invalid collateral, recreating...\n", __func__); - if(!pwalletMain->CreateCollateralTransaction(txCollateral, strReason)){ - LogPrintf("%s -- create collateral error: %s\n", __func__, strReason); - return false; - } - } - } - - //if we've used 90% of the Masternode list then drop all the oldest first - int nThreshold = (int)(mnodeman.CountEnabled(MIN_POOL_PEER_PROTO_VERSION) * 0.9); - LogPrint("darksend", "Checking vecMasternodesUsed size %d threshold %d\n", (int)vecMasternodesUsed.size(), nThreshold); - while((int)vecMasternodesUsed.size() > nThreshold){ - vecMasternodesUsed.erase(vecMasternodesUsed.begin()); - LogPrint("darksend", " vecMasternodesUsed size %d threshold %d\n", (int)vecMasternodesUsed.size(), nThreshold); - } - //don't use the queues all of the time for mixing if(nUseQueue > 33){ @@ -1551,136 +1488,146 @@ bool CDarksendPool::DoAutomaticDenominating(bool fDryRun) int protocolVersion; if(!dsq.GetProtocolVersion(protocolVersion)) continue; - if(protocolVersion < MIN_POOL_PEER_PROTO_VERSION) continue; + if(protocolVersion < MIN_PEER_PROTO_VERSION) continue; //non-denom's are incompatible - if((dsq.nDenom & (1 << 5))) continue; + if((dsq.nDenom & (1 << 4))) continue; - bool fUsed = false; - //don't reuse Masternodes + //don't reuse masternodes BOOST_FOREACH(CTxIn usedVin, vecMasternodesUsed){ if(dsq.vin == usedVin) { - fUsed = true; - break; + continue; } } - if(fUsed) continue; - std::vector vTempCoins; - std::vector vTempCoins2; + // Try to match their denominations if possible - if (!pwalletMain->SelectCoinsByDenominations(dsq.nDenom, nValueMin, nBalanceNeedsAnonymized, vTempCoins, vTempCoins2, nValueIn, 0, nDarksendRounds)){ + if (!pwalletMain->SelectCoinsByDenominations(dsq.nDenom, nValueMin, nBalanceNeedsAnonymized, vCoins, vCoins2, nValueIn, 0, nDarksendRounds)){ LogPrintf("DoAutomaticDenominating - Couldn't match denominations %d\n", dsq.nDenom); continue; } - // connect to Masternode and submit the queue request - CNode* pnode = ConnectNode((CAddress)addr, NULL, true); - if(pnode != NULL) - { - CMasternode* pmn = mnodeman.Find(dsq.vin); - if(pmn == NULL) + // connect to masternode and submit the queue request + if(ConnectNode((CAddress)addr, NULL, true)){ + submittedToMasternode = addr; + + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) { + if((CNetAddr)pnode->addr != (CNetAddr)submittedToMasternode) continue; + + std::string strReason; + if(txCollateral == CTransaction()){ + if(!pwalletMain->CreateCollateralTransaction(txCollateral, strReason)){ + LogPrintf("DoAutomaticDenominating -- dsa error:%s\n", strReason.c_str()); + return false; + } + } - LogPrintf("DoAutomaticDenominating --- dsq vin %s is not in Masternode list!", dsq.vin.ToString()); - continue; - } - pSubmittedToMasternode = pmn; - vecMasternodesUsed.push_back(dsq.vin); - sessionDenom = dsq.nDenom; + vecMasternodesUsed.push_back(dsq.vin); + sessionDenom = dsq.nDenom; - pnode->PushMessage("dsa", sessionDenom, txCollateral); - LogPrintf("DoAutomaticDenominating --- connected (from queue), sending dsa for %d - %s\n", sessionDenom, pnode->addr.ToString()); - strAutoDenomResult = _("Mixing in progress..."); - dsq.time = 0; //remove node - return true; + pnode->PushMessage("dsa", sessionDenom, txCollateral); + LogPrintf("DoAutomaticDenominating --- connected (from queue), sending dsa for %d %d - %s\n", sessionDenom, GetDenominationsByAmount(sessionTotalValue), pnode->addr.ToString().c_str()); + strAutoDenomResult = ""; + return true; + } } else { LogPrintf("DoAutomaticDenominating --- error connecting \n"); - strAutoDenomResult = _("Error connecting to Masternode."); - dsq.time = 0; //remove node - continue; + strAutoDenomResult = _("Error connecting to masternode."); + return DoAutomaticDenominating(); } + + dsq.time = 0; //remove node } } - // do not initiate queue if we are a liquidity proveder to avoid useless inter-mixing - if(nLiquidityProvider) return false; - + //shuffle masternodes around before we try to connect + std::random_shuffle ( vecMasternodes.begin(), vecMasternodes.end() ); int i = 0; // otherwise, try one randomly while(i < 10) { - CMasternode* pmn = mnodeman.FindRandomNotInVec(vecMasternodesUsed, MIN_POOL_PEER_PROTO_VERSION); - if(pmn == NULL) - { - LogPrintf("DoAutomaticDenominating --- Can't find random masternode!\n"); - strAutoDenomResult = _("Can't find random Masternode."); - return false; + //don't reuse masternodes + BOOST_FOREACH(CTxIn usedVin, vecMasternodesUsed) { + if(vecMasternodes[i].vin == usedVin){ + i++; + continue; + } + } + if(vecMasternodes[i].protocolVersion < MIN_PEER_PROTO_VERSION) { + i++; + continue; } - if(pmn->nLastDsq != 0 && - pmn->nLastDsq + mnodeman.CountEnabled(MIN_POOL_PEER_PROTO_VERSION)/5 > mnodeman.nDsqCount){ + if(vecMasternodes[i].nLastDsq != 0 && + vecMasternodes[i].nLastDsq + CountMasternodesAboveProtocol(darkSendPool.MIN_PEER_PROTO_VERSION)/5 > darkSendPool.nDsqCount){ i++; continue; } lastTimeChanged = GetTimeMillis(); - LogPrintf("DoAutomaticDenominating -- attempt %d connection to Masternode %s\n", i, pmn->addr.ToString().c_str()); - CNode* pnode = ConnectNode((CAddress)pmn->addr, NULL, true); - if(pnode != NULL){ - pSubmittedToMasternode = pmn; - vecMasternodesUsed.push_back(pmn->vin); - - std::vector vecAmounts; - pwalletMain->ConvertList(vCoins, vecAmounts); - // try to get a single random denom out of vecAmounts - while(sessionDenom == 0) - sessionDenom = GetDenominationsByAmounts(vecAmounts); + LogPrintf("DoAutomaticDenominating -- attempt %d connection to masternode %s\n", i, vecMasternodes[i].addr.ToString().c_str()); + if(ConnectNode((CAddress)vecMasternodes[i].addr, NULL, true)){ + submittedToMasternode = vecMasternodes[i].addr; - pnode->PushMessage("dsa", sessionDenom, txCollateral); - LogPrintf("DoAutomaticDenominating --- connected, sending dsa for %d\n", sessionDenom); - strAutoDenomResult = _("Mixing in progress..."); - return true; + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + if((CNetAddr)pnode->addr != (CNetAddr)vecMasternodes[i].addr) continue; + + std::string strReason; + if(txCollateral == CTransaction()){ + if(!pwalletMain->CreateCollateralTransaction(txCollateral, strReason)){ + LogPrintf("DoAutomaticDenominating -- create collateral error:%s\n", strReason.c_str()); + return false; + } + } + vecMasternodesUsed.push_back(vecMasternodes[i].vin); + + std::vector vecAmounts; + pwalletMain->ConvertList(vCoins, vecAmounts); + sessionDenom = GetDenominationsByAmounts(vecAmounts); + + pnode->PushMessage("dsa", sessionDenom, txCollateral); + LogPrintf("DoAutomaticDenominating --- connected, sending dsa for %d - denom %d\n", sessionDenom, GetDenominationsByAmount(sessionTotalValue)); + strAutoDenomResult = ""; + return true; + } } else { - vecMasternodesUsed.push_back(pmn->vin); // postpone MN we wasn't able to connect to i++; continue; } } - strAutoDenomResult = _("No compatible Masternode found."); + strAutoDenomResult = _("No compatible masternode found."); return false; } - strAutoDenomResult = _("Mixing in progress..."); + strAutoDenomResult = ""; + if(!ready) return true; + + if(sessionDenom == 0) return true; return false; } -bool CDarksendPool::PrepareDarksendDenominate() +bool CDarkSendPool::PrepareDarksendDenominate() { - std::string strError = ""; - // Submit transaction to the pool if we get here - // Try to use only inputs with the same number of rounds starting from lowest number of rounds possible - for(int i = 0; i < nDarksendRounds; i++) { - strError = pwalletMain->PrepareDarksendDenominate(i, i+1); - LogPrintf("DoAutomaticDenominating : Running darksend denominate for %d rounds. Return '%s'\n", i, strError); - if(strError == "") return true; - } + // Submit transaction to the pool if we get here, use sessionDenom so we use the same amount of money + std::string strError = pwalletMain->PrepareDarksendDenominate(0, nDarksendRounds); + LogPrintf("DoAutomaticDenominating : Running darksend denominate. Return '%s'\n", strError.c_str()); - strError = pwalletMain->PrepareDarksendDenominate(0, nDarksendRounds); - LogPrintf("DoAutomaticDenominating : Running Darksend denominate for all rounds. Return '%s'\n", strError); if(strError == "") return true; - // Should never actually get here but just in case strAutoDenomResult = strError; - LogPrintf("DoAutomaticDenominating : Error running denominate, %s\n", strError); + LogPrintf("DoAutomaticDenominating : Error running denominate, %s\n", strError.c_str()); return false; } -bool CDarksendPool::SendRandomPaymentToSelf() +bool CDarkSendPool::SendRandomPaymentToSelf() { int64_t nBalance = pwalletMain->GetBalance(); int64_t nPayment = (nBalance*0.35) + (rand() % nBalance); @@ -1693,7 +1640,7 @@ bool CDarksendPool::SendRandomPaymentToSelf() CScript scriptChange; CPubKey vchPubKey; assert(reservekey.GetReservedKey(vchPubKey)); // should never fail, as we just unlocked - scriptChange = GetScriptForDestination(vchPubKey.GetID()); + scriptChange= GetScriptForDestination(vchPubKey.GetID()); CWalletTx wtx; int64_t nFeeRet = 0; @@ -1707,95 +1654,84 @@ bool CDarksendPool::SendRandomPaymentToSelf() int32_t nChangePos; bool success = pwalletMain->CreateTransaction(vecSend, wtx, reservekey, nFeeRet, nChangePos, strFail, coinControl, ONLY_DENOMINATED); if(!success){ - LogPrintf("SendRandomPaymentToSelf: Error - %s\n", strFail); + LogPrintf("SendRandomPaymentToSelf: Error - %s\n", strFail.c_str()); return false; } pwalletMain->CommitTransaction(wtx, reservekey); - LogPrintf("SendRandomPaymentToSelf Success: tx %s\n", wtx.GetHash().GetHex()); + LogPrintf("SendRandomPaymentToSelf Success: tx %s\n", wtx.GetHash().GetHex().c_str()); return true; } // Split up large inputs or create fee sized inputs -bool CDarksendPool::MakeCollateralAmounts() +bool CDarkSendPool::MakeCollateralAmounts() { + // make our change address + CReserveKey reservekey(pwalletMain); + + CScript scriptChange; + CPubKey vchPubKey; + assert(reservekey.GetReservedKey(vchPubKey)); // should never fail, as we just unlocked + scriptChange= GetScriptForDestination(vchPubKey.GetID()); + CWalletTx wtx; int64_t nFeeRet = 0; std::string strFail = ""; vector< pair > vecSend; - CCoinControl *coinControl = NULL; - - // make our collateral address - CReserveKey reservekeyCollateral(pwalletMain); - // make our change address - CReserveKey reservekeyChange(pwalletMain); - - CScript scriptCollateral; - CPubKey vchPubKey; - assert(reservekeyCollateral.GetReservedKey(vchPubKey)); // should never fail, as we just unlocked - scriptCollateral = GetScriptForDestination(vchPubKey.GetID()); - vecSend.push_back(make_pair(scriptCollateral, DARKSEND_COLLATERAL*4)); + vecSend.push_back(make_pair(scriptChange, (DARKSEND_COLLATERAL*2)+DARKSEND_FEE)); + vecSend.push_back(make_pair(scriptChange, (DARKSEND_COLLATERAL*2)+DARKSEND_FEE)); + CCoinControl *coinControl=NULL; int32_t nChangePos; // try to use non-denominated and not mn-like funds - bool success = pwalletMain->CreateTransaction(vecSend, wtx, reservekeyChange, - nFeeRet, nChangePos, strFail, coinControl, ONLY_NONDENOMINATED_NOT10000IFMN); + bool success = pwalletMain->CreateTransaction(vecSend, wtx, reservekey, + nFeeRet, nChangePos, strFail, coinControl, ONLY_NONDENOMINATED_NOTMN); if(!success){ // if we failed (most likeky not enough funds), try to use denominated instead - // MN-like funds should not be touched in any case and we can't mix denominated without collaterals anyway - LogPrintf("MakeCollateralAmounts: ONLY_NONDENOMINATED_NOT1000IFMN Error - %s\n", strFail); - success = pwalletMain->CreateTransaction(vecSend, wtx, reservekeyChange, - nFeeRet, nChangePos, strFail, coinControl, ONLY_NOT10000IFMN); + success = pwalletMain->CreateTransaction(vecSend, wtx, reservekey, + nFeeRet, nChangePos, strFail, coinControl, ONLY_DENOMINATED); if(!success){ - LogPrintf("MakeCollateralAmounts: ONLY_NOT1000IFMN Error - %s\n", strFail); - reservekeyCollateral.ReturnKey(); + LogPrintf("MakeCollateralAmounts: Error - %s\n", strFail.c_str()); return false; } } - reservekeyCollateral.KeepKey(); - - LogPrintf("MakeCollateralAmounts: tx %s\n", wtx.GetHash().GetHex()); - // use the same cachedLastSuccess as for DS mixinx to prevent race - if(!pwalletMain->CommitTransaction(wtx, reservekeyChange)) { - LogPrintf("MakeCollateralAmounts: CommitTransaction failed!\n"); - return false; - } + if(pwalletMain->CommitTransaction(wtx, reservekey)) + cachedLastSuccess = pindexBest->nHeight; - cachedLastSuccess = pindexBest->nHeight; + LogPrintf("MakeCollateralAmounts Success: tx %s\n", wtx.GetHash().GetHex().c_str()); return true; } // Create denominations -bool CDarksendPool::CreateDenominated(int64_t nTotalValue) +bool CDarkSendPool::CreateDenominated(int64_t nTotalValue) { + // make our change address + CReserveKey reservekey(pwalletMain); + + CScript scriptChange; + CPubKey vchPubKey; + assert(reservekey.GetReservedKey(vchPubKey)); // should never fail, as we just unlocked + scriptChange= GetScriptForDestination(vchPubKey.GetID()); + CWalletTx wtx; int64_t nFeeRet = 0; std::string strFail = ""; vector< pair > vecSend; int64_t nValueLeft = nTotalValue; - // make our collateral address - CReserveKey reservekeyCollateral(pwalletMain); - // make our change address - CReserveKey reservekeyChange(pwalletMain); - // make our denom addresses - CReserveKey reservekeyDenom(pwalletMain); - - CScript scriptCollateral; - CPubKey vchPubKey; - assert(reservekeyCollateral.GetReservedKey(vchPubKey)); // should never fail, as we just unlocked - scriptCollateral = GetScriptForDestination(vchPubKey.GetID()); - // ****** Add collateral outputs ************ / if(!pwalletMain->HasCollateralInputs()) { - vecSend.push_back(make_pair(scriptCollateral, DARKSEND_COLLATERAL*4)); - nValueLeft -= DARKSEND_COLLATERAL*4; + vecSend.push_back(make_pair(scriptChange, (DARKSEND_COLLATERAL*2)+DARKSEND_FEE)); + nValueLeft -= (DARKSEND_COLLATERAL*2)+DARKSEND_FEE; + vecSend.push_back(make_pair(scriptChange, (DARKSEND_COLLATERAL*2)+DARKSEND_FEE)); + nValueLeft -= (DARKSEND_COLLATERAL*2)+DARKSEND_FEE; } // ****** Add denoms ************ / @@ -1803,16 +1739,15 @@ bool CDarksendPool::CreateDenominated(int64_t nTotalValue) int nOutputs = 0; // add each output up to 10 times until it can't be added again - while(nValueLeft - v >= DARKSEND_COLLATERAL && nOutputs <= 10) { - CScript scriptDenom; + while(nValueLeft - v >= DARKSEND_FEE && nOutputs <= 10) { + CScript scriptChange; CPubKey vchPubKey; //use a unique change address - assert(reservekeyDenom.GetReservedKey(vchPubKey)); // should never fail, as we just unlocked - scriptDenom = GetScriptForDestination(vchPubKey.GetID()); - // TODO: do not keep reservekeyDenom here - reservekeyDenom.KeepKey(); + assert(reservekey.GetReservedKey(vchPubKey)); // should never fail, as we just unlocked + scriptChange= GetScriptForDestination(vchPubKey.GetID()); + reservekey.KeepKey(); - vecSend.push_back(make_pair(scriptDenom, v)); + vecSend.push_back(make_pair(scriptChange, v)); //increment outputs and subtract denomination amount nOutputs++; @@ -1828,41 +1763,32 @@ bool CDarksendPool::CreateDenominated(int64_t nTotalValue) CCoinControl *coinControl=NULL; int32_t nChangePos; - bool success = pwalletMain->CreateTransaction(vecSend, wtx, reservekeyChange, - nFeeRet, nChangePos, strFail, coinControl, ONLY_NONDENOMINATED_NOT10000IFMN); + bool success = pwalletMain->CreateTransaction(vecSend, wtx, reservekey, + nFeeRet, nChangePos, strFail, coinControl, ONLY_NONDENOMINATED_NOTMN); if(!success){ - LogPrintf("CreateDenominated: Error - %s\n", strFail); - // TODO: return reservekeyDenom here - reservekeyCollateral.ReturnKey(); + LogPrintf("CreateDenominated: Error - %s\n", strFail.c_str()); return false; } - // TODO: keep reservekeyDenom here - reservekeyCollateral.KeepKey(); - // use the same cachedLastSuccess as for DS mixinx to prevent race - if(pwalletMain->CommitTransaction(wtx, reservekeyChange)) + if(pwalletMain->CommitTransaction(wtx, reservekey)) cachedLastSuccess = pindexBest->nHeight; - else - LogPrintf("CreateDenominated: CommitTransaction failed!\n"); - LogPrintf("CreateDenominated: tx %s\n", wtx.GetHash().GetHex()); + LogPrintf("CreateDenominated Success: tx %s\n", wtx.GetHash().GetHex().c_str()); return true; } -bool CDarksendPool::IsCompatibleWithEntries(std::vector& vout) +bool CDarkSendPool::IsCompatibleWithEntries(std::vector vout) { - if(GetDenominations(vout) == 0) return false; - BOOST_FOREACH(const CDarkSendEntry v, entries) { LogPrintf(" IsCompatibleWithEntries %d %d\n", GetDenominations(vout), GetDenominations(v.vout)); /* BOOST_FOREACH(CTxOut o1, vout) - LogPrintf(" vout 1 - %s\n", o1.ToString()); + LogPrintf(" vout 1 - %s\n", o1.ToString().c_str()); BOOST_FOREACH(CTxOut o2, v.vout) - LogPrintf(" vout 2 - %s\n", o2.ToString()); + LogPrintf(" vout 2 - %s\n", o2.ToString().c_str()); */ if(GetDenominations(vout) != GetDenominations(v.vout)) return false; } @@ -1870,14 +1796,12 @@ bool CDarksendPool::IsCompatibleWithEntries(std::vector& vout) return true; } -bool CDarksendPool::IsCompatibleWithSession(int64_t nDenom, CTransaction txCollateral, std::string& strReason) +bool CDarkSendPool::IsCompatibleWithSession(int64_t nDenom, CTransaction txCollateral, std::string& strReason) { - if(nDenom == 0) return false; - LogPrintf("CDarkSendPool::IsCompatibleWithSession - sessionDenom %d sessionUsers %d\n", sessionDenom, sessionUsers); if (!unitTest && !IsCollateralValid(txCollateral)){ - LogPrint("darksend", "CDarksendPool::IsCompatibleWithSession - collateral not valid!\n"); + if(fDebug) LogPrintf ("CDarkSendPool::IsCompatibleWithSession - collateral not valid!\n"); strReason = _("Collateral not valid."); return false; } @@ -1885,13 +1809,13 @@ bool CDarksendPool::IsCompatibleWithSession(int64_t nDenom, CTransaction txColla if(sessionUsers < 0) sessionUsers = 0; if(sessionUsers == 0) { - sessionID = 1 + (rand() % 999999); sessionDenom = nDenom; sessionUsers++; lastTimeChanged = GetTimeMillis(); + entries.clear(); if(!unitTest){ - //broadcast that I'm accepting entries, only if it's the first entry through + //broadcast that I'm accepting entries, only if it's the first entry though CDarksendQueue dsq; dsq.nDenom = nDenom; dsq.vin = activeMasternode.vin; @@ -1908,7 +1832,7 @@ bool CDarksendPool::IsCompatibleWithSession(int64_t nDenom, CTransaction txColla if((state != POOL_STATUS_ACCEPTING_ENTRIES && state != POOL_STATUS_QUEUE) || sessionUsers >= GetMaxPoolTransactions()){ if((state != POOL_STATUS_ACCEPTING_ENTRIES && state != POOL_STATUS_QUEUE)) strReason = _("Incompatible mode."); if(sessionUsers >= GetMaxPoolTransactions()) strReason = _("Masternode queue is full."); - LogPrintf("CDarksendPool::IsCompatibleWithSession - incompatible mode, return false %d %d\n", state != POOL_STATUS_ACCEPTING_ENTRIES, sessionUsers >= GetMaxPoolTransactions()); + LogPrintf("CDarkSendPool::IsCompatibleWithSession - incompatible mode, return false %d %d\n", state != POOL_STATUS_ACCEPTING_ENTRIES, sessionUsers >= GetMaxPoolTransactions()); return false; } @@ -1917,7 +1841,7 @@ bool CDarksendPool::IsCompatibleWithSession(int64_t nDenom, CTransaction txColla return false; } - LogPrintf("CDarksendPool::IsCompatibleWithSession - compatible\n"); + LogPrintf("CDarkSendPool::IsCompatibleWithSession - compatible\n"); sessionUsers++; lastTimeChanged = GetTimeMillis(); @@ -1927,55 +1851,41 @@ bool CDarksendPool::IsCompatibleWithSession(int64_t nDenom, CTransaction txColla } //create a nice string to show the denominations -void CDarksendPool::GetDenominationsToString(int nDenom, std::string& strDenom){ +void CDarkSendPool::GetDenominationsToString(int nDenom, std::string& strDenom){ // Function returns as follows: // - // bit 0 - 100TX+1 ( bit on if present ) - // bit 1 - 10TX+1 - // bit 2 - 1TX+1 x_x - // bit 3 - .1TX+1 + // bit 0 - 100DRK+1 ( bit on if present ) + // bit 1 - 10DRK+1 + // bit 2 - 1DRK+1 + // bit 3 - .1DRK+1 // bit 3 - non-denom strDenom = ""; if(nDenom & (1 << 0)) { - if(strDenom.size() > 0) strDenom += "+"; - strDenom += "1000"; - } - - if(nDenom & (1 << 1)) { if(strDenom.size() > 0) strDenom += "+"; strDenom += "100"; } - if(nDenom & (1 << 2)) { + if(nDenom & (1 << 1)) { if(strDenom.size() > 0) strDenom += "+"; strDenom += "10"; } - if(nDenom & (1 << 3)) { + if(nDenom & (1 << 2)) { if(strDenom.size() > 0) strDenom += "+"; strDenom += "1"; } - if(nDenom & (1 << 4)) { + if(nDenom & (1 << 3)) { if(strDenom.size() > 0) strDenom += "+"; strDenom += "0.1"; } } -int CDarksendPool::GetDenominations(const std::vector& vout){ - std::vector vout2; - - BOOST_FOREACH(CTxDSOut out, vout) - vout2.push_back(out); - - return GetDenominations(vout2); -} - // return a bitshifted integer representing the denominations in this list -int CDarksendPool::GetDenominations(const std::vector& vout, bool fSingleRandomDenom){ +int CDarkSendPool::GetDenominations(const std::vector& vout){ std::vector > denomUsed; // make a list of denominations, with zero uses @@ -1998,38 +1908,37 @@ int CDarksendPool::GetDenominations(const std::vector& vout, bool fSingl int c = 0; // if the denomination is used, shift the bit on. // then move to the next - BOOST_FOREACH (PAIRTYPE(int64_t, int)& s, denomUsed){ - int bit = (fSingleRandomDenom ? rand()%2 : 1) * s.second; - denom |= bit << c++; - if(fSingleRandomDenom && bit) break; // use just one random denomination - } + BOOST_FOREACH (PAIRTYPE(int64_t, int)& s, denomUsed) + denom |= s.second << c++; // Function returns as follows: // - // bit 0 - 100TX+1 ( bit on if present ) - // bit 1 - 10TX+1 - // bit 2 - 1TX+1 - // bit 3 - .1TX+1 + // bit 0 - 100DRK+1 ( bit on if present ) + // bit 1 - 10DRK+1 + // bit 2 - 1DRK+1 + // bit 3 - .1DRK+1 return denom; } -int CDarksendPool::GetDenominationsByAmounts(std::vector& vecAmount){ +int CDarkSendPool::GetDenominationsByAmounts(std::vector& vecAmount){ CScript e = CScript(); std::vector vout1; // Make outputs by looping through denominations, from small to large BOOST_REVERSE_FOREACH(int64_t v, vecAmount){ + int nOutputs = 0; CTxOut o(v, e); vout1.push_back(o); + nOutputs++; } - return GetDenominations(vout1, true); + return GetDenominations(vout1); } -int CDarksendPool::GetDenominationsByAmount(int64_t nAmount, int nDenomTarget){ +int CDarkSendPool::GetDenominationsByAmount(int64_t nAmount, int nDenomTarget){ CScript e = CScript(); int64_t nValueLeft = nAmount; @@ -2039,11 +1948,13 @@ int CDarksendPool::GetDenominationsByAmount(int64_t nAmount, int nDenomTarget){ BOOST_REVERSE_FOREACH(int64_t v, darkSendDenominations){ if(nDenomTarget != 0){ bool fAccepted = false; - if((nDenomTarget & (1 << 0)) && v == ((1000*COIN) +1000000)) {fAccepted = true;} - else if((nDenomTarget & (1 << 1)) && v == ((100*COIN) +100000)) {fAccepted = true;} - else if((nDenomTarget & (1 << 2)) && v == ((10*COIN) +10000)) {fAccepted = true;} - else if((nDenomTarget & (1 << 3)) && v == ((1*COIN) +1000)) {fAccepted = true;} - else if((nDenomTarget & (1 << 4)) && v == ((.1*COIN) +100)) {fAccepted = true;} + if((nDenomTarget & (1 << 0)) && v == ((100000*COIN)+100000000)) {fAccepted = true;} + else if((nDenomTarget & (1 << 1)) && v == ((10000*COIN) +10000000)) {fAccepted = true;} + else if((nDenomTarget & (1 << 2)) && v == ((1000*COIN) +1000000)) {fAccepted = true;} + else if((nDenomTarget & (1 << 3)) && v == ((100*COIN) +100000)) {fAccepted = true;} + else if((nDenomTarget & (1 << 4)) && v == ((10*COIN) +10000)) {fAccepted = true;} + else if((nDenomTarget & (1 << 5)) && v == ((1*COIN) +1000)) {fAccepted = true;} + else if((nDenomTarget & (1 << 6)) && v == ((.1*COIN) +100)) {fAccepted = true;} if(!fAccepted) continue; } @@ -2059,48 +1970,25 @@ int CDarksendPool::GetDenominationsByAmount(int64_t nAmount, int nDenomTarget){ LogPrintf("GetDenominationsByAmount --- %d nOutputs %d\n", v, nOutputs); } - return GetDenominations(vout1); -} - -std::string CDarksendPool::GetMessageByID(int messageID) { - switch (messageID) { - case ERR_ALREADY_HAVE: return _("Already have that input."); - case ERR_DENOM: return _("No matching denominations found for mixing."); - case ERR_ENTRIES_FULL: return _("Entries are full."); - case ERR_EXISTING_TX: return _("Not compatible with existing transactions."); - case ERR_FEES: return _("Transaction fees are too high."); - case ERR_INVALID_COLLATERAL: return _("Collateral not valid."); - case ERR_INVALID_INPUT: return _("Input is not valid."); - case ERR_INVALID_SCRIPT: return _("Invalid script detected."); - case ERR_INVALID_TX: return _("Transaction not valid."); - case ERR_MAXIMUM: return _("Value more than Darksend pool maximum allows."); - case ERR_MN_LIST: return _("Not in the Masternode list."); - case ERR_MODE: return _("Incompatible mode."); - case ERR_NON_STANDARD_PUBKEY: return _("Non-standard public key detected."); - case ERR_NOT_A_MN: return _("This is not a Masternode."); - case ERR_QUEUE_FULL: return _("Masternode queue is full."); - case ERR_RECENT: return _("Last Darksend was too recent."); - case ERR_SESSION: return _("Session not complete!"); - case ERR_MISSING_TX: return _("Missing input transaction information."); - case ERR_VERSION: return _("Incompatible version."); - case MSG_SUCCESS: return _("Transaction created successfully."); - case MSG_ENTRIES_ADDED: return _("Your entries added successfully."); - case MSG_NOERR: - default: - return ""; + //add non-denom left overs as change + if(nValueLeft > 0){ + CTxOut o(nValueLeft, e); + vout1.push_back(o); } + + return GetDenominations(vout1); } bool CDarkSendSigner::IsVinAssociatedWithPubkey(CTxIn& vin, CPubKey& pubkey){ CScript payee2; - payee2 = GetScriptForDestination(pubkey.GetID()); + payee2= GetScriptForDestination(pubkey.GetID()); CTransaction txVin; uint256 hash; //if(GetTransaction(vin.prevout.hash, txVin, hash, true)){ - if(GetTransaction(vin.prevout.hash, txVin, hash)){ + if(GetTransaction(vin.prevout.hash, txVin, hash, false)){ BOOST_FOREACH(CTxOut out, txVin.vout){ - if(out.nValue == GetMNCollateral(pindexBest->nHeight)*COIN){ + if(out.nValue == 15000*COIN){ if(out.scriptPubKey == payee2) return true; } } @@ -2150,8 +2038,8 @@ bool CDarkSendSigner::VerifyMessage(CPubKey pubkey, vector& vchSi return false; } - if (fDebug && (pubkey2.GetID() != pubkey.GetID())) - LogPrintf("CDarkSendSigner::VerifyMessage -- keys don't match: %s %s\n", pubkey2.GetID().ToString(), pubkey.GetID().ToString()); + if (fDebug && pubkey2.GetID() != pubkey.GetID()) + LogPrintf("CDarkSendSigner::VerifyMessage -- keys don't match: %s %s", pubkey2.GetID().ToString(), pubkey.GetID().ToString()); return (pubkey2.GetID() == pubkey.GetID()); } @@ -2168,7 +2056,7 @@ bool CDarksendQueue::Sign() if(!darkSendSigner.SetKey(strMasterNodePrivKey, errorMessage, key2, pubkey2)) { - LogPrintf("CDarksendQueue():Relay - ERROR: Invalid Masternodeprivkey: '%s'\n", errorMessage); + LogPrintf("CDarksendQueue():Relay - ERROR: Invalid masternodeprivkey: '%s'\n", errorMessage.c_str()); return false; } @@ -2199,105 +2087,179 @@ bool CDarksendQueue::Relay() bool CDarksendQueue::CheckSignature() { - CMasternode* pmn = mnodeman.Find(vin); - if(pmn != NULL) - { - std::string strMessage = vin.ToString() + boost::lexical_cast(nDenom) + boost::lexical_cast(time) + boost::lexical_cast(ready); - std::string errorMessage = ""; - if(!darkSendSigner.VerifyMessage(pmn->pubkey2, vchSig, strMessage, errorMessage)){ - return error("CDarksendQueue::CheckSignature() - Got bad Masternode address signature %s \n", vin.ToString().c_str()); - } - - return true; - } - - return false; -} - -void CDarksendPool::RelayFinalTransaction(const int sessionID, const CTransaction& txNew) -{ - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - { - pnode->PushMessage("dsf", sessionID, txNew); - } -} - -void CDarksendPool::RelayIn(const std::vector& vin, const int64_t& nAmount, const CTransaction& txCollateral, const std::vector& vout) -{ - if(!pSubmittedToMasternode) return; - - std::vector vin2; - std::vector vout2; + BOOST_FOREACH(CMasterNode& mn, vecMasternodes) { - BOOST_FOREACH(CTxDSIn in, vin) - vin2.push_back(in); + if(mn.vin == vin) { + std::string strMessage = vin.ToString() + boost::lexical_cast(nDenom) + boost::lexical_cast(time) + boost::lexical_cast(ready); - BOOST_FOREACH(CTxDSOut out, vout) - vout2.push_back(out); + std::string errorMessage = ""; + if(!darkSendSigner.VerifyMessage(mn.pubkey2, vchSig, strMessage, errorMessage)){ + return error("CDarksendQueue::CheckSignature() - Got bad masternode address signature %s \n", vin.ToString().c_str()); + } - CNode* pnode = FindNode(pSubmittedToMasternode->addr); - if(pnode != NULL) { - LogPrintf("RelayIn - found master, relaying message - %s \n", pnode->addr.ToString()); - pnode->PushMessage("dsi", vin2, nAmount, txCollateral, vout2); + return true; + } } -} -void CDarksendPool::RelayStatus(const int sessionID, const int newState, const int newEntriesCount, const int newAccepted, const std::string error) -{ - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - pnode->PushMessage("dssu", sessionID, newState, newEntriesCount, newAccepted, error); + return false; } -void CDarksendPool::RelayCompletedTransaction(const int sessionID, const bool error, const std::string errorMessage) -{ - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - pnode->PushMessage("dsc", sessionID, error, errorMessage); -} //TODO: Rename/move to core void ThreadCheckDarkSendPool() { - if(fLiteMode) return; //disable all Darksend/Masternode related functionality + if(fLiteMode) return; //disable all darksend/masternode related functionality // Make this thread recognisable as the wallet flushing thread - RenameThread("memetic-darksend"); + RenameThread("pepecoin-darksend"); unsigned int c = 0; + std::string errorMessage; while (true) { + c++; + MilliSleep(1000); + + if(IsSyncing()) + continue; + //LogPrintf("ThreadCheckDarkSendPool::check timeout\n"); + darkSendPool.CheckTimeout(); - // try to sync from all available nodes, one step at a time - //masternodeSync.Process(); + int mtTimeout = 60; + if(pindexBest->nHeight >= MASTERTOAD_LOWERTRAFFIC_FORK) + mtTimeout = 120; // every 2 minutes - if(darkSendPool.IsBlockchainSynced()) { + if(pindexBest->nHeight >= MASTERTOAD_RELOWERTRAFFIC_FORK) + mtTimeout = 150; // every 2.5 minutes + - c++; + if(c % mtTimeout == 0){ + // lock cs_msternodes then cs_main to maintain same lock order as masternodes.cpp, avoid potential deaadlock + LOCK(cs_masternodes); + { + LOCK(cs_main); + /* + cs_main is required for doing masternode.Check because something + is modifying the coins view without a mempool lock. It causes + segfaults from this code without the cs_main lock. + */ + + vector::iterator it = vecMasternodes.begin(); + //check them separately + while(it != vecMasternodes.end()){ + (*it).Check(); + ++it; + } - // check if we should activate or ping every few minutes, - // start right after sync is considered to be done - if(c % MASTERNODE_PING_SECONDS == 1) activeMasternode.ManageStatus(); + int count = vecMasternodes.size(); + int i = 0; + + { + LOCK(cs_vNodes); + BOOST_FOREACH(CMasterNode mn, vecMasternodes) { + + if(mn.addr.IsRFC1918()) continue; //local network + if(mn.IsEnabled()) { + if(fDebug) LogPrintf("Sending masternode entry - %s \n", mn.addr.ToString().c_str()); + + { + BOOST_FOREACH(CNode* pnode, vNodes) { + pnode->PushMessage("dsee", mn.vin, mn.addr, mn.sig, mn.now, mn.pubkey, mn.pubkey2, count, i, mn.lastTimeSeen, mn.protocolVersion); + } + } + } + + i++; + } + } + + //remove inactive + it = vecMasternodes.begin(); + while(it != vecMasternodes.end()){ + if((*it).enabled == 4 || (*it).enabled == 3){ + LogPrintf("Removing inactive masternode %s\n", (*it).addr.ToString().c_str()); + it = vecMasternodes.erase(it); + } else { + ++it; + } + } - if(c % 60 == 0) - { - mnodeman.CheckAndRemove(); - mnodeman.ProcessMasternodeConnections(); masternodePayments.CleanPaymentList(); CleanTransactionLocksList(); } + } + + + int mtRefresh = 5; //try to sync the masternode list and payment list every 5 seconds from at least 3 nodes + + if(pindexBest->nHeight >= MASTERTOAD_LOWERTRAFFIC_FORK) + mtRefresh = 30; // every 30 seconds instead of 5 + + if(pindexBest->nHeight >= MASTERTOAD_RELOWERTRAFFIC_FORK) + mtRefresh = 90; // every 90 seconds instead of 30 + + + if(c % mtRefresh == 0 && RequestedMasterNodeList < 3){ + bool fIsInitialDownload = IsInitialBlockDownload(); + if(!fIsInitialDownload) { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + if (pnode->nVersion >= darkSendPool.MIN_PEER_PROTO_VERSION) { + + //keep track of who we've asked for the list + if(pnode->HasFulfilledRequest("mnsync")) continue; + pnode->FulfilledRequest("mnsync"); + + LogPrintf("Successfully synced, asking for Masternode list and payment list\n"); + + pnode->PushMessage("dseg", CTxIn()); //request full mn list + pnode->PushMessage("mnget"); //sync payees + pnode->PushMessage("getsporks"); //get current network sporks + RequestedMasterNodeList++; + } + } + } + } + - //if(c % MASTERNODES_DUMP_SECONDS == 0) DumpMasternodes(); + int mtPingSeconds = MASTERNODE_PING_SECONDS; - darkSendPool.CheckTimeout(); - darkSendPool.CheckForCompleteQueue(); + if(pindexBest->nHeight >= MASTERTOAD_LOWERTRAFFIC_FORK) + mtPingSeconds = 10; // 10 seconds - if(darkSendPool.GetState() == POOL_STATUS_IDLE && c % 15 == 0){ + if(pindexBest->nHeight >= MASTERTOAD_RELOWERTRAFFIC_FORK) + mtPingSeconds = 20; // 20 seconds + + if(c % mtPingSeconds == 0){ + activeMasternode.ManageStatus(); + } + + if(c % 60 == 0){ + LOCK(cs_masternodes); + //if we've used 1/5 of the masternode list, then clear the list. + if((int)vecMasternodesUsed.size() > (int)vecMasternodes.size() / 5) + vecMasternodesUsed.clear(); + } + + //auto denom every 2.5 minutes (liquidity provides try less often) + if(c % 60*(nLiquidityProvider+1) == 0){ + if(nLiquidityProvider!=0){ + int nRand = rand() % (101+nLiquidityProvider); + //about 1/100 chance of starting over after 4 rounds. + if(nRand == 50+nLiquidityProvider && pwalletMain->GetAverageAnonymizedRounds() > 8){ + darkSendPool.SendRandomPaymentToSelf(); + int nLeftToAnon = ((pwalletMain->GetBalance() - pwalletMain->GetAnonymizedBalance())/COIN)-3; + if(nLeftToAnon > 999) nLeftToAnon = 999; + nAnonymizePepeCoinAmount = (rand() % nLeftToAnon)+3; + } else { + darkSendPool.DoAutomaticDenominating(); + } + } else { darkSendPool.DoAutomaticDenominating(); } } diff --git a/src/darksend.h b/src/darksend.h index 2b2385e6..996587b5 100644 --- a/src/darksend.h +++ b/src/darksend.h @@ -1,20 +1,17 @@ -// Copyright (c) 2014-2015 The Dash developers +// Copyright (c) 2014-2015 The Darkcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef DARKSEND_H #define DARKSEND_H -#include "core.h" +//#include "primitives/transaction.h" #include "main.h" -#include "sync.h" +#include "masternode.h" #include "activemasternode.h" -#include "masternodeman.h" -#include "masternode-payments.h" -#include "darksend-relay.h" class CTxIn; -class CDarksendPool; +class CDarkSendPool; class CDarkSendSigner; class CMasterNodeVote; class CBitcoinAddress; @@ -22,7 +19,7 @@ class CDarksendQueue; class CDarksendBroadcastTx; class CActiveMasternode; -// pool states for mixing +#define POOL_MAX_TRANSACTIONS 3 // wait for X transactions to merge and publish #define POOL_STATUS_UNKNOWN 0 // waiting for update #define POOL_STATUS_IDLE 1 // waiting for update #define POOL_STATUS_QUEUE 2 // waiting in a queue @@ -38,53 +35,34 @@ class CActiveMasternode; #define MASTERNODE_REJECTED 0 #define MASTERNODE_RESET -1 -#define DARKSEND_QUEUE_TIMEOUT 30 -#define DARKSEND_SIGNING_TIMEOUT 15 +#define DARKSEND_QUEUE_TIMEOUT 120 +#define DARKSEND_SIGNING_TIMEOUT 30 -// used for anonymous relaying of inputs/outputs/sigs -#define DARKSEND_RELAY_IN 1 -#define DARKSEND_RELAY_OUT 2 -#define DARKSEND_RELAY_SIG 3 - -extern CDarksendPool darkSendPool; +extern CDarkSendPool darkSendPool; extern CDarkSendSigner darkSendSigner; extern std::vector vecDarksendQueue; extern std::string strMasterNodePrivKey; extern map mapDarksendBroadcastTxes; extern CActiveMasternode activeMasternode; -/** Holds an Darksend input - */ -class CTxDSIn : public CTxIn -{ -public: - bool fHasSig; // flag to indicate if signed - int nSentTimes; //times we've sent this anonymously +//specific messages for the Darksend protocol +void ProcessMessageDarksend(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); + +// get the darksend chain depth for a given input +int GetInputDarksendRounds(CTxIn in, int rounds=0); - CTxDSIn(const CTxIn& in) - { - prevout = in.prevout; - scriptSig = in.scriptSig; - prevPubKey = in.prevPubKey; - nSequence = in.nSequence; - nSentTimes = 0; - fHasSig = false; - } -}; -/** Holds an Darksend output - */ -class CTxDSOut : public CTxOut +// An input in the darksend pool +class CDarkSendEntryVin { public: - int nSentTimes; //times we've sent this anonymously + bool isSigSet; + CTxIn vin; - CTxDSOut(const CTxOut& out) + CDarkSendEntryVin() { - nValue = out.nValue; - nRounds = out.nRounds; - scriptPubKey = out.scriptPubKey; - nSentTimes = 0; + isSigSet = false; + vin = CTxIn(); } }; @@ -93,12 +71,12 @@ class CDarkSendEntry { public: bool isSet; - std::vector sev; - std::vector vout; + std::vector sev; int64_t amount; CTransaction collateral; + std::vector vout; CTransaction txSupporting; - int64_t addedTime; // time in UTC milliseconds + int64_t addedTime; CDarkSendEntry() { @@ -107,17 +85,16 @@ class CDarkSendEntry amount = 0; } - /// Add entries to use for Darksend bool Add(const std::vector vinIn, int64_t amountIn, const CTransaction collateralIn, const std::vector voutIn) { if(isSet){return false;} - BOOST_FOREACH(const CTxIn& in, vinIn) - sev.push_back(in); - - BOOST_FOREACH(const CTxOut& out, voutIn) - vout.push_back(out); - + BOOST_FOREACH(const CTxIn v, vinIn) { + CDarkSendEntryVin s = CDarkSendEntryVin(); + s.vin = v; + sev.push_back(s); + } + vout = voutIn; amount = amountIn; collateral = collateralIn; isSet = true; @@ -128,12 +105,12 @@ class CDarkSendEntry bool AddSig(const CTxIn& vin) { - BOOST_FOREACH(CTxDSIn& s, sev) { - if(s.prevout == vin.prevout && s.nSequence == vin.nSequence){ - if(s.fHasSig){return false;} - s.scriptSig = vin.scriptSig; - s.prevPubKey = vin.prevPubKey; - s.fHasSig = true; + BOOST_FOREACH(CDarkSendEntryVin& s, sev) { + if(s.vin.prevout == vin.prevout && s.vin.nSequence == vin.nSequence){ + if(s.isSigSet){return false;} + s.vin.scriptSig = vin.scriptSig; + s.vin.prevPubKey = vin.prevPubKey; + s.isSigSet = true; return true; } @@ -148,10 +125,9 @@ class CDarkSendEntry } }; - -/** - * A currently inprogress Darksend merge and denomination information - */ +// +// A currently inprogress darksend merge and denomination information +// class CDarksendQueue { public: @@ -170,62 +146,53 @@ class CDarksendQueue ready = false; } - IMPLEMENT_SERIALIZE - ( + ADD_SERIALIZE_METHODS; + + template + inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion){ + unsigned int nSerSize = 0; READWRITE(nDenom); READWRITE(vin); READWRITE(time); READWRITE(ready); READWRITE(vchSig); - ) + } bool GetAddress(CService &addr) { - CMasternode* pmn = mnodeman.Find(vin); - if(pmn != NULL) - { - addr = pmn->addr; - return true; + BOOST_FOREACH(CMasterNode mn, vecMasternodes) { + if(mn.vin == vin){ + addr = mn.addr; + return true; + } } return false; } - /// Get the protocol version bool GetProtocolVersion(int &protocolVersion) { - CMasternode* pmn = mnodeman.Find(vin); - if(pmn != NULL) - { - protocolVersion = pmn->protocolVersion; - return true; + BOOST_FOREACH(CMasterNode mn, vecMasternodes) { + if(mn.vin == vin){ + protocolVersion = mn.protocolVersion; + return true; + } } return false; } - /** Sign this Darksend transaction - * \return true if all conditions are met: - * 1) we have an active Masternode, - * 2) we have a valid Masternode private key, - * 3) we signed the message successfully, and - * 4) we verified the message successfully - */ bool Sign(); - bool Relay(); - /// Is this Darksend expired? bool IsExpired() { return (GetTime() - time) > DARKSEND_QUEUE_TIMEOUT;// 120 seconds } - /// Check if we have a valid Masternode address bool CheckSignature(); }; -/** Helper class to store Darksend transaction (tx) information. - */ +// store darksend tx signature information class CDarksendBroadcastTx { public: @@ -235,51 +202,67 @@ class CDarksendBroadcastTx int64_t sigTime; }; -/** Helper object for signing and checking signatures - */ +// +// Helper object for signing and checking signatures +// class CDarkSendSigner { public: - /// Is the inputs associated with this public key? (and there is 10000 MEME - checking if valid masternode) bool IsVinAssociatedWithPubkey(CTxIn& vin, CPubKey& pubkey); - /// Set the private/public key values, returns true if successful bool SetKey(std::string strSecret, std::string& errorMessage, CKey& key, CPubKey& pubkey); - /// Sign the message, returns true if successful bool SignMessage(std::string strMessage, std::string& errorMessage, std::vector& vchSig, CKey key); - /// Verify the message, returns true if succcessful bool VerifyMessage(CPubKey pubkey, std::vector& vchSig, std::string strMessage, std::string& errorMessage); }; -/** Used to keep track of current status of Darksend pool - */ -class CDarksendPool +class CDarksendSession +{ + +}; + +// +// Used to keep track of current status of darksend pool +// +class CDarkSendPool { -private: - mutable CCriticalSection cs_darksend; +public: + static const int MIN_PEER_PROTO_VERSION = 60020; - std::vector entries; // Masternode entries - CTransaction finalTransaction; // the finalized transaction ready for signing + // clients entries + std::vector myEntries; + // masternode entries + std::vector entries; + // the finalized transaction ready for signing + CTransaction finalTransaction; - int64_t lastTimeChanged; // last time the 'state' changed, in UTC milliseconds + int64_t lastTimeChanged; + int64_t lastAutoDenomination; - unsigned int state; // should be one of the POOL_STATUS_XXX values + unsigned int state; unsigned int entriesCount; unsigned int lastEntryAccepted; unsigned int countEntriesAccepted; + // where collateral should be made out to + CScript collateralPubKey; + std::vector lockedCoins; + uint256 masterNodeBlockHash; + std::string lastMessage; + bool completedTransaction; bool unitTest; + CService submittedToMasternode; int sessionID; - + int sessionDenom; //Users must submit an denom matching this int sessionUsers; //N Users have said they'll join - bool sessionFoundMasternode; //If we've found a compatible Masternode + bool sessionFoundMasternode; //If we've found a compatible masternode + int64_t sessionTotalValue; //used for autoDenom std::vector vecSessionCollateral; int cachedLastSuccess; - + int cachedNumBlocks; //used for the overview screen int minBlockSpacing; //required blocks between mixes CTransaction txCollateral; @@ -288,75 +271,29 @@ class CDarksendPool //debugging data std::string strAutoDenomResult; -public: - enum messages { - ERR_ALREADY_HAVE, - ERR_DENOM, - ERR_ENTRIES_FULL, - ERR_EXISTING_TX, - ERR_FEES, - ERR_INVALID_COLLATERAL, - ERR_INVALID_INPUT, - ERR_INVALID_SCRIPT, - ERR_INVALID_TX, - ERR_MAXIMUM, - ERR_MN_LIST, - ERR_MODE, - ERR_NON_STANDARD_PUBKEY, - ERR_NOT_A_MN, - ERR_QUEUE_FULL, - ERR_RECENT, - ERR_SESSION, - ERR_MISSING_TX, - ERR_VERSION, - MSG_NOERR, - MSG_SUCCESS, - MSG_ENTRIES_ADDED - }; - - // where collateral should be made out to - CScript collateralPubKey; - - CMasternode* pSubmittedToMasternode; - - int sessionDenom; //Users must submit an denom matching this - - int cachedNumBlocks; //used for the overview screen + //incremented whenever a DSQ comes through + int64_t nDsqCount; - CDarksendPool() + CDarkSendPool() { - /* Darksend uses collateral addresses to trust parties entering the pool + /* DarkSend uses collateral addresses to trust parties entering the pool to behave themselves. If they don't it takes their money. */ cachedLastSuccess = 0; - cachedNumBlocks = std::numeric_limits::max(); + cachedNumBlocks = 0; unitTest = false; txCollateral = CTransaction(); - minBlockSpacing = 0; + minBlockSpacing = 1; + nDsqCount = 0; lastNewBlock = 0; SetNull(); } - /** Process a Darksend message using the Darksend protocol - * \param pfrom - * \param strCommand lower case command string; valid values are: - * Command | Description - * -------- | ----------------- - * dsa | Darksend Acceptable - * dsc | Darksend Complete - * dsf | Darksend Final tx - * dsi | Darksend vIn - * dsq | Darksend Queue - * dss | Darksend Signal Final Tx - * dssu | Darksend status update - * dssub | Darksend Subscribe To - * \param vRecv - */ - void ProcessMessageDarksend(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); - void InitCollateralAddress(){ - SetCollateralAddress(Params().DarksendPoolDummyAddress()); + std::string strAddress = ""; + strAddress = "PJJBpDg5LKJhAkqGDhG4Wuo9AUXBkz4SWY"; + SetCollateralAddress(strAddress); } void SetMinBlockSpacing(int minBlockSpacingIn){ @@ -365,13 +302,13 @@ class CDarksendPool bool SetCollateralAddress(std::string strAddress); void Reset(); - void SetNull(); + void SetNull(bool clearEverything=false); void UnlockCoins(); bool IsNull() const { - return state == POOL_STATUS_ACCEPTING_ENTRIES && entries.empty(); + return (state == POOL_STATUS_ACCEPTING_ENTRIES && entries.empty() && myEntries.empty()); } int GetState() const @@ -379,131 +316,117 @@ class CDarksendPool return state; } - std::string GetStatus(); - int GetEntriesCount() const { - return entries.size(); + if(fMasterNode){ + return entries.size(); + } else { + return entriesCount; + } } - /// Get the time the last entry was accepted (time in UTC milliseconds) int GetLastEntryAccepted() const { return lastEntryAccepted; } - /// Get the count of the accepted entries int GetCountEntriesAccepted() const { return countEntriesAccepted; } - // Set the 'state' value, with some logging and capturing when the state changed + int GetMyTransactionCount() const + { + return myEntries.size(); + } + void UpdateState(unsigned int newState) { if (fMasterNode && (newState == POOL_STATUS_ERROR || newState == POOL_STATUS_SUCCESS)){ - LogPrint("darksend", "CDarksendPool::UpdateState() - Can't set state to ERROR or SUCCESS as a Masternode. \n"); + LogPrintf("CDarkSendPool::UpdateState() - Can't set state to ERROR or SUCCESS as a masternode. \n"); return; } - LogPrintf("CDarksendPool::UpdateState() == %d | %d \n", state, newState); + LogPrintf("CDarkSendPool::UpdateState() == %d | %d \n", state, newState); if(state != newState){ lastTimeChanged = GetTimeMillis(); if(fMasterNode) { - RelayStatus(darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_RESET); + RelayDarkSendStatus(darkSendPool.sessionID, darkSendPool.GetState(), darkSendPool.GetEntriesCount(), MASTERNODE_RESET); } } state = newState; } - /// Get the maximum number of transactions for the pool int GetMaxPoolTransactions() { - return Params().PoolMaxTransactions(); + + //use the production amount + return POOL_MAX_TRANSACTIONS; } - /// Do we have enough users to take entries? + //Do we have enough users to take entries? bool IsSessionReady(){ return sessionUsers >= GetMaxPoolTransactions(); } - /// Are these outputs compatible with other client in the pool? - bool IsCompatibleWithEntries(std::vector& vout); - - /// Is this amount compatible with other client in the pool? + // Are these outputs compatible with other client in the pool? + bool IsCompatibleWithEntries(std::vector vout); + // Is this amount compatible with other client in the pool? bool IsCompatibleWithSession(int64_t nAmount, CTransaction txCollateral, std::string& strReason); - /// Passively run Darksend in the background according to the configuration in settings (only for QT) - bool DoAutomaticDenominating(bool fDryRun=false); + // Passively run Darksend in the background according to the configuration in settings (only for QT) + bool DoAutomaticDenominating(bool fDryRun=false, bool ready=false); bool PrepareDarksendDenominate(); - /// from masternode-sync.h - bool IsBlockchainSynced(); - /// Check for process in Darksend + // check for process in Darksend void Check(); - void CheckFinalTransaction(); - /// Charge fees to bad actors (Charge clients a fee if they're abusive) + // charge fees to bad actors void ChargeFees(); - /// Rarely charge fees to pay miners + // rarely charge fees to pay miners void ChargeRandomFees(); void CheckTimeout(); - void CheckForCompleteQueue(); - /// Check to make sure a signature matches an input in the pool + // check to make sure a signature matches an input in the pool bool SignatureValid(const CScript& newSig, const CTxIn& newVin); - /// If the collateral is valid given by a client + // if the collateral is valid given by a client bool IsCollateralValid(const CTransaction& txCollateral); - /// Add a clients entry to the pool + // add a clients entry to the pool bool AddEntry(const std::vector& newInput, const int64_t& nAmount, const CTransaction& txCollateral, const std::vector& newOutput, std::string& error); - /// Add signature to a vin - bool AddScriptSig(const CTxIn& newVin); - /// Check that all inputs are signed. (Are all inputs signed?) + // add signature to a vin + bool AddScriptSig(const CTxIn newVin); + // are all inputs signed? bool SignaturesComplete(); - /// As a client, send a transaction to a Masternode to start the denomination process + // as a client, send a transaction to a masternode to start the denomination process void SendDarksendDenominate(std::vector& vin, std::vector& vout, int64_t amount); - /// Get Masternode updates about the progress of Darksend + // get masternode updates about the progress of darksend bool StatusUpdate(int newState, int newEntriesCount, int newAccepted, std::string& error, int newSessionID=0); - /// As a client, check and sign the final transaction + // as a client, check and sign the final transaction bool SignFinalTransaction(CTransaction& finalTransactionNew, CNode* node); - /// Get the last valid block hash for a given modulus + // get the last valid block hash for a given modulus bool GetLastValidBlockHash(uint256& hash, int mod=1, int nBlockHeight=0); - /// Process a new block + // process a new block void NewBlock(); - void CompletedTransaction(bool error, int errorID); + void CompletedTransaction(bool error, std::string lastMessageNew); void ClearLastMessage(); - /// Used for liquidity providers + // used for liquidity providers bool SendRandomPaymentToSelf(); - - /// Split up large inputs or make fee sized inputs + // split up large inputs or make fee sized inputs bool MakeCollateralAmounts(); bool CreateDenominated(int64_t nTotalValue); - - /// Get the denominations for a list of outputs (returns a bitshifted integer) - int GetDenominations(const std::vector& vout, bool fSingleRandomDenom = false); - int GetDenominations(const std::vector& vout); - + // get the denominations for a list of outputs (returns a bitshifted integer) + int GetDenominations(const std::vector& vout); void GetDenominationsToString(int nDenom, std::string& strDenom); + // get the denominations for a specific amount of pepecoin. + int GetDenominationsByAmount(int64_t nAmount, int nDenomTarget=0); - /// Get the denominations for a specific amount of tx. - int GetDenominationsByAmount(int64_t nAmount, int nDenomTarget=0); // is not used anymore? int GetDenominationsByAmounts(std::vector& vecAmount); +}; - std::string GetMessageByID(int messageID); - - // - // Relay Darksend Messages - // - void RelayFinalTransaction(const int sessionID, const CTransaction& txNew); - void RelaySignaturesAnon(std::vector& vin); - void RelayInAnon(std::vector& vin, std::vector& vout); - void RelayIn(const std::vector& vin, const int64_t& nAmount, const CTransaction& txCollateral, const std::vector& vout); - void RelayStatus(const int sessionID, const int newState, const int newEntriesCount, const int newAccepted, const std::string error=""); - void RelayCompletedTransaction(const int sessionID, const bool error, const std::string errorMessage); -}; +void ConnectToDarkSendMasterNodeWinner(); void ThreadCheckDarkSendPool(); -#endif \ No newline at end of file +#endif diff --git a/src/doc/README b/src/doc/README index 04ace13b..09405f9b 100644 --- a/src/doc/README +++ b/src/doc/README @@ -1,4 +1,4 @@ -Memetic 0.4.4 BETA +PepeCoin 0.4.4 BETA Copyright (c) 2013 NovaCoin Developers Copyright (c) 2011-2012 PPCoin Developers @@ -11,7 +11,7 @@ cryptographic software written by Eric Young (eay@cryptsoft.com). Intro ----- -Memetic is a free open source project derived from Bitcoin, with +PepeCoin is a free open source project derived from Bitcoin, with the goal of providing a long-term energy-efficient scrypt-based crypto-currency. Built on the foundation of Bitcoin, PPCoin and NovaCoin, innovations such as proof-of-stake help further advance the field of crypto-currency. diff --git a/src/doc/assets-attribution.txt b/src/doc/assets-attribution.txt index 9b11a424..50710482 100644 --- a/src/doc/assets-attribution.txt +++ b/src/doc/assets-attribution.txt @@ -50,6 +50,6 @@ Designer: Crobbo (forum) Site: https://bitcointalk.org/index.php?topic=32273.0 License: Public domain -Memetic Logo +PepeCoin Logo Designer: Evan Zenker License: Creative Commons Attribution 4.0 International License diff --git a/src/doc/blockrewards.txt b/src/doc/blockrewards.txt index 3896b8c0..6baff2ce 100644 --- a/src/doc/blockrewards.txt +++ b/src/doc/blockrewards.txt @@ -1,51 +1,51 @@ -Memetic X11 Proof of Work Block Reward Schedule +PepeCoin X11 Proof of Work Block Reward Schedule ------------------------------------------------ ``` -Block 1 - 99 - MEME Development Fund and Checkpointing +Block 1 - 99 - PEPE Development Fund and Checkpointing * Block 100 Public Launch * -Block 100 to 900 - 1500 MEME -Block 900 to 1300 - 1200 MEME -Block 1300 to 1900 - 1050 MEME -Block 1900 to 2900 - 900 MEME -Block 2900 to 4100 - 700 MEME -Block 4100 to 6680 - 400 MEME -Block 6680 to 9260 - 500 MEME -Block 9260 to 11840 - 300 MEME -Block 11840 to 14420 - 200 MEME -Block 14420 to 17000 - 300 MEME -Block 17000 to 19580 - 100 MEME -Block 19580 to 22160 - 200 MEME -Block 22160 to 24740 - 90 MEME -Block 24740 to 27320 - 130 MEME -Block 27320 to 29900 - 80 MEME -Block 29900 to 32480 - 100 MEME -Block 32480 to 35060 - 70 MEME -Block 35060 to 37640 - 100 MEME -Block 37640 to 40220 - 60 MEME -Block 40220 to 42800 - 100 MEME -Block 42800 to 45380 - 50 MEME -Block 45380 to 47960 - 100 MEME -Block 47960 to 50540 - 40 MEME -Block 50540 to 53120 - 100 MEME -Block 53120 to 55700 - 40 MEME -Block 55700 to 58280 - 100 MEME -Block 58280 to 60860 - 40 MEME -Block 60860 to 63440 - 100 MEME -Block 63440 to 66020 - 40 MEME -Block 66020 to 68600 - 100 MEME -Block 68600 to 70000 - 40 MEME +Block 100 to 900 - 1500 PEPE +Block 900 to 1300 - 1200 PEPE +Block 1300 to 1900 - 1050 PEPE +Block 1900 to 2900 - 900 PEPE +Block 2900 to 4100 - 700 PEPE +Block 4100 to 6680 - 400 PEPE +Block 6680 to 9260 - 500 PEPE +Block 9260 to 11840 - 300 PEPE +Block 11840 to 14420 - 200 PEPE +Block 14420 to 17000 - 300 PEPE +Block 17000 to 19580 - 100 PEPE +Block 19580 to 22160 - 200 PEPE +Block 22160 to 24740 - 90 PEPE +Block 24740 to 27320 - 130 PEPE +Block 27320 to 29900 - 80 PEPE +Block 29900 to 32480 - 100 PEPE +Block 32480 to 35060 - 70 PEPE +Block 35060 to 37640 - 100 PEPE +Block 37640 to 40220 - 60 PEPE +Block 40220 to 42800 - 100 PEPE +Block 42800 to 45380 - 50 PEPE +Block 45380 to 47960 - 100 PEPE +Block 47960 to 50540 - 40 PEPE +Block 50540 to 53120 - 100 PEPE +Block 53120 to 55700 - 40 PEPE +Block 55700 to 58280 - 100 PEPE +Block 58280 to 60860 - 40 PEPE +Block 60860 to 63440 - 100 PEPE +Block 63440 to 66020 - 40 PEPE +Block 66020 to 68600 - 100 PEPE +Block 68600 to 70000 - 40 PEPE POW End Block 70,000 -Total from 1 Yr. POW: Approx 11.5m MEME +Total from 1 Yr. POW: Approx 11.5m PEPE -Development fund: 562,390 MEME +Development fund: 562,390 PEPE -Total MEME in POW & Fund: Approx 12m MEME +Total PEPE in POW & Fund: Approx 12m PEPE ``` diff --git a/src/doc/build-msw.md b/src/doc/build-msw.md index c24d3dff..f1a8770c 100644 --- a/src/doc/build-msw.md +++ b/src/doc/build-msw.md @@ -7,7 +7,7 @@ cryptographic software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. -See readme-qt.rst for instructions on building Memetic QT, the +See readme-qt.rst for instructions on building PepeCoin QT, the graphical user interface. WINDOWS BUILD NOTES @@ -47,7 +47,7 @@ Secp256k1 OpenSSL ------- -MSYS memetic: +MSYS pepecoin: un-tar sources with MSYS 'tar xfz' to avoid issue with symlinks (OpenSSL ticket 2377) change 'MAKE' env. variable from 'C:\MinGW32\bin\mingw32-make.exe' to '/c/MinGW32/bin/mingw32-make.exe' @@ -57,7 +57,7 @@ make Berkeley DB ----------- -MSYS memetic: +MSYS pepecoin: cd /c/dev/coindeps32/db-4.8.30.NC-mgw/build_unix sh ../dist/configure --enable-mingw --enable-cxx @@ -73,7 +73,7 @@ DOS prompt: Secp256k1 ----------- -MSYS memetic: +MSYS pepecoin: ./autogen.sh ./configure --enable-module-recovery --prefix /c/dev/coindeps32/Secp256k1 @@ -84,17 +84,17 @@ MiniUPnPc --------- UPnP support is optional, make with USE_UPNP= to disable it. -MSYS memetic: +MSYS pepecoin: cd /c/miniupnpc-1.6-mgw make -f Makefile.mingw mkdir miniupnpc cp *.h miniupnpc/ -Build Memeticd +Build PepeCoind ------- DOS prompt: - cd \memetic\src + cd \pepecoin\src mingw32-make -f makefile.mingw - strip memeticd.exe + strip pepecoind.exe diff --git a/src/doc/build-osx.md b/src/doc/build-osx.md index 3c146013..ebc4a900 100644 --- a/src/doc/build-osx.md +++ b/src/doc/build-osx.md @@ -7,12 +7,12 @@ software written by Eric Young (eay@cryptsoft.com) and UPnP software written by Thomas Bernard. -Mac OS X memeticd build instructions +Mac OS X pepecoind build instructions Laszlo Hanyecz Douglas Huff -See readme-qt.rst for instructions on building Memetic QT, the +See readme-qt.rst for instructions on building PepeCoin QT, the graphical user interface. Tested on 10.5 and 10.6 intel. PPC is not supported because it's big-endian. @@ -27,7 +27,7 @@ but you can get the current version from http://developer.apple.com 1. Clone the github tree to get the source code: -git clone http://gitlab.com/memetic/memetic/memetic memetic +git clone http://gitlab.com/pepecoin/pepecoin/pepecoin pepecoin 2. Download and install MacPorts from http://www.macports.org/ @@ -41,14 +41,14 @@ sudo port install boost db48 openssl miniupnpc Optionally install qrencode (and set USE_QRCODE=1): sudo port install qrencode -4. Now you should be able to build memeticd: +4. Now you should be able to build pepecoind: -cd memetic/src +cd pepecoin/src make -f makefile.osx Run: - ./memeticd --help # for a list of command-line options. + ./pepecoind --help # for a list of command-line options. Run - ./memeticd -daemon # to start the memetic daemon. + ./pepecoind -daemon # to start the pepecoin daemon. Run - ./memeticd help # When the daemon is running, to get a list of RPC commands + ./pepecoind help # When the daemon is running, to get a list of RPC commands diff --git a/src/doc/build-unix.md b/src/doc/build-unix.md index e3d654a3..8c9f36b5 100644 --- a/src/doc/build-unix.md +++ b/src/doc/build-unix.md @@ -39,7 +39,7 @@ System requirements -------------------- C++ compilers are memory-hungry. It is recommended to have at least 1 GB of -memory available when compiling Memetic Core. With 512MB of memory or less +memory available when compiling PepeCoin Core. With 512MB of memory or less compilation will take much longer due to swap thrashing. Dependency Build Instructions: Ubuntu & Debian @@ -77,7 +77,7 @@ Optional: Dependencies for the GUI: Ubuntu & Debian ----------------------------------------- -If you want to build memetic-Qt, make sure that the required packages for Qt development +If you want to build pepecoin-Qt, make sure that the required packages for Qt development are installed. Qt 5 is necessary to build the GUI. If both Qt 4 and Qt 5 are installed, Qt 5 will be used. @@ -89,7 +89,7 @@ libqrencode (optional) can be installed with: sudo apt-get install libqrencode-dev -Once these are installed, they will be found by configure and a memetic-qt executable will be +Once these are installed, they will be found by configure and a pepecoin-qt executable will be built by default. Berkeley DB @@ -97,10 +97,10 @@ Berkeley DB It is recommended to use Berkeley DB 4.8. If you have to build it yourself: ```bash -MEMETIC_ROOT=$(pwd) +PEPECOIN_ROOT=$(pwd) -# Pick some path to install BDB to, here we create a directory within the memetic directory -BDB_PREFIX="${MEMETIC_ROOT}/db4" +# Pick some path to install BDB to, here we create a directory within the pepecoin directory +BDB_PREFIX="${PEPECOIN_ROOT}/db4" mkdir -p $BDB_PREFIX # Fetch the source and verify that it is not tampered with @@ -115,8 +115,8 @@ cd db-4.8.30.NC/build_unix/ ../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX make install -# Configure Memetic Core to use our own-built instance of BDB -cd $MEMETIC_ROOT +# Configure PepeCoin Core to use our own-built instance of BDB +cd $PEPECOIN_ROOT ./autogen.sh ./configure LDFLAGS="-L${BDB_PREFIX}/lib/" CPPFLAGS="-I${BDB_PREFIX}/include/" # (other args...) ``` @@ -125,25 +125,25 @@ Notes ----- 1) You only need Berkeley DB if the wallet is enabled (see the section *Disable-Wallet mode* below). -2) The release is built with GCC and then "strip memeticd" to strip the debug +2) The release is built with GCC and then "strip pepecoind" to strip the debug symbols, which reduces the executable size by about 90%. -To Build Memeticd +To Build PepeCoind -------- With UPNP: cd src && \ make -f makefile.unix && \ - strip memeticd + strip pepecoind (Recommended) Without UPNP: cd src && \ make -f makefile.unix USE_UPNP= && \ - strip memeticd + strip pepecoind -To Build memetic-QT +To Build pepecoin-QT -------- With UPNP: @@ -175,7 +175,7 @@ If you need to build miniupnpc yourself: Security -------- -To help make your memetic installation more secure by making certain attacks impossible to +To help make your pepecoin installation more secure by making certain attacks impossible to exploit even if a vulnerability is found, you can take the following measures: * Position Independent Executable @@ -192,7 +192,7 @@ exploit even if a vulnerability is found, you can take the following measures: make -f makefile.unix ... -e PIE=1 To test that you have built PIE executable, install scanelf, part of paxutils, and use: - scanelf -e ./memetic + scanelf -e ./pepecoin The output should contain: TYPE @@ -200,13 +200,13 @@ exploit even if a vulnerability is found, you can take the following measures: * Non-executable Stack If the stack is executable then trivial stack based buffer overflow exploits are possible if - vulnerable buffers are found. By default, memetic should be built with a non-executable stack + vulnerable buffers are found. By default, pepecoin should be built with a non-executable stack but if one of the libraries it uses asks for an executable stack or someone makes a mistake and uses a compiler extension which requires an executable stack, it will silently build an executable without the non-executable stack protection. To verify that the stack is non-executable after compiling use: - scanelf -e ./memetic + scanelf -e ./pepecoin the output should contain: STK/REL/PTL diff --git a/src/doc/coding.txt b/src/doc/coding.txt index d274a9e7..1edd6d58 100644 --- a/src/doc/coding.txt +++ b/src/doc/coding.txt @@ -74,7 +74,7 @@ ThreadTopUpKeyPool : replenishes the keystore's keypool. ThreadCleanWalletPassphrase : re-locks an encrypted wallet after user has unlocked it for a period of time. -SendingDialogStartMemetic : used by pay-via-ip-address code (obsolete) +SendingDialogStartPepeCoin : used by pay-via-ip-address code (obsolete) ThreadDelayedRepaint : repaint the gui diff --git a/src/doc/readme-qt.rst b/src/doc/readme-qt.rst index be99adef..067e6932 100644 --- a/src/doc/readme-qt.rst +++ b/src/doc/readme-qt.rst @@ -1,14 +1,14 @@ -memetic-qt: Qt5 GUI for Memetic +pepecoin-qt: Qt5 GUI for PepeCoin =============================== Linux ------- -https://gitlab.com/memetic/blob/master/doc/build-unix.md +https://gitlab.com/pepecoin/blob/master/doc/build-unix.md Windows -------- -https://gitlab.com/memetic/blob/master/doc/build-msw.md +https://gitlab.com/pepecoin/blob/master/doc/build-msw.md Mac OS X -------- -https://gitlab.com/memetic/blob/master/doc/build-osx.md +https://gitlab.com/pepecoin/blob/master/doc/build-osx.md diff --git a/src/doc/tor.md b/src/doc/tor.md index 69c7b5c6..f78f8600 100644 --- a/src/doc/tor.md +++ b/src/doc/tor.md @@ -1,7 +1,7 @@ -TOR Support in Memetic +TOR Support in PepeCoin ======================= -It is possible to run Memetic as a Tor hidden service, and connect to such services. +It is possible to run PepeCoin as a Tor hidden service, and connect to such services. The following directions assume you have a Tor proxy running on port 9050. Many distributions default to having a SOCKS proxy listening on port 9050, but others may not. @@ -10,10 +10,10 @@ https://www.torproject.org/docs/faq.html.en#TBBSocksPort for how to properly configure Tor. -1. Run Memetic behind a Tor proxy +1. Run PepeCoin behind a Tor proxy --------------------------------- -The first step is running Memetic behind a Tor proxy. This will already make all +The first step is running PepeCoin behind a Tor proxy. This will already make all outgoing connections be anonimized, but more is possible. -proxy=ip:port Set the proxy server. If SOCKS5 is selected (default), this proxy @@ -34,26 +34,26 @@ outgoing connections be anonimized, but more is possible. In a typical situation, this suffices to run behind a Tor proxy: - ./memeticd -proxy=127.0.0.1:9050 + ./pepecoind -proxy=127.0.0.1:9050 -2. Run a Memetic hidden server +2. Run a PepeCoin hidden server ------------------------------ If you configure your Tor system accordingly, it is possible to make your node also reachable from the Tor network. Add these lines to your /etc/tor/torrc (or equivalent config file): - HiddenServiceDir /var/lib/tor/memetic-service/ + HiddenServiceDir /var/lib/tor/pepecoin-service/ HiddenServicePort 17170 127.0.0.1:17170 The directory can be different of course, but (both) port numbers should be equal to -your memeticd's P2P listen port (17170 by default). +your pepecoind's P2P listen port (17170 by default). -externalip=X You can tell litecoin about its publicly reachable address using this option, and this can be a .onion address. Given the above configuration, you can find your onion address in - /var/lib/tor/memetic-service/hostname. Onion addresses are given + /var/lib/tor/pepecoin-service/hostname. Onion addresses are given preference for your node to advertize itself with, for connections coming from unroutable addresses (such as 127.0.0.1, where the Tor proxy typically runs). @@ -70,18 +70,18 @@ your memeticd's P2P listen port (17170 by default). In a typical situation, where you're only reachable via Tor, this should suffice: - ./memeticd -proxy=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -listen + ./pepecoind -proxy=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -listen (obviously, replace the Onion address with your own). If you don't care too much about hiding your node, and want to be reachable on IPv4 as well, additionally specify: - ./memeticd ... -discover + ./pepecoind ... -discover and open port 17170 on your firewall (or use -upnp). If you only want to use Tor to reach onion addresses, but not use it as a proxy for normal IPv4/IPv6 communication, use: - ./memeticd -tor=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -discover + ./pepecoind -tor=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -discover diff --git a/src/hash.h b/src/hash.h index f86ab7c8..d4356d24 100644 --- a/src/hash.h +++ b/src/hash.h @@ -16,7 +16,7 @@ #include -/** A hasher class for Memetic's 256-bit hash (double SHA-256). */ +/** A hasher class for PepeCoin's 256-bit hash (double SHA-256). */ class CHash256 { private: CSHA256 sha; @@ -40,7 +40,7 @@ class CHash256 { } }; -/** A hasher class for Memetic's 160-bit hash (SHA-256 + RIPEMD-160). */ +/** A hasher class for PepeCoin's 160-bit hash (SHA-256 + RIPEMD-160). */ class CHash160 { private: CSHA256 sha; diff --git a/src/init.cpp b/src/init.cpp index 2bfb3693..2608d7eb 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -14,12 +14,7 @@ #include "util.h" #include "ui_interface.h" #include "checkpoints.h" -#include "darksend-relay.h" #include "activemasternode.h" -#include "masternode-payments.h" -#include "masternode.h" -#include "masternodeman.h" -#include "masternodeconfig.h" #include "spork.h" #include "smessage.h" @@ -109,7 +104,7 @@ void Shutdown() TRY_LOCK(cs_Shutdown, lockShutdown); if (!lockShutdown) return; - RenameThread("memetic-shutoff"); + RenameThread("pepecoin-shutoff"); mempool.AddTransactionsUpdated(1); StopRPCThreads(); SecureMsgShutdown(); @@ -120,7 +115,7 @@ void Shutdown() bitdb.Flush(false); #endif StopNode(); - DumpMasternodes(); + { LOCK(cs_main); #ifdef ENABLE_WALLET @@ -185,8 +180,9 @@ std::string HelpMessage() { string strUsage = _("Options:") + "\n"; strUsage += " -? " + _("This help message") + "\n"; - strUsage += " -conf= " + _("Specify configuration file (default: memetic.conf)") + "\n"; - strUsage += " -pid= " + _("Specify pid file (default: memeticd.pid)") + "\n"; + strUsage += " -messagewall " + _("Enable caching of pepe message wall messages. (default: false)") + "\n"; + strUsage += " -conf= " + _("Specify configuration file (default: pepecoin.conf)") + "\n"; + strUsage += " -pid= " + _("Specify pid file (default: pepecoind.pid)") + "\n"; strUsage += " -datadir= " + _("Specify data directory") + "\n"; strUsage += " -wallet= " + _("Specify wallet file (within data directory)") + "\n"; strUsage += " -dbcache= " + _("Set database cache size in megabytes (default: 25)") + "\n"; @@ -200,6 +196,9 @@ std::string HelpMessage() strUsage += " -addnode= " + _("Add a node to connect to and attempt to keep the connection open") + "\n"; strUsage += " -connect= " + _("Connect only to the specified node(s)") + "\n"; strUsage += " -seednode= " + _("Connect to a node to retrieve peer addresses, and disconnect") + "\n"; + strUsage += " -synctimeout= " + _("Specify block download timeout in seconds (default: 60)") + "\n"; + strUsage += " -syncspan= " + _("Specify last block age in minutes after which node goes into syncing mode (default: 90)") + "\n"; + strUsage += " -txrelayexpiration= " + _("Specify age in minutes after which transactions expire from the relay pool (default: 180)") + "\n"; strUsage += " -externalip= " + _("Specify your own public address") + "\n"; strUsage += " -onlynet= " + _("Only connect to nodes in network (IPv4, IPv6 or Tor)") + "\n"; strUsage += " -discover " + _("Discover own IP address (default: 1 when listening and no -externalip)") + "\n"; @@ -207,7 +206,7 @@ std::string HelpMessage() strUsage += " -listen " + _("Accept connections from outside (default: 1 if no -proxy or -connect)") + "\n"; strUsage += " -bind= " + _("Bind to given address. Use [host]:port notation for IPv6") + "\n"; strUsage += " -dnsseed " + _("Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)") + "\n"; - strUsage += " -forcednsseed " + _("Always query for peer addresses via DNS lookup (default: 0)") + "\n"; + strUsage += " -forcednsseed " + _("Always query for peer addresses via DNS lookup (default: 1)") + "\n"; strUsage += " -synctime " + _("Sync time with other nodes. Disable if time on your system is precise e.g. syncing with NTP (default: 1)") + "\n"; strUsage += " -banscore= " + _("Threshold for disconnecting misbehaving peers (default: 100)") + "\n"; strUsage += " -bantime= " + _("Number of seconds to keep misbehaving peers from reconnecting (default: 86400)") + "\n"; @@ -260,7 +259,7 @@ std::string HelpMessage() strUsage += " -alertnotify= " + _("Execute command when a relevant alert is received (%s in cmd is replaced by message)") + "\n"; strUsage += " -upgradewallet " + _("Upgrade wallet to latest format") + "\n"; strUsage += " -createwalletbackups= " + _("Number of automatic wallet backups (default: 10)") + "\n"; - strUsage += " -keypool= " + _("Set key pool size to (default: 1000) (litemode: 100)") + "\n"; + strUsage += " -keypool= " + _("Set key pool size to (default: 1000) (nomntesting (formally litemode): 100)") + "\n"; strUsage += " -rescan " + _("Rescan the block chain for missing wallet transactions") + "\n"; strUsage += " -salvagewallet " + _("Attempt to recover private keys from a corrupt wallet.dat") + "\n"; strUsage += " -checkblocks= " + _("How many blocks to check at startup (default: 500, 0 = all)") + "\n"; @@ -278,8 +277,8 @@ std::string HelpMessage() strUsage += " -rpcsslcertificatechainfile= " + _("Server certificate file (default: server.cert)") + "\n"; strUsage += " -rpcsslprivatekeyfile= " + _("Server private key (default: server.pem)") + "\n"; strUsage += " -rpcsslciphers= " + _("Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH)") + "\n"; - strUsage += " -litemode= " + _("Disable all Darksend and Stealth Messaging related functionality (0-1, default: 0)") + "\n"; -strUsage += "\n" + _("Masternode options:") + "\n"; + strUsage += " -nomntesting= " + _("Disable all Masternode, Darksend and Stealth Messaging related functionality for testing (formally litemode) (0-1, default: 0)") + "\n"; + strUsage += "\n" + _("Masternode options:") + "\n"; strUsage += " -masternode= " + _("Enable the client to act as a masternode (0-1, default: 0)") + "\n"; strUsage += " -mnconf= " + _("Specify masternode configuration file (default: masternode.conf)") + "\n"; strUsage += " -mnconflock= " + _("Lock masternodes from masternode configuration file (default: 1)") + "\n"; @@ -290,7 +289,7 @@ strUsage += "\n" + _("Masternode options:") + "\n"; strUsage += "\n" + _("Darksend options:") + "\n"; strUsage += " -enabledarksend= " + _("Enable use of automated darksend for funds stored in this wallet (0-1, default: 0)") + "\n"; strUsage += " -darksendrounds= " + _("Use N separate masternodes to anonymize funds (2-8, default: 2)") + "\n"; - strUsage += " -anonymizetransferamount= " + _("Keep N Memetic anonymized (default: 0)") + "\n"; + strUsage += " -anonymizetransferamount= " + _("Keep N PepeCoin anonymized (default: 0)") + "\n"; strUsage += " -liquidityprovider= " + _("Provide liquidity to Darksend by infrequently mixing coins on a continual basis (0-100, default: 0, 1=very frequent, high fees, 100=very infrequent, low fees)") + "\n"; strUsage += "\n" + _("InstantX options:") + "\n"; @@ -300,6 +299,17 @@ strUsage += "\n" + _("Masternode options:") + "\n"; " -nosmsg " + _("Disable secure messaging.") + "\n" + " -debugsmsg " + _("Log extra debug messages.") + "\n" + " -smsgscanchain " + _("Scan the block chain for public key addresses on startup.") + "\n"; + strUsage += "\n" + _("Additional PepeCoin options:") + "\n"; + strUsage += _(" Staking Options:") + "\n"; + strUsage += " -blockthrottle= " + _("Milliseconds to wait after finding a stake block before broadcasting (default: 5000)") + "\n"; + strUsage += " -minersleep= " + _("Milliseconds to wait after trying a stake input computation, unlisted option from Blackcoin (default: 500)") + "\n"; + strUsage += _(" Multicore Message Handling:") + "\n"; + strUsage += " -messagecorelimit= " + _("Limit number of cores to use for message handling threads, the default is more than most systems to allow use of all cores by default (default: 64)") + "\n"; + strUsage += _(" LevelDb Options:") + "\n"; + strUsage += " -leveldbbloomfilter= " + _("Bits to use in bloom filter (default: 32)") + "\n"; + strUsage += " -writecache= " + _("Write cache in MB, improve performance/disk io but higher values can result in longer recovery time after a crash. (Default: 16)") + "\n"; + strUsage += " -leveldbmaxopenfiles= " + _("Max open files at a time for leveldb. Can improve performance as block index/tx index grows, but your OS may have a limit. (Default:1000)") + "\n"; + strUsage += " -leveldbcache- " + _("Size in MB of the database that leveldb will cache in memory. Can result in dramatic performance improvement at the expense of RAM usage. (Default: 100)") + "\n"; return strUsage; @@ -393,9 +403,6 @@ bool AppInit2(boost::thread_group& threadGroup) LogPrintf("AppInit2 : parameter interaction: -bind set -> setting -listen=1\n"); } - // Process masternode config - masternodeConfig.read(GetMasternodeConfigFile()); - if (mapArgs.count("-connect") && mapMultiArgs["-connect"].size() > 0) { // when only connecting to trusted nodes, do not seed via DNS, or listen by default if (SoftSetBoolArg("-dnsseed", false)) @@ -508,7 +515,7 @@ bool AppInit2(boost::thread_group& threadGroup) // Sanity check if (!InitSanityCheck()) - return InitError(_("Initialization sanity check failed. Memetic is shutting down.")); + return InitError(_("Initialization sanity check failed. PepeCoin is shutting down.")); std::string strDataDir = GetDataDir().string(); #ifdef ENABLE_WALLET @@ -524,12 +531,12 @@ bool AppInit2(boost::thread_group& threadGroup) if (file) fclose(file); static boost::interprocess::file_lock lock(pathLockFile.string().c_str()); if (!lock.try_lock()) - return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Memetic is probably already running."), strDataDir)); + return InitError(strprintf(_("Cannot obtain a lock on data directory %s. PepeCoin is probably already running."), strDataDir)); if (GetBoolArg("-shrinkdebugfile", !fDebug)) ShrinkDebugFile(); LogPrintf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); - LogPrintf("Memetic version %s (%s)\n", FormatFullVersion(), CLIENT_DATE); + LogPrintf("PepeCoin version %s (%s)\n", FormatFullVersion(), CLIENT_DATE); LogPrintf("Using OpenSSL version %s\n", SSLeay_version(SSLEAY_VERSION)); if (!fLogTimestamps) LogPrintf("Startup time: %s\n", DateTimeStrFormat("%x %H:%M:%S", GetTime())); @@ -549,7 +556,7 @@ bool AppInit2(boost::thread_group& threadGroup) nMasternodeMinProtocol = GetArg("-masternodeminprotocol", MIN_POOL_PEER_PROTO_VERSION); if (fDaemon) - fprintf(stdout, "Memetic server starting\n"); + fprintf(stdout, "PepeCoin server starting\n"); int64_t nStart; @@ -689,8 +696,12 @@ bool AppInit2(boost::thread_group& threadGroup) } for (int n = 0; n < NET_MAX; n++) { enum Network net = (enum Network)n; - if (!nets.count(net)) + if (!nets.count(net)){ SetLimited(net); + } else { + SetReachable(NET_IPV4); + SetReachable(NET_IPV6); + } } } @@ -860,10 +871,10 @@ bool AppInit2(boost::thread_group& threadGroup) InitWarning(msg); } else if (nLoadWalletRet == DB_TOO_NEW) - strErrors << _("Error loading wallet.dat: Wallet requires newer version of Memetic") << "\n"; + strErrors << _("Error loading wallet.dat: Wallet requires newer version of PepeCoin") << "\n"; else if (nLoadWalletRet == DB_NEED_REWRITE) { - strErrors << _("Wallet needed to be rewritten: restart Memetic to complete") << "\n"; + strErrors << _("Wallet needed to be rewritten: restart PepeCoin to complete") << "\n"; LogPrintf("%s", strErrors.str()); return InitError(strErrors.str()); } @@ -970,22 +981,6 @@ bool AppInit2(boost::thread_group& threadGroup) if (!strErrors.str().empty()) return InitError(strErrors.str()); - uiInterface.InitMessage(_("Loading masternode cache...")); - - CMasternodeDB mndb; - CMasternodeDB::ReadResult readResult = mndb.Read(mnodeman); - if (readResult == CMasternodeDB::FileError) - LogPrintf("Missing masternode cache file - mncache.dat, will try to recreate\n"); - else if (readResult != CMasternodeDB::Ok) - { - LogPrintf("Error reading mncache.dat: "); - if(readResult == CMasternodeDB::IncorrectFormat) - LogPrintf("magic is ok but data has invalid format, will try to recreate\n"); - else - LogPrintf("file format is unknown or invalid, please fix it manually\n"); - } - - fMasterNode = GetBoolArg("-masternode", false); if(fMasterNode) { LogPrintf("IS DARKSEND MASTER NODE\n"); @@ -994,7 +989,7 @@ bool AppInit2(boost::thread_group& threadGroup) LogPrintf(" addr %s\n", strMasterNodeAddr.c_str()); if(!strMasterNodeAddr.empty()){ - CService addrTest = CService(strMasterNodeAddr, fNameLookup); + CService addrTest = CService(strMasterNodeAddr); if (!addrTest.IsValid()) { return InitError("Invalid -masternodeaddr address: " + strMasterNodeAddr); } @@ -1017,19 +1012,6 @@ bool AppInit2(boost::thread_group& threadGroup) } else { return InitError(_("You must specify a masternodeprivkey in the configuration. Please see documentation for help.")); } - - activeMasternode.ManageStatus(); - } - - if(GetBoolArg("-mnconflock", false)) { - LogPrintf("Locking Masternodes:\n"); - uint256 mnTxHash; - BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { - LogPrintf(" %s %s\n", mne.getTxHash(), mne.getOutputIndex()); - mnTxHash.SetHex(mne.getTxHash()); - COutPoint outpoint = COutPoint(mnTxHash, boost::lexical_cast(mne.getOutputIndex())); - pwalletMain->LockCoin(outpoint); - } } fEnableDarksend = GetBoolArg("-enabledarksend", false); @@ -1045,32 +1027,39 @@ bool AppInit2(boost::thread_group& threadGroup) nDarksendRounds = 99999; } - nAnonymizeTransferAmount = GetArg("-anonymizetransferamount", 0); - if(nAnonymizeTransferAmount > 999999) nAnonymizeTransferAmount = 999999; - if(nAnonymizeTransferAmount < 2) nAnonymizeTransferAmount = 2; + nAnonymizePepeCoinAmount = GetArg("-anonymizePepeCoinamount", 0); + if(nAnonymizePepeCoinAmount > 999999) nAnonymizePepeCoinAmount = 999999; + if(nAnonymizePepeCoinAmount < 2) nAnonymizePepeCoinAmount = 2; - fEnableInstantX = GetBoolArg("-enableinstantx", fEnableInstantX); - nInstantXDepth = GetArg("-instantxdepth", nInstantXDepth); - nInstantXDepth = std::min(std::max(nInstantXDepth, 0), 60); + bool fEnableInstantX = GetBoolArg("-enableinstantx", true); + if(fEnableInstantX){ + nInstantXDepth = GetArg("-instantxdepth", 5); + if(nInstantXDepth > 60) nInstantXDepth = 60; + if(nInstantXDepth < 0) nAnonymizePepeCoinAmount = 0; + } else { + nInstantXDepth = 0; + } //lite mode disables all Masternode and Darksend related functionality - fLiteMode = GetBoolArg("-litemode", false); + fLiteMode = GetBoolArg("-nomntesting", false); if(fMasterNode && fLiteMode){ - return InitError("You can not start a masternode in litemode"); + return InitError("You can not start a masternode in nomntesting mode, formally known as litemode"); } LogPrintf("fLiteMode %d\n", fLiteMode); LogPrintf("nInstantXDepth %d\n", nInstantXDepth); LogPrintf("Darksend rounds %d\n", nDarksendRounds); - LogPrintf("Anonymize Memetic Amount %d\n", nAnonymizeTransferAmount); + LogPrintf("Anonymize PepeCoin Amount %d\n", nAnonymizePepeCoinAmount); /* Denominations A note about convertability. Within Darksend pools, each denomination is convertable to another. For example: - 1MEME+1000 == (.1TX+100)*10 - 10MEME+10000 == (1TX+1000)*10 + 1PepeCoin+1000 == (.1PepeCoin+100)*10 + 10PepeCoin+10000 == (1PepeCoin+1000)*10 */ + darkSendDenominations.push_back( (100000 * COIN)+100000000 ); + darkSendDenominations.push_back( (10000 * COIN)+10000000 ); darkSendDenominations.push_back( (1000 * COIN)+1000000 ); darkSendDenominations.push_back( (100 * COIN)+100000 ); darkSendDenominations.push_back( (10 * COIN)+10000 ); @@ -1083,7 +1072,8 @@ bool AppInit2(boost::thread_group& threadGroup) darkSendPool.InitCollateralAddress(); - threadGroup.create_thread(boost::bind(&ThreadCheckDarkSendPool)); + if(!fLiteMode) //don't start this thread in lite mode + threadGroup.create_thread(boost::bind(&ThreadCheckDarkSendPool)); @@ -1123,12 +1113,38 @@ bool AppInit2(boost::thread_group& threadGroup) if (fServer) StartRPCThreads(); + BOOST_FOREACH(PAIRTYPE(std::string, CmastertoadConfig) mastertoad, pwalletMain->mapMymastertoads) + { + CmastertoadConfig c = mastertoad.second; + if(c.isLocal) + { + strMasterNodeAddr = c.sAddress; + strMasterNodePrivKey = c.sMasternodePrivKey; + + CKey keyds; + CPubKey pubkeyds; + std::string errorMessage; + if(!darkSendSigner.SetKey(strMasterNodePrivKey, errorMessage, keyds, pubkeyds)) + { + return InitError("Invalid masternodeprivkey. Please see documenation."); + } + + activeMasternode.pubKeyMasternode = pubkeyds; + fMasterNode = true; + break; + } + } + #ifdef ENABLE_WALLET // Mine proof-of-stake blocks in the background if (!GetBoolArg("-staking", true)) LogPrintf("Staking disabled\n"); - else if (pwalletMain) + else if (pwalletMain && !fMasterNode) // don't stake if we are a local masternode + { + if(TestNet()) + nStakeMinAge = 6 * 60; // 6 minutes for TestNet so we don't have to wait so long to test things threadGroup.create_thread(boost::bind(&ThreadStakeMiner, pwalletMain)); + } #endif // ********************************************************* Step 12: finished @@ -1137,6 +1153,11 @@ bool AppInit2(boost::thread_group& threadGroup) #ifdef ENABLE_WALLET if (pwalletMain) { + BOOST_FOREACH(PAIRTYPE(std::string, CmastertoadConfig) mastertoad, pwalletMain->mapMymastertoads) + { + uiInterface.NotifymastertoadChanged(mastertoad.second); + } + // Add wallet transactions that aren't already in a block to mapTransactions pwalletMain->ReacceptWalletTransactions(); diff --git a/src/instantx.cpp b/src/instantx.cpp index 23a23e98..62c20205 100644 --- a/src/instantx.cpp +++ b/src/instantx.cpp @@ -1,17 +1,18 @@ + + + #include "uint256.h" #include "sync.h" #include "net.h" #include "key.h" #include "util.h" #include "base58.h" -#include "main.h" #include "protocol.h" #include "instantx.h" +#include "masternode.h" #include "activemasternode.h" -#include "masternodeman.h" #include "darksend.h" #include "spork.h" -#include "txdb.h" #include using namespace std; @@ -34,8 +35,7 @@ int nCompleteTXLocks; void ProcessMessageInstantX(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) { if(fLiteMode) return; //disable all darksend/masternode related functionality - if(!IsSporkActive(SPORK_2_INSTANTX)) return; - if(!darkSendPool.IsBlockchainSynced()) return; + if(!IsSporkActive(SPORK_1_MASTERNODE_PAYMENTS_ENFORCEMENT)) return; if (strCommand == "txlreq") { @@ -56,8 +56,8 @@ void ProcessMessageInstantX(CNode* pfrom, std::string& strCommand, CDataStream& } BOOST_FOREACH(const CTxOut o, tx.vout){ - if(!o.scriptPubKey.IsNormalPaymentScript() && !o.scriptPubKey.IsUnspendable()){ - LogPrintf("ProcessMessageInstantX::txlreq - Invalid Script %s\n", tx.ToString().c_str()); + if(!o.scriptPubKey.IsNormalPaymentScript()){ + printf ("ProcessMessageInstantX::txlreq - Invalid Script %s\n", tx.ToString().c_str()); return; } } @@ -66,18 +66,16 @@ void ProcessMessageInstantX(CNode* pfrom, std::string& strCommand, CDataStream& bool fMissingInputs = false; CValidationState state; - CBlockIndex* pindex; - CBlock block; - CTxDB txdb("r"); - bool fAccepted = false; - { - LOCK(cs_main); - fAccepted = AcceptToMemoryPool(mempool, tx, true, &fMissingInputs); - } - if (fAccepted) + + //if (AcceptToMemoryPool(mempool, state, tx, true, &fMissingInputs)) + if (AcceptToMemoryPool(mempool, tx, true, &fMissingInputs)) { - RelayInventory(inv); + vector vInv; + vInv.push_back(inv); + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + pnode->PushMessage("inv", vInv); DoConsensusVote(tx, nBlockHeight); @@ -114,9 +112,9 @@ void ProcessMessageInstantX(CNode* pfrom, std::string& strCommand, CDataStream& if(!CheckForConflictingLocks(tx)){ LogPrintf("ProcessMessageInstantX::txlreq - Found Existing Complete IX Lock\n"); - //reprocess the last 15 blocks - block.DisconnectBlock(txdb, pindex); - tx.DisconnectInputs(txdb); + CValidationState state; + //DisconnectBlockAndInputs(state, tx); + mapTxLockReq.insert(make_pair(tx.GetHash(), tx)); } } } @@ -138,7 +136,7 @@ void ProcessMessageInstantX(CNode* pfrom, std::string& strCommand, CDataStream& mapTxLockVote.insert(make_pair(ctx.GetHash(), ctx)); - if(ProcessConsensusVote(pfrom, ctx)){ + if(ProcessConsensusVote(ctx)){ //Spam/Dos protection /* Masternodes will sometimes propagate votes before the transaction is known to the client. @@ -161,8 +159,12 @@ void ProcessMessageInstantX(CNode* pfrom, std::string& strCommand, CDataStream& mapUnknownVotes[ctx.vinMasternode.prevout.hash] = GetTime()+(60*10); } } + vector vInv; + vInv.push_back(inv); + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + pnode->PushMessage("inv", vInv); - RelayInventory(inv); } return; @@ -183,7 +185,8 @@ bool IsIXTXValid(const CTransaction& txCollateral){ BOOST_FOREACH(const CTxIn i, txCollateral.vin){ CTransaction tx2; uint256 hash; - if(GetTransaction(i.prevout.hash, tx2, hash)){ + //if(GetTransaction(i.prevout.hash, tx2, hash, true)){ + if(GetTransaction(i.prevout.hash, tx2, hash)){ if(tx2.vout.size() > i.prevout.n) { nValueIn += tx2.vout[i.prevout.n].nValue; } @@ -192,13 +195,13 @@ bool IsIXTXValid(const CTransaction& txCollateral){ } } - if(nValueOut > GetSporkValue(SPORK_5_MAX_VALUE)*COIN){ - LogPrint("instantx", "IsIXTXValid - Transaction value too high - %s\n", txCollateral.ToString().c_str()); + if(nValueOut > GetSporkValue(SPORK_2_MAX_VALUE)*COIN){ + if(fDebug) LogPrintf ("IsIXTXValid - Transaction value too high - %s\n", txCollateral.ToString().c_str()); return false; } if(missingTx){ - LogPrint("instantx", "IsIXTXValid - Unknown inputs in IX transaction - %s\n", txCollateral.ToString().c_str()); + if(fDebug) LogPrintf ("IsIXTXValid - Unknown inputs in IX transaction - %s\n", txCollateral.ToString().c_str()); /* This happens sometimes for an unknown reason, so we'll return that it's a valid transaction. If someone submits an invalid transaction it will be rejected by the network anyway and this isn't @@ -208,7 +211,7 @@ bool IsIXTXValid(const CTransaction& txCollateral){ } if(nValueIn-nValueOut < COIN*0.01) { - LogPrint("instantx", "IsIXTXValid - did not include enough fees in transaction %d\n%s\n", nValueOut-nValueIn, txCollateral.ToString().c_str()); + if(fDebug) LogPrintf ("IsIXTXValid - did not include enough fees in transaction %d\n%s\n", nValueOut-nValueIn, txCollateral.ToString().c_str()); return false; } @@ -221,7 +224,7 @@ int64_t CreateNewLock(CTransaction tx) int64_t nTxAge = 0; BOOST_REVERSE_FOREACH(CTxIn i, tx.vin){ nTxAge = GetInputAge(i); - if(nTxAge < 9) + if(nTxAge < 6) { LogPrintf("CreateNewLock - Transaction not found / too new: %d / %s\n", nTxAge, tx.GetHash().ToString().c_str()); return 0; @@ -240,13 +243,13 @@ int64_t CreateNewLock(CTransaction tx) CTransactionLock newLock; newLock.nBlockHeight = nBlockHeight; - newLock.nExpiration = GetTime()+(20*60); //locks expire after 20 minutes (20 confirmations) + newLock.nExpiration = GetTime()+(60*60); //locks expire after 15 minutes (6 confirmations) newLock.nTimeout = GetTime()+(60*5); newLock.txHash = tx.GetHash(); mapTxLocks.insert(make_pair(tx.GetHash(), newLock)); } else { mapTxLocks[tx.GetHash()].nBlockHeight = nBlockHeight; - LogPrint("instantx", "CreateNewLock - Transaction Lock Exists %s !\n", tx.GetHash().ToString().c_str()); + if(fDebug) LogPrintf("CreateNewLock - Transaction Lock Exists %s !\n", tx.GetHash().ToString().c_str()); } return nBlockHeight; @@ -257,24 +260,24 @@ void DoConsensusVote(CTransaction& tx, int64_t nBlockHeight) { if(!fMasterNode) return; - int n = mnodeman.GetMasternodeRank(activeMasternode.vin, nBlockHeight, MIN_INSTANTX_PROTO_VERSION); + int n = GetMasternodeRank(activeMasternode.vin, nBlockHeight, MIN_INSTANTX_PROTO_VERSION); if(n == -1) { - LogPrint("instantx", "InstantX::DoConsensusVote - Unknown Masternode\n"); + if(fDebug) LogPrintf("InstantX::DoConsensusVote - Unknown Masternode\n"); return; } if(n > INSTANTX_SIGNATURES_TOTAL) { - LogPrint("instantx", "InstantX::DoConsensusVote - Masternode not in the top %d (%d)\n", INSTANTX_SIGNATURES_TOTAL, n); + if(fDebug) LogPrintf("InstantX::DoConsensusVote - Masternode not in the top %d (%d)\n", INSTANTX_SIGNATURES_TOTAL, n); return; } /* nBlockHeight calculated from the transaction is the authoritive source */ - LogPrint("instantx", "InstantX::DoConsensusVote - In the top %d (%d)\n", INSTANTX_SIGNATURES_TOTAL, n); + if(fDebug) LogPrintf("InstantX::DoConsensusVote - In the top %d (%d)\n", INSTANTX_SIGNATURES_TOTAL, n); CConsensusVote ctx; ctx.vinMasternode = activeMasternode.vin; @@ -293,39 +296,41 @@ void DoConsensusVote(CTransaction& tx, int64_t nBlockHeight) CInv inv(MSG_TXLOCK_VOTE, ctx.GetHash()); - RelayInventory(inv); + vector vInv; + vInv.push_back(inv); + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes){ + pnode->PushMessage("inv", vInv); + } } //received a consensus vote -bool ProcessConsensusVote(CNode* pnode, CConsensusVote& ctx) +bool ProcessConsensusVote(CConsensusVote& ctx) { - int n = mnodeman.GetMasternodeRank(ctx.vinMasternode, ctx.nBlockHeight, MIN_INSTANTX_PROTO_VERSION); + int n = GetMasternodeRank(ctx.vinMasternode, ctx.nBlockHeight, MIN_INSTANTX_PROTO_VERSION); - CMasternode* pmn = mnodeman.Find(ctx.vinMasternode); - if(pmn != NULL) - { - LogPrint("instantx", "InstantX::ProcessConsensusVote - Masternode ADDR %s %d\n", pmn->addr.ToString().c_str(), n); + int x = GetMasternodeByVin(ctx.vinMasternode); + if(x != -1){ + if(fDebug) LogPrintf("InstantX::ProcessConsensusVote - Masternode ADDR %s %d\n", vecMasternodes[x].addr.ToString().c_str(), n); } if(n == -1) { //can be caused by past versions trying to vote with an invalid protocol - LogPrint("instantx", "InstantX::ProcessConsensusVote - Unknown Masternode\n"); - mnodeman.AskForMN(pnode, ctx.vinMasternode); + if(fDebug) LogPrintf("InstantX::ProcessConsensusVote - Unknown Masternode\n"); return false; } if(n > INSTANTX_SIGNATURES_TOTAL) { - LogPrint("instantx", "InstantX::ProcessConsensusVote - Masternode not in the top %d (%d) - %s\n", INSTANTX_SIGNATURES_TOTAL, n, ctx.GetHash().ToString().c_str()); + if(fDebug) LogPrintf("InstantX::ProcessConsensusVote - Masternode not in the top %d (%d) - %s\n", INSTANTX_SIGNATURES_TOTAL, n, ctx.GetHash().ToString().c_str()); return false; } if(!ctx.SignatureValid()) { LogPrintf("InstantX::ProcessConsensusVote - Signature invalid\n"); //don't ban, it could just be a non-synced masternode - mnodeman.AskForMN(pnode, ctx.vinMasternode); return false; } @@ -334,17 +339,14 @@ bool ProcessConsensusVote(CNode* pnode, CConsensusVote& ctx) CTransactionLock newLock; newLock.nBlockHeight = 0; - newLock.nExpiration = GetTime()+(20*60); + newLock.nExpiration = GetTime()+(60*60); newLock.nTimeout = GetTime()+(60*5); newLock.txHash = ctx.txHash; mapTxLocks.insert(make_pair(ctx.txHash, newLock)); } else { - LogPrint("instantx", "InstantX::ProcessConsensusVote - Transaction Lock Exists %s !\n", ctx.txHash.ToString().c_str()); + if(fDebug) LogPrintf("InstantX::ProcessConsensusVote - Transaction Lock Exists %s !\n", ctx.txHash.ToString().c_str()); } - CBlockIndex* pindex; - CBlock block; - CTxDB txdb("r"); //compile consessus vote std::map::iterator i = mapTxLocks.find(ctx.txHash); if (i != mapTxLocks.end()){ @@ -358,19 +360,19 @@ bool ProcessConsensusVote(CNode* pnode, CConsensusVote& ctx) } #endif - LogPrint("instantx", "InstantX::ProcessConsensusVote - Transaction Lock Votes %d - %s !\n", (*i).second.CountSignatures(), ctx.GetHash().ToString().c_str()); + if(fDebug) LogPrintf("InstantX::ProcessConsensusVote - Transaction Lock Votes %d - %s !\n", (*i).second.CountSignatures(), ctx.GetHash().ToString().c_str()); if((*i).second.CountSignatures() >= INSTANTX_SIGNATURES_REQUIRED){ - LogPrint("instantx", "InstantX::ProcessConsensusVote - Transaction Lock Is Complete %s !\n", (*i).second.GetHash().ToString().c_str()); + if(fDebug) LogPrintf("InstantX::ProcessConsensusVote - Transaction Lock Is Complete %s !\n", (*i).second.GetHash().ToString().c_str()); CTransaction& tx = mapTxLockReq[ctx.txHash]; if(!CheckForConflictingLocks(tx)){ #ifdef ENABLE_WALLET if(pwalletMain){ - if(pwalletMain->UpdatedTransaction((*i).second.txHash)){ + pwalletMain->UpdatedTransaction((*i).second.txHash); nCompleteTXLocks++; - } + } #endif @@ -386,9 +388,8 @@ bool ProcessConsensusVote(CNode* pnode, CConsensusVote& ctx) //if this tx lock was rejected, we need to remove the conflicting blocks if(mapTxLockReqRejected.count((*i).second.txHash)){ - //reprocess the last 15 blocks - block.DisconnectBlock(txdb, pindex); - tx.DisconnectInputs(txdb); + CValidationState state; + //DisconnectBlockAndInputs(state, mapTxLockReqRejected[(*i).second.txHash]); } } } @@ -480,15 +481,26 @@ bool CConsensusVote::SignatureValid() std::string strMessage = txHash.ToString().c_str() + boost::lexical_cast(nBlockHeight); //LogPrintf("verify strMessage %s \n", strMessage.c_str()); - CMasternode* pmn = mnodeman.Find(vinMasternode); + int n = GetMasternodeByVin(vinMasternode); - if(pmn == NULL) + if(n == -1) { LogPrintf("InstantX::CConsensusVote::SignatureValid() - Unknown Masternode\n"); return false; } - if(!darkSendSigner.VerifyMessage(pmn->pubkey2, vchMasterNodeSignature, strMessage, errorMessage)) { + //LogPrintf("verify addr %s \n", vecMasternodes[0].addr.ToString().c_str()); + //LogPrintf("verify addr %s \n", vecMasternodes[1].addr.ToString().c_str()); + //LogPrintf("verify addr %d %s \n", n, vecMasternodes[n].addr.ToString().c_str()); + + CScript pubkey; + pubkey =GetScriptForDestination(vecMasternodes[n].pubkey2.GetID()); + CTxDestination address1; + ExtractDestination(pubkey, address1); + CBitcoinAddress address2(address1); + //LogPrintf("verify pubkey2 %s \n", address2.ToString().c_str()); + + if(!darkSendSigner.VerifyMessage(vecMasternodes[n].pubkey2, vchMasterNodeSignature, strMessage, errorMessage)) { LogPrintf("InstantX::CConsensusVote::SignatureValid() - Verify message failed\n"); return false; } @@ -508,17 +520,24 @@ bool CConsensusVote::Sign() if(!darkSendSigner.SetKey(strMasterNodePrivKey, errorMessage, key2, pubkey2)) { - LogPrintf("CConsensusVote::Sign() - ERROR: Invalid masternodeprivkey: '%s'\n", errorMessage.c_str()); + LogPrintf("CActiveMasternode::RegisterAsMasterNode() - ERROR: Invalid masternodeprivkey: '%s'\n", errorMessage.c_str()); return false; } + CScript pubkey; + pubkey =GetScriptForDestination(pubkey2.GetID()); + CTxDestination address1; + ExtractDestination(pubkey, address1); + CBitcoinAddress address2(address1); + //LogPrintf("signing pubkey2 %s \n", address2.ToString().c_str()); + if(!darkSendSigner.SignMessage(strMessage, errorMessage, vchMasterNodeSignature, key2)) { - LogPrintf("CConsensusVote::Sign() - Sign message failed"); + LogPrintf("CActiveMasternode::RegisterAsMasterNode() - Sign message failed"); return false; } if(!darkSendSigner.VerifyMessage(pubkey2, vchMasterNodeSignature, strMessage, errorMessage)) { - LogPrintf("CConsensusVote::Sign() - Verify message failed"); + LogPrintf("CActiveMasternode::RegisterAsMasterNode() - Verify message failed"); return false; } @@ -531,22 +550,22 @@ bool CTransactionLock::SignaturesValid() BOOST_FOREACH(CConsensusVote vote, vecConsensusVotes) { - int n = mnodeman.GetMasternodeRank(vote.vinMasternode, vote.nBlockHeight, MIN_INSTANTX_PROTO_VERSION); + int n = GetMasternodeRank(vote.vinMasternode, vote.nBlockHeight, MIN_INSTANTX_PROTO_VERSION); if(n == -1) { - LogPrintf("CTransactionLock::SignaturesValid() - Unknown Masternode\n"); + LogPrintf("InstantX::DoConsensusVote - Unknown Masternode\n"); return false; } if(n > INSTANTX_SIGNATURES_TOTAL) { - LogPrintf("CTransactionLock::SignaturesValid() - Masternode not in the top %s\n", INSTANTX_SIGNATURES_TOTAL); + LogPrintf("InstantX::DoConsensusVote - Masternode not in the top %s\n", INSTANTX_SIGNATURES_TOTAL); return false; } if(!vote.SignatureValid()){ - LogPrintf("CTransactionLock::SignaturesValid() - Signature not valid\n"); + LogPrintf("InstantX::CTransactionLock::SignaturesValid - Signature not valid\n"); return false; } } @@ -575,4 +594,4 @@ int CTransactionLock::CountSignatures() } } return n; -} \ No newline at end of file +} diff --git a/src/instantx.h b/src/instantx.h index bec2c2d2..3b3c1735 100644 --- a/src/instantx.h +++ b/src/instantx.h @@ -9,8 +9,9 @@ #include "sync.h" #include "net.h" #include "key.h" -#include "core.h" +//#include "primitives/transaction.h" #include "util.h" +//#include "script/script.h" #include "script.h" #include "base58.h" #include "main.h" @@ -43,7 +44,7 @@ void ProcessMessageInstantX(CNode* pfrom, std::string& strCommand, CDataStream& void DoConsensusVote(CTransaction& tx, int64_t nBlockHeight); //process consensus vote message -bool ProcessConsensusVote(CNode* pnode, CConsensusVote& ctx); +bool ProcessConsensusVote(CConsensusVote& ctx); // keep transaction locks in memory for an hour void CleanTransactionLocksList(); @@ -63,13 +64,16 @@ class CConsensusVote bool SignatureValid(); bool Sign(); - IMPLEMENT_SERIALIZE - ( + ADD_SERIALIZE_METHODS; + + template + inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) { + unsigned int nSerSize = 0; READWRITE(txHash); READWRITE(vinMasternode); READWRITE(vchMasterNodeSignature); READWRITE(nBlockHeight); - ) + } }; class CTransactionLock diff --git a/src/kernel.cpp b/src/kernel.cpp index cb75047d..d6390b4b 100644 --- a/src/kernel.cpp +++ b/src/kernel.cpp @@ -1,5 +1,5 @@ // Copyright (c) 2012-2013 The PPCoin developers -// Copyright (c) 2014 The Memetic developers +// Copyright (c) 2014 The PepeCoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -318,8 +318,15 @@ bool CheckProofOfStake(CBlockIndex* pindexPrev, const CTransaction& tx, unsigned int nDepth; nStakeMinConfirmations = 360; // 6 hours - if((pindexPrev->nHeight+1) >= PEPE_STAKE_WINTER_SWITCH_HEIGHT) + if((pindexPrev->nHeight+1) >= PEPE_STAKE_WINTER_SWITCH_HEIGHT || Params().NetworkID() == CChainParams::TESTNET) nStakeMinConfirmations = 60; + // if((pindexPrev->nHeight+1) > PEPE_KEKDAQ_MID_FIX_HEIGHT) //revert fix until stake_conf_height to resolve block loading issue + // nStakeMinConfirmations = 600; + if((pindexPrev->nHeight+1) > PEPE_STAKE_CONF_HEIGHT) + nStakeMinConfirmations = 360; + if((pindexPrev->nHeight+1) > PEPE_STAKE_CONF_TWEAK) + nStakeMinConfirmations = 600; + if (IsConfirmedInNPrevBlocks(txindex, pindexPrev, nStakeMinConfirmations - 1, nDepth)) return tx.DoS(100, error("CheckProofOfStake() : tried to stake at depth %d", nDepth + 1)); @@ -372,6 +379,10 @@ bool CheckKernel(CBlockIndex* pindexPrev, unsigned int nBits, int64_t nTime, con int nStakeMinConfirmations = 360; // 6 hours if((pindexPrev->nHeight+1) >= PEPE_STAKE_WINTER_SWITCH_HEIGHT) nStakeMinConfirmations = 60; + if((pindexPrev->nHeight+1) > PEPE_STAKE_CONF_HEIGHT) + nStakeMinConfirmations = 360; + if((pindexPrev->nHeight+1) > PEPE_STAKE_CONF_TWEAK) + nStakeMinConfirmations = 600; if (IsConfirmedInNPrevBlocks(txindex, pindexPrev, nStakeMinConfirmations - 1, nDepth)) return false; diff --git a/src/leveldb/AUTHORS b/src/leveldb/AUTHORS old mode 100755 new mode 100644 diff --git a/src/leveldb/LICENSE b/src/leveldb/LICENSE old mode 100755 new mode 100644 diff --git a/src/leveldb/Makefile b/src/leveldb/Makefile old mode 100755 new mode 100644 diff --git a/src/leveldb/NEWS b/src/leveldb/NEWS old mode 100755 new mode 100644 diff --git a/src/leveldb/README b/src/leveldb/README old mode 100755 new mode 100644 diff --git a/src/leveldb/TODO b/src/leveldb/TODO old mode 100755 new mode 100644 diff --git a/src/leveldb/WINDOWS.md b/src/leveldb/WINDOWS.md old mode 100755 new mode 100644 diff --git a/src/leveldb/doc/index.html b/src/leveldb/doc/index.html index d7683f13..fa135c9d 100644 --- a/src/leveldb/doc/index.html +++ b/src/leveldb/doc/index.html @@ -101,7 +101,7 @@

Atomic Updates

Synchronous Writes

By default, each write to leveldb is asynchronous: it returns after pushing the write from the process into the operating -system. The memetic from operating system memory to the underlying +system. The pepecoin from operating system memory to the underlying persistent storage happens asynchronously. The sync flag can be turned on for a particular write to make the write operation not return until the data being written has been pushed all the way to @@ -319,7 +319,7 @@

Performance

Block size

leveldb groups adjacent keys together into the same block and such a -block is the unit of memetic to and from persistent storage. The +block is the unit of pepecoin to and from persistent storage. The default block size is approximately 4096 uncompressed bytes. Applications that mostly do bulk scans over the contents of the database may wish to increase this size. Applications that do a lot @@ -382,7 +382,7 @@

Cache

Key Layout

-Note that the unit of disk memetic and caching is a block. Adjacent +Note that the unit of disk pepecoin and caching is a block. Adjacent keys (according to the database sort order) will usually be placed in the same block. Therefore the application can improve its performance by placing keys that are accessed together near each other and placing diff --git a/src/main.cpp b/src/main.cpp index 7c2a7849..aedc8839 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,6 +9,7 @@ // Copyright (c) 2014 NetCoin Developers // Copyright (c) 2015 Transfercoin Developer // Copyright (c) 2015-2016 PepeCoin Developers +// Copyright (c) 2016-2019 Memetic / PepeCoin Developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -29,8 +30,7 @@ #include "ui_interface.h" #include "instantx.h" #include "darksend.h" -#include "masternodeman.h" -#include "masternode-payments.h" +#include "masternode.h" #include "spork.h" #include "smessage.h" @@ -57,7 +57,7 @@ CBigNum bnProofOfStakeLimit(~uint256(0) >> 20); unsigned int nStakeMinAge = 6 * 60 * 60; // 6 hours temporary 1 hr for test unsigned int nModifierInterval = 2 * 60; // time to elapse before new modifier is computed -int nCoinbaseMaturity = 60; +int nCoinbaseMaturity = 60; // 60 blocks until new POW or POS minted coins can be moved CBlockIndex* pindexGenesisBlock = NULL; int nBestHeight = -1; @@ -327,7 +327,7 @@ bool IsStandardTx(const CTransaction& tx, string& reason) return false; } // nTime has different purpose from nLockTime but can be used in similar attacks - if (tx.nTime > FutureDrift(GetAdjustedTime())) { + if (tx.nTime > FutureDrift(GetAdjustedTime(), nBestHeight + 1)) { reason = "time-too-new"; return false; } @@ -400,6 +400,7 @@ bool IsStandardTx(const CTransaction& tx, string& reason) bool IsFinalTx(const CTransaction &tx, int nBlockHeight, int64_t nBlockTime) { AssertLockHeld(cs_main); + // Time based nLockTime implemented in 0.1.6 if (tx.nLockTime == 0) return true; @@ -697,13 +698,13 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CTransaction &tx, bool fLimitFree, // ----------- instantX transaction scanning ----------- - BOOST_FOREACH(const CTxIn& in, tx.vin){ + /*BOOST_FOREACH(const CTxIn& in, tx.vin){ if(mapLockedInputs.count(in.prevout)){ if(mapLockedInputs[in.prevout] != tx.GetHash()){ return tx.DoS(0, error("AcceptToMemoryPool : conflicts with existing transaction lock: %s", reason)); } } - } + }*/ // Check for conflicts with in-memory transactions { @@ -714,7 +715,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CTransaction &tx, bool fLimitFree, if (pool.mapNextTx.count(outpoint)) { // Disable replacement feature for now - return false; + // return false; } } } @@ -844,7 +845,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CTransaction &tx, bool fLimitFree, bool AcceptableInputs(CTxMemPool& pool, const CTransaction &txo, bool fLimitFree, bool* pfMissingInputs, bool fRejectInsaneFee, bool isDSTX) { - AssertLockHeld(cs_main); + //AssertLockHeld(cs_main); if (pfMissingInputs) *pfMissingInputs = false; @@ -1010,32 +1011,6 @@ int CMerkleTx::GetDepthInMainChainINTERNAL(CBlockIndex* &pindexRet) const return pindexBest->nHeight - pindex->nHeight + 1; } -int CMerkleTx::GetTransactionLockSignatures() const -{ - if(!IsSporkActive(SPORK_2_INSTANTX)) return -3; - if(!fEnableInstantX) return -1; - - //compile consessus vote - std::map::iterator i = mapTxLocks.find(GetHash()); - if (i != mapTxLocks.end()){ - return (*i).second.CountSignatures(); - } - - return -1; -} - -bool CMerkleTx::IsTransactionLockTimedOut() const -{ - if(!fEnableInstantX) return -1; - - //compile consessus vote - std::map::iterator i = mapTxLocks.find(GetHash()); - if (i != mapTxLocks.end()){ - return GetTime() > (*i).second.nTimeout; - } - - return false; -} int CMerkleTx::GetDepthInMainChain(CBlockIndex* &pindexRet, bool enableIX) const { @@ -1044,15 +1019,6 @@ int CMerkleTx::GetDepthInMainChain(CBlockIndex* &pindexRet, bool enableIX) const if (nResult == 0 && !mempool.exists(GetHash())) return -1; // Not in chain, not in mempool - if(enableIX){ - if (nResult < 10){ - int signatures = GetTransactionLockSignatures(); - if(signatures >= INSTANTX_SIGNATURES_REQUIRED){ - return nInstantXDepth+nResult; - } - } - } - return nResult; } @@ -1100,7 +1066,7 @@ int GetInputAge(CTxIn& vin) const uint256& prevHash = vin.prevout.hash; CTransaction tx; uint256 hashBlock; - bool fFound = GetTransaction(prevHash, tx, hashBlock); + bool fFound = GetTransaction(prevHash, tx, hashBlock, false); if(fFound) { if(mapBlockIndex.find(hashBlock) != mapBlockIndex.end()) @@ -1166,14 +1132,17 @@ int CTxIndex::GetDepthInMainChain() const } // Return transaction in tx, and if it was found inside a block, its hash is placed in hashBlock -bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock) +bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock, bool fCheckMempool) { { - LOCK(cs_main); + if(fCheckMempool) // avoid the mempool check and lock on cs_main if called from the masternode message handler { - if (mempool.lookup(hash, tx)) + LOCK(cs_main); { - return true; + if (mempool.lookup(hash, tx)) + { + return true; + } } } CTxDB txdb("r"); @@ -1532,29 +1501,40 @@ int64_t nSubsidy = 20 * COIN; { nSubsidy = 20 * COIN; } - else if(nHeight > RESTART_POW_BLOCK) + else if(nHeight > RESTART_POW_BLOCK && nHeight < PEPE_REBRAND_HEIGHT) { nSubsidy = 10 * COIN; nSubsidy >>= (nHeight / 131400); // block reward halves roughly four times a year a year (every 365/4 days at 1440 blocks per day) } - return nSubsidy + nFees; - -} + else if(nHeight >= PEPE_REBRAND_HEIGHT) + { + // subsidy starts at 7 Coins per block for 43,200 blocks + if(nHeight <= (PEPE_REBRAND_HEIGHT + 43200)) + { + nSubsidy = 7 * COIN; + } + else + { + nSubsidy = 15 * COIN; + nSubsidy >>= ((nHeight - PEPE_REBRAND_HEIGHT) / 525600); // block reward halves once a year + } + + if(nHeight == PEPE_REBRAND_PF_HEIGHT) + nSubsidy += (3 * PEPE_DEV_GRANT); + if(nHeight == PEPE_KEKDAQ_MID_FIX_HEIGHT) + nSubsidy += (3 * PEPE_DEV_GRANT_MID); + if(nHeight == PEPE_IPFSMN_FNL_HEIGHT) + nSubsidy += (3 * PEPE_DEV_GRANT_FINAL); + if(nHeight == PEPE_STAKE_CONF_HEIGHT) + nSubsidy += (3 * PEPE_DEV_GRANT); + if(nHeight == PEPE_KEKDAQ2_SWAP_HEIGHT) + nSubsidy += (3 * DEVFEE_OFF_SWAP_FINAL); -/* - // PEPE STAKE RATE CALCULATION - // Original credit to: madprofezzor@gmail.com + } - // returns an integer between 0 and PIR_PHASES-1 representing which PIR phase the supplied block height falls into + return nSubsidy + nFees; - Pepe Stake Rate (PSR) % -| PEPE Amount | Stake % Year 1| Year 2 | Year 3+ | -|:-------------|:-------------:|------------:|------------:| - |0 to 10000 | 3.0% | 2.0% | 1.0% | - |10,000+ | 4.0%| 3.0% | 2.0% | - |50,000+ | 5.0%| 4.0% | 3.0% | - |100,000+ | 6.0%| 5.0% | 4.0% | -*/ +} int GetPIRRewardPhase(int64_t nHeight) { @@ -1611,19 +1591,64 @@ int64_t nSubsidy = 20 * COIN; { return GetProofOfStakeRewardV1(pindexPrev, nCoinAge, nFees, nCoinValue); } + else if((!TestNet() && pindexPrev->nHeight > PEPE_REBRAND_HEIGHT) || + (TestNet() && pindexPrev->nHeight > PEPE_REBRAND_HEIGHT_TESTNET)) + { + return GetProofOfStakeRewardV3(pindexPrev, nCoinAge, nFees, nCoinValue); + } else { return GetProofOfStakeRewardV2(pindexPrev, nCoinAge, nFees, nCoinValue); } } + // PEPE rebrand 7% pos + int64_t GetProofOfStakeRewardV3(const CBlockIndex* pindexPrev, int64_t nCoinAge, int64_t nFees, int64_t nCoinValue) + { + int64_t nHeight = pindexPrev->nHeight; + int64_t nRewardCoinYear = 7 * CENT; // 7% per year + + // Now calculate the reward + int64_t nSubsidy = nCoinAge * nRewardCoinYear * 33 / (365 * 33 + 8); //integer equivalent of nCoinAge * nRewardCoinYear / 365.2424242.. + + if (nHeight >= PEPE_JACKOLANTERN_FORK_HEIGHT) + nSubsidy = 1 * COIN; // Minimum 1 PEPE stake return for optimal KEKDAQ functionality. + + if (nHeight >= PEPE_STAKEONLY_HEIGHT) + { + // adopt the proof-of-work reward schedule when swap over to stake only + // this will pick up the current pow reward of 3.25 at fork height with halving + nSubsidy = 15 * COIN; + nSubsidy >>= ((nHeight - PEPE_STAKEONLY_HEIGHT) / 525600); // block reward halves once a year + + if(nSubsidy < 1 * COIN) // minimum 1 PEPE stake return + nSubsidy = 1 * COIN; + } + + if(nHeight+1 == PEPE_REBRAND_PF_HEIGHT) + nSubsidy += (3 * PEPE_DEV_GRANT); + if(nHeight+1 == PEPE_KEKDAQ_MID_FIX_HEIGHT) + nSubsidy += (3 * PEPE_DEV_GRANT_MID); + if(nHeight+1 == PEPE_IPFSMN_FNL_HEIGHT) + nSubsidy += (3 * PEPE_DEV_GRANT_FINAL); + if(nHeight+1 == PEPE_STAKE_CONF_HEIGHT) + nSubsidy += (3 * PEPE_DEV_GRANT); + if(nHeight+1 == PEPE_KEKDAQ2_SWAP_HEIGHT) + nSubsidy += (3 * DEVFEE_OFF_SWAP_FINAL); + if(nHeight+1 == PEPE_STAKEONLY_HEIGHT) + nSubsidy += (4 * PEPE_SO_SWAP_GRANT); + + return nSubsidy + nFees; + } + // PEPE stake fix - // Simplified code to make it easier to understand, debug and maintain + // Not used anymore int64_t GetProofOfStakeRewardV2(const CBlockIndex* pindexPrev, int64_t nCoinAge, int64_t nFees, int64_t nCoinValue) { int64_t nHeight = pindexPrev->nHeight; int64_t nRewardCoinYear = 1 * CENT; // 1% per year + // PEPE Stake Reward table // Amount Year 1 Year 2 Year 3+ // 0-10,000 3% 2% 1% @@ -1707,7 +1732,8 @@ int64_t nSubsidy = 20 * COIN; -static int64_t nTargetTimespan = 10 * 60; // 10 mins +static int64_t nTargetTimespan = 10 * 60; // 10 mins stake difficulty retargeting + // ppcoin: find last block index up to pindex const CBlockIndex* GetLastBlockIndex(const CBlockIndex* pindex, bool fProofOfStake) @@ -1719,9 +1745,25 @@ const CBlockIndex* GetLastBlockIndex(const CBlockIndex* pindex, bool fProofOfSta unsigned int GetNextTargetRequired(const CBlockIndex* pindexLast, bool fProofOfStake) { + // if(pindexLast->nHeight >= PEPE_JACKOLANTERN_FORK_HEIGHT) + // nTargetTimespan = 2 * 60; + + nTargetTimespan = 10 * 60; // 10 mins stake difficulty retargeting + + if(pindexLast->nHeight >= PEPE_NTARGETTIMESPAN_UNSTICK_HEIGHT) + nTargetTimespan = 2 * 60; + + // set fork-fix timespan back to 10 minutes for these blocks, to pass POW block sync sticking issues + if(pindexLast->nHeight >= 886415 && pindexLast->nHeight <=888057) + nTargetTimespan = 10 * 60; + + // POS difficulty timespan set back to 10 minutes to lessen difficulty swings after block 1823000 + if(pindexLast->nHeight >= PEPE_DIFFIMPROVE_HEIGHT ) + nTargetTimespan = 10 * 60; + CBigNum bnTargetLimit = fProofOfStake ? GetProofOfStakeLimit(pindexLast->nHeight) : Params().ProofOfWorkLimit(); - if (pindexLast == NULL) + if (pindexLast == NULL || TestNet()) return bnTargetLimit.GetCompact(); // genesis block const CBlockIndex* pindexPrev = GetLastBlockIndex(pindexLast, fProofOfStake); @@ -1770,9 +1812,41 @@ bool CheckProofOfWork(uint256 hash, unsigned int nBits) return true; } +static int nAskedForBlocks = 0; + +bool IsSyncing() +{ + int nSyncSpan = GetArg("-syncspan", 90); + return pindexBest->GetBlockTime() < GetTime() - nSyncSpan * 60; +} + +void DropNonRespondingSyncPeer() +{ + // detect if the currently connected sync node has not started sending blocks + // within timeout period, and if so disconnect it so we can try to sync + // from a new peer + BOOST_FOREACH(CNode* pnode, vNodes) { + if(pnode->fStartSync && !pnode->fDisconnect && IsSyncing()) + { + int nSyncTimeout = GetArg("-synctimeout", 60); + int64_t tNow = GetTimeMillis(); + if (pnode->tGetblocks) { + if (pnode->tGetblocks > pnode->tBlockInvs && tNow-pnode->tGetblocks > nSyncTimeout * 1000) { + LogPrintf("sync peer=%d: Block sync did not start within %d seconds. Disconnecting peer.\n", pnode->id, nSyncTimeout); + pnode->fDisconnect = true; + pnode->fStartSync = false; + nAskedForBlocks = 0; + + break; + } + } + } + } +} + bool IsInitialBlockDownload() { - LOCK(cs_main); + //LOCK(cs_main); if (pindexBest == NULL || nBestHeight < Checkpoints::GetTotalBlocksEstimate()) return true; static int64_t nLastUpdate; @@ -1798,7 +1872,7 @@ void Misbehaving(NodeId pnode, int howmuch) if(pn->GetId() == pnode) { pn->nMisbehavior += howmuch; - int banscore = GetArg("-banscore", 100); + int banscore = GetArg("-banscore", 25); if (pn->nMisbehavior >= banscore && pn->nMisbehavior - howmuch < banscore) { LogPrintf("Misbehaving: %s (%d -> %d) BAN THRESHOLD EXCEEDED\n", pn->addrName, pn->nMisbehavior-howmuch, pn->nMisbehavior); @@ -2187,6 +2261,34 @@ bool FindTransactionsByDestination(const CTxDestination &dest, std::vectornHeight; + CBlockIndex* pblockAddrIndex = FindBlockByHeight(nStartHeight); + CTxDB txdbAddr("rw"); + while(pblockAddrIndex && pblockAddrIndex->nHeight <= nStopHeight) + { + CBlock pblockAddr; + if(pblockAddr.ReadFromDisk(pblockAddrIndex, true)) + pblockAddr.RebuildAddressIndex(txdbAddr); + pblockAddrIndex = pblockAddrIndex->pnext; + } + LogPrintf("RebuildAddressIndexFromHeight(): Complete\n"); +} + +void RebuildAddressIndexForBlock(int64_t nBlockHeight) +{ + LogPrintf("RebuildAddressIndexForBlock(): nBlockHeight: %d\n", nBlockHeight); + CBlockIndex* pblockAddrIndex = FindBlockByHeight(nBlockHeight); + CTxDB txdbAddr("rw"); + CBlock pblockAddr; + if(pblockAddr.ReadFromDisk(pblockAddrIndex, true)) + pblockAddr.RebuildAddressIndex(txdbAddr); + + LogPrintf("RebuildAddressIndexForBlock(): Complete\n"); +} + void CBlock::RebuildAddressIndex(CTxDB& txdb) { BOOST_FOREACH(CTransaction& tx, vtx) @@ -2304,6 +2406,7 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) mapQueuedChanges[hashTx] = CTxIndex(posThisTx, tx.vout.size()); } + if (IsProofOfWork()) { int64_t nReward = GetProofOfWorkReward(pindex->nHeight, nFees); @@ -2312,6 +2415,11 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) return DoS(50, error("ConnectBlock() : coinbase reward exceeded (actual=%d vs calculated=%d)", vtx[0].GetValueOut(), nReward)); + + // If after rebrand hardfork, check that dev rewards are present + if(pindex->nHeight >= PEPE_REBRAND_PF_HEIGHT) + if(!CheckDevRewards(vtx[0], pindex->nHeight, nReward, nFees)) + return error("ConnectBlock(): check proof-of-work failed for block, dev rewards mising."); } if (IsProofOfStake()) { @@ -2325,8 +2433,103 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) if (nStakeReward > nCalculatedStakeReward) return DoS(100, error("ConnectBlock() : coinstake pays too much(actual=%d vs calculated=%d)", nStakeReward, nCalculatedStakeReward)); + + // If after rebrand hardfork, check that dev rewards are present + if(pindex->nHeight >= PEPE_REBRAND_PF_HEIGHT) + if(!CheckDevRewards(vtx[1], pindex->nHeight, nStakeReward, nFees)) + return error("ConnectBlock(): check proof-of-stake failed for block, dev rewards mising."); + } + + // ----------- masternode payments ----------- + + bool MasternodePayments = false; + if ( Params().NetworkID() == CChainParams::TESTNET ){ + if (pindex->nHeight > PEPE_KEKDAQ_MID_HEIGHT_TESTNET ){ + MasternodePayments = true; + } + }else{ + if (pindex->nHeight > PEPE_KEKDAQ_MID_FIX_HEIGHT){ + MasternodePayments = true; + } + } + + if(MasternodePayments == true) + { + CAmount masternodePaymentAmount = 0; + if(IsProofOfStake()) + { + int64_t nDevReward = 0.02 * nStakeReward; // 2% per dev reward + + if (pindex->nHeight > PEPE_REBRAND_PF_HEIGHT) + nDevReward = 0.04 * nStakeReward; // 4% per dev reward + if (pindex->nHeight == PEPE_REBRAND_PF_HEIGHT) + nDevReward = PEPE_DEV_GRANT; + if (pindex->nHeight == PEPE_KEKDAQ_MID_FIX_HEIGHT) + nDevReward = PEPE_DEV_GRANT_MID; + if (pindex->nHeight == PEPE_IPFSMN_FNL_HEIGHT) + nDevReward = PEPE_DEV_GRANT_FINAL; + if (pindex->nHeight == PEPE_STAKE_CONF_HEIGHT) + nDevReward = PEPE_DEV_GRANT; + if (pindex->nHeight == PEPE_KEKDAQ2_SWAP_HEIGHT) + nDevReward = DEVFEE_OFF_SWAP_FINAL; + if (pindex->nHeight == PEPE_STAKEONLY_HEIGHT) + nDevReward = PEPE_SO_SWAP_GRANT; + + int64_t nTotalDevRewards = 3 * nDevReward; + if(pindex->nHeight >= PEPE_STAKEONLY_HEIGHT) + nTotalDevRewards = 4 * nDevReward; + int64_t nMnRewardBase = nStakeReward - nTotalDevRewards; + masternodePaymentAmount = GetMasternodePayment(pindex->nHeight, nMnRewardBase); + } + else if(IsProofOfWork()) + { + masternodePaymentAmount = GetMasternodePayment(pindex->nHeight, vtx[0].GetValueOut()); + } + + bool fIsInitialDownload = IsInitialBlockDownload(); + + // If we don't already have its previous block, skip masternode payment step + if (!fIsInitialDownload && pindex != NULL) + { + bool foundPaymentAmount = false; + bool foundPayee = false; + + CScript payee; + if(!masternodePayments.GetBlockPayee(pindex->nHeight, payee) || payee == CScript()){ + foundPayee = true; //doesn't require a specific payee + + if(fDebug) { LogPrintf("CheckBlock() : Using non-specific masternode payments %d\n", pindex->nHeight); } + } + + int vtxIndex = 0; + if(IsProofOfStake()) + vtxIndex = 1; + + for (unsigned int i = 0; i < vtx[vtxIndex].vout.size(); i++) { + if(vtx[vtxIndex].vout[i].nValue == masternodePaymentAmount ) + foundPaymentAmount = true; + if(vtx[vtxIndex].vout[i].scriptPubKey == payee ) + foundPayee = true; + } + + if(!foundPaymentAmount || !foundPayee) { + CTxDestination address1; + ExtractDestination(payee, address1); + CBitcoinAddress address2(address1); + + if(fDebug) { LogPrintf("CheckBlock() : Couldn't find masternode payment(%d|%d) or payee(%d|%s) nHeight %d. \n", foundPaymentAmount, masternodePaymentAmount, foundPayee, address2.ToString().c_str(), pindex->nHeight); } + return DoS(1, error("CheckBlock() : Couldn't find masternode payment or payee")); + } else { + if(fDebug) { LogPrintf("CheckBlock() : Found masternode payment %d\n", pindexBest->nHeight+1); } + } + } else { + if(fDebug) { LogPrintf("CheckBlock() : Is initial download, skipping masternode payment check %d\n", pindex->nHeight); } + } + } else { + if(fDebug) { LogPrintf("CheckBlock() : Skipping masternode payment check - nHeight %d Hash %s\n", pindex->nHeight, GetHash().ToString().c_str()); } } + // ppcoin: track money supply and mint amount info pindex->nMint = nValueOut - nValueIn + nFees; pindex->nMoneySupply = (pindex->pprev? pindex->pprev->nMoneySupply : 0) + nValueOut - nValueIn; @@ -2343,8 +2546,19 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) return error("ConnectBlock() : UpdateTxIndex failed"); } - if(GetBoolArg("-addrindex", false)) + if(GetBoolArg("-addrindex", false) && !fJustCheck) { + CBitcoinAddress addrDevOne; + addrDevOne.SetString(DecodeBase64(PEPE_REBRAND_DEV_1)); + CScript payeeDevOne = GetScriptForDestination(addrDevOne.Get()); + CBitcoinAddress addrDevTwo; + addrDevTwo.SetString(DecodeBase64(PEPE_REBRAND_DEV_2)); + CScript payeeDevTwo = GetScriptForDestination(addrDevTwo.Get()); + CBitcoinAddress addrDevThree; + addrDevThree.SetString(DecodeBase64(PEPE_REBRAND_DEV_3)); + CScript payeeDevThree = GetScriptForDestination(addrDevThree.Get()); + + CTxDB txdbaddr("rw"); // Write Address Index BOOST_FOREACH(CTransaction& tx, vtx) { @@ -2355,7 +2569,7 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) MapPrevTx mapInputs; map mapQueuedChangesT; bool fInvalid; - if (!tx.FetchInputs(txdb, mapQueuedChangesT, true, false, mapInputs, fInvalid)) + if (!tx.FetchInputs(txdbaddr, mapQueuedChangesT, true, false, mapInputs, fInvalid)) return false; MapPrevTx::const_iterator mi; @@ -2364,12 +2578,16 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) BOOST_FOREACH(const CTxOut &atxout, (*mi).second.second.vout) { std::vector addrIds; - if(BuildAddrIndex(atxout.scriptPubKey, addrIds)) + + if(atxout.scriptPubKey != payeeDevOne && atxout.scriptPubKey != payeeDevTwo && atxout.scriptPubKey != payeeDevThree) { - BOOST_FOREACH(uint160 addrId, addrIds) + if(BuildAddrIndex(atxout.scriptPubKey, addrIds)) { - if(!txdb.WriteAddrIndex(addrId, hashTx)) - LogPrintf("ConnectBlock(): txins WriteAddrIndex failed addrId: %s txhash: %s\n", addrId.ToString().c_str(), hashTx.ToString().c_str()); + BOOST_FOREACH(uint160 addrId, addrIds) + { + if(!txdbaddr.WriteAddrIndex(addrId, hashTx)) + LogPrintf("ConnectBlock(): txins WriteAddrIndex failed addrId: %s txhash: %s\n", addrId.ToString().c_str(), hashTx.ToString().c_str()); + } } } } @@ -2379,13 +2597,16 @@ bool CBlock::ConnectBlock(CTxDB& txdb, CBlockIndex* pindex, bool fJustCheck) // outputs BOOST_FOREACH(const CTxOut &atxout, tx.vout) { - std::vector addrIds; - if(BuildAddrIndex(atxout.scriptPubKey, addrIds)) + if(atxout.scriptPubKey != payeeDevOne && atxout.scriptPubKey != payeeDevTwo && atxout.scriptPubKey != payeeDevThree) { - BOOST_FOREACH(uint160 addrId, addrIds) + std::vector addrIds; + if(BuildAddrIndex(atxout.scriptPubKey, addrIds)) { - if(!txdb.WriteAddrIndex(addrId, hashTx)) - LogPrintf("ConnectBlock(): txouts WriteAddrIndex failed addrId: %s txhash: %s\n", addrId.ToString().c_str(), hashTx.ToString().c_str()); + BOOST_FOREACH(uint160 addrId, addrIds) + { + if(!txdbaddr.WriteAddrIndex(addrId, hashTx)) + LogPrintf("ConnectBlock(): txouts WriteAddrIndex failed addrId: %s txhash: %s\n", addrId.ToString().c_str(), hashTx.ToString().c_str()); + } } } } @@ -2617,13 +2838,14 @@ bool CBlock::SetBestChain(CTxDB& txdb, CBlockIndex* pindexNew) nTimeBestReceived = GetTime(); mempool.AddTransactionsUpdated(1); - uint256 nBestBlockTrust = pindexBest->nHeight != 0 ? (pindexBest->nChainTrust - pindexBest->pprev->nChainTrust) : pindexBest->nChainTrust; - - LogPrintf("SetBestChain: new best=%s height=%d trust=%s blocktrust=%d date=%s\n", + // remove some unneeded log messages to reduce disk thrashing + /* + LogPrintf("SetBestChain: new best=%s height=%d trust=%s blocktrust=%d date=%s\n", hashBestChain.ToString(), nBestHeight, CBigNum(nBestChainTrust).ToString(), nBestBlockTrust.Get64(), DateTimeStrFormat("%x %H:%M:%S", pindexBest->GetBlockTime())); + */ // Check the version of the last 100 blocks to see if we need to upgrade: if (!fIsInitialDownload) @@ -2669,6 +2891,12 @@ bool CTransaction::GetCoinAge(CTxDB& txdb, const CBlockIndex* pindexPrev, uint64 int nStakeMinConfirmations = 360; if((pindexPrev->nHeight+1) > PEPE_STAKE_WINTER_SWITCH_HEIGHT) nStakeMinConfirmations = 60; + if((pindexPrev->nHeight+1) > PEPE_KEKDAQ_MID_FIX_HEIGHT) + nStakeMinConfirmations = 600; + if((pindexPrev->nHeight+1) > PEPE_STAKE_CONF_HEIGHT) + nStakeMinConfirmations = 360; + if((pindexPrev->nHeight+1) > PEPE_STAKE_CONF_TWEAK) + nStakeMinConfirmations = 600; if (IsCoinBase()) return true; @@ -2788,8 +3016,18 @@ bool CBlock::CheckBlock(bool fCheckPOW, bool fCheckMerkleRoot, bool fCheckSig) c return DoS(50, error("CheckBlock() : proof of work failed")); // Check timestamp - if (GetBlockTime() > FutureDrift(GetAdjustedTime())) + int nHeight = 0; + map::iterator miPrev = mapBlockIndex.find(hashPrevBlock); + if (miPrev != mapBlockIndex.end()) + { + nHeight = (*miPrev).second->nHeight + 1; + } + + if (GetBlockTime() > FutureDrift(GetAdjustedTime(), nHeight)) + { + LogPrintf("CheckBlock(): block timestamp too far in the future for block height: %d\n", nHeight); return error("CheckBlock() : block timestamp too far in the future"); + } // First transaction must be coinbase, the rest must not be if (vtx.empty() || !vtx[0].IsCoinBase()) @@ -2869,18 +3107,18 @@ bool CBlock::AcceptBlock() // Get prev block index map::iterator mi = mapBlockIndex.find(hashPrevBlock); if (mi == mapBlockIndex.end()) - return DoS(10, error("AcceptBlock() : prev block not found")); + return DoS(1, error("AcceptBlock() : prev block not found")); CBlockIndex* pindexPrev = (*mi).second; int nHeight = pindexPrev->nHeight+1; - if (IsProofOfWork() && nHeight > STOP_POW_BLOCK && nHeight < RESTART_POW_BLOCK ) + if (IsProofOfWork() && ((nHeight > STOP_POW_BLOCK && nHeight < RESTART_POW_BLOCK) || nHeight >= PEPE_STAKEONLY_HEIGHT)) return DoS(100, error("AcceptBlock() : reject proof-of-work at height %d", nHeight)); if (IsProofOfStake() && nHeight < Params().POSStartBlock() ) return DoS(100, error("AcceptBlock() : reject proof-of-stake at height <= %d", nHeight)); // Check coinbase timestamp - if (GetBlockTime() > FutureDrift((int64_t)vtx[0].nTime) && IsProofOfStake()) + if (GetBlockTime() > FutureDrift((int64_t)vtx[0].nTime, nHeight) && IsProofOfStake()) return DoS(50, error("AcceptBlock() : coinbase timestamp is too early")); // Check coinstake timestamp @@ -2888,11 +3126,14 @@ bool CBlock::AcceptBlock() return DoS(50, error("AcceptBlock() : coinstake timestamp violation nTimeBlock=%d nTimeTx=%u", GetBlockTime(), vtx[1].nTime)); // Check proof-of-work or proof-of-stake - if (nBits != GetNextTargetRequired(pindexPrev, IsProofOfStake())) - return DoS(100, error("AcceptBlock() : incorrect %s", IsProofOfWork() ? "proof-of-work" : "proof-of-stake")); + if (nBits != GetNextTargetRequired(pindexPrev, IsProofOfStake()) && + hash != uint256("0x73f988a95293b060f1b4034c5e62a6e4439090e5d19bf078f3c90548671c5a82") && // exception for block 886907 past hard-fork stick + hash != uint256("0x9b345b188b1fb5cbd535666cf678b53577b58481765705592d1d3c5986ed6ac6")) // exception for block 886416 past hard-fork stick + + return DoS(1, error("AcceptBlock() : incorrect %s", IsProofOfWork() ? "proof-of-work" : "proof-of-stake")); // Check timestamp against prev - if (GetBlockTime() <= pindexPrev->GetPastTimeLimit() || FutureDrift(GetBlockTime()) < pindexPrev->GetBlockTime()) + if (GetBlockTime() <= pindexPrev->GetPastTimeLimit() || FutureDrift(GetBlockTime(), nHeight) < pindexPrev->GetBlockTime()) return error("AcceptBlock() : block's timestamp is too early"); // Check that all transactions are finalized @@ -2902,7 +3143,7 @@ bool CBlock::AcceptBlock() // Check that the block chain matches the known block chain up to a checkpoint if (!Checkpoints::CheckHardened(nHeight, hash)) - return DoS(100, error("AcceptBlock() : rejected by hardened checkpoint lock-in at %d", nHeight)); + return DoS(10, error("AcceptBlock() : rejected by hardened checkpoint lock-in at %d", nHeight)); uint256 hashProof; // Verify hash target and signature of coinstake tx @@ -2953,6 +3194,119 @@ bool CBlock::AcceptBlock() return true; } +bool CBlock::CheckDevRewards(CTransaction tx, int64_t nHeight, int64_t nReward, int64_t nFees) +{ + // Check that the transaction contains + // the 3 dev reward outputs with the + // appropriate % of the total nReward for the block + + int64_t nDevReward = 0.02 * nReward; // 2% per dev reward + + if (nHeight > PEPE_REBRAND_PF_HEIGHT) + nDevReward = 0.04 * nReward; // 4% per dev reward + if (nHeight == PEPE_REBRAND_PF_HEIGHT) + nDevReward = PEPE_DEV_GRANT; + if (nHeight == PEPE_KEKDAQ_MID_FIX_HEIGHT) + nDevReward = PEPE_DEV_GRANT_MID; + if (nHeight == PEPE_IPFSMN_FNL_HEIGHT) + nDevReward = PEPE_DEV_GRANT_FINAL; + if (nHeight == PEPE_STAKE_CONF_HEIGHT) + nDevReward = PEPE_DEV_GRANT; + if (nHeight == PEPE_KEKDAQ2_SWAP_HEIGHT) + nDevReward = DEVFEE_OFF_SWAP_FINAL; + if (nHeight == PEPE_STAKEONLY_HEIGHT) + nDevReward = PEPE_SO_SWAP_GRANT; + + int64_t nTotalDevRewards = 3 * nDevReward; + if(nHeight >= PEPE_STAKEONLY_HEIGHT) + nTotalDevRewards = 4 * nDevReward; + + int64_t nFoundDevRewards = 0; + + CBitcoinAddress addrDevOne; + addrDevOne.SetString(DecodeBase64(PEPE_REBRAND_DEV_1)); + CScript payeeDevOne = GetScriptForDestination(addrDevOne.Get()); + CBitcoinAddress addrDevTwo; + addrDevTwo.SetString(DecodeBase64(PEPE_REBRAND_DEV_2)); + CScript payeeDevTwo = GetScriptForDestination(addrDevTwo.Get()); + CBitcoinAddress addrDevThree; + addrDevThree.SetString(DecodeBase64(PEPE_REBRAND_DEV_3)); + CScript payeeDevThree = GetScriptForDestination(addrDevThree.Get()); + CBitcoinAddress addrDevFour; + addrDevFour.SetString(DecodeBase64(PEPE_DEV_4)); + CScript payeeDevFour = GetScriptForDestination(addrDevFour.Get()); + + bool bFoundDevOne = false; + bool bFoundDevTwo = false; + bool bFoundDevThree = false; + bool bFoundDevFour = false; + for(unsigned int i=0; i addresses; + int nRequired; + + if (ExtractDestinations(tx.vout[i].scriptPubKey, type, addresses, nRequired)) + { + BOOST_FOREACH(const CTxDestination& addr, addresses) + { + CBitcoinAddress addrFound = CBitcoinAddress(addr); + + if(addrFound == addrDevOne) + { + if(tx.vout[i].nValue >= nDevReward) + { + bFoundDevOne = true; + nFoundDevRewards += nDevReward; + } + } + + if(addrFound == addrDevTwo) + { + if(tx.vout[i].nValue >= nDevReward) + { + bFoundDevTwo = true; + nFoundDevRewards += nDevReward; + } + } + + if(addrFound == addrDevThree) + { + if(tx.vout[i].nValue >= nDevReward) + { + bFoundDevThree = true; + nFoundDevRewards += nDevReward; + } + } + + if(addrFound == addrDevFour) + { + if(tx.vout[i].nValue >= nDevReward) + { + bFoundDevFour = true; + nFoundDevRewards += nDevReward; + } + } + } + } + } + + if(nHeight >= PEPE_STAKEONLY_HEIGHT) + { + if((bFoundDevOne && bFoundDevTwo && bFoundDevThree && bFoundDevFour) && (nFoundDevRewards >= nTotalDevRewards)) + return true; + else + return false; + } + else + { + if((bFoundDevOne && bFoundDevTwo && bFoundDevThree) && (nFoundDevRewards >= nTotalDevRewards)) + return true; + else + return false; + } +} + uint256 CBlockIndex::GetBlockTrust() const { CBigNum bnTarget; @@ -3027,6 +3381,14 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock) // If we don't already have its previous block, shunt it off to holding area until we get it if (!mapBlockIndex.count(pblock->hashPrevBlock)) { + if(IsSyncing()) + { + pfrom->fDisconnect = true; + pfrom->fStartSync = false; + nAskedForBlocks = 0; + return error("ProcessBlock(): ORPHAN detected, but we syncing. Disconnecting from peer.\n"); + } + LogPrintf("ProcessBlock: ORPHAN BLOCK %lu, prev=%s\n", (unsigned long)mapOrphanBlocks.size(), pblock->hashPrevBlock.ToString()); // Accept orphans as long as there is a node to request its parents from @@ -3093,67 +3455,50 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock) mapOrphanBlocksByPrev.erase(hashPrev); } - if(!IsInitialBlockDownload()){ - - CScript payee; - CTxIn vin; - - // If we're in LiteMode disable darksend features without disabling masternodes - if (!fLiteMode && !fImporting && !fReindex && pindexBest->nHeight > Checkpoints::GetTotalBlocksEstimate()){ - - if(masternodePayments.GetBlockPayee(pindexBest->nHeight, payee, vin)){ - //UPDATE MASTERNODE LAST PAID TIME - CMasternode* pmn = mnodeman.Find(vin); - if(pmn != NULL) { - pmn->nLastPaid = GetAdjustedTime(); - } - - LogPrintf("ProcessBlock() : Update Masternode Last Paid Time - %d\n", pindexBest->nHeight); - } - - darkSendPool.CheckTimeout(); - darkSendPool.NewBlock(); - masternodePayments.ProcessBlock(GetHeight()+10); - - } else if (fLiteMode && !fImporting && !fReindex && pindexBest->nHeight > Checkpoints::GetTotalBlocksEstimate()) + // Cache any found pepe messages + if(GetBoolArg("-messagewall", false)) + { + CTxDB txdb("rw"); + BOOST_FOREACH(const CTransaction& tx, pblock->vtx) { - if(masternodePayments.GetBlockPayee(pindexBest->nHeight, payee, vin)){ - //UPDATE MASTERNODE LAST PAID TIME - CMasternode* pmn = mnodeman.Find(vin); - if(pmn != NULL) { - pmn->nLastPaid = GetAdjustedTime(); + BOOST_FOREACH(const CTxOut vout, tx.vout) + { + if(vout.scriptPubKey.size() > 0 && vout.scriptPubKey[0] == OP_RETURN) + { + std::vector vch(vout.scriptPubKey.begin()+2,vout.scriptPubKey.end()); + std::string astring(vch.begin(), vch.end()); + CPepeMessage pmsg; + pmsg.nTime = tx.nTime; + pmsg.msg = astring; + txdb.WritePepeMessage(pmsg.GetHash(), pmsg); + if(mapPepeMessages.count(pmsg.GetHash()) == 0) + mapPepeMessages.insert(make_pair(pmsg.GetHash(), pmsg)); } - - LogPrintf("ProcessBlock() : Update Masternode Last Paid Time - %d\n", pindexBest->nHeight); } - - masternodePayments.ProcessBlock(GetHeight()+10); } + } - } + int nShift = (pblock->nBits >> 24) & 0xff; + double dDiff = (double)0x0000ffff / (double)(pblock->nBits & 0x00ffffff); - // Cache any found pepe messages - CTxDB txdb("rw"); - BOOST_FOREACH(const CTransaction& tx, pblock->vtx) + while (nShift < 29) { - BOOST_FOREACH(const CTxOut vout, tx.vout) - { - if(vout.scriptPubKey.size() > 0 && vout.scriptPubKey[0] == OP_RETURN) - { - std::vector vch(vout.scriptPubKey.begin()+2,vout.scriptPubKey.end()); - std::string astring(vch.begin(), vch.end()); - CPepeMessage pmsg; - pmsg.nTime = tx.nTime; - pmsg.msg = astring; - txdb.WritePepeMessage(pmsg.GetHash(), pmsg); - if(mapPepeMessages.count(pmsg.GetHash()) == 0) - mapPepeMessages.insert(make_pair(pmsg.GetHash(), pmsg)); - } - } + dDiff *= 256.0; + nShift++; } - + while (nShift > 29) + { + dDiff /= 256.0; + nShift--; + } + LogPrintf("ProcessBlock: ACCEPTED Height: %d Difficulty: %d\n", mapBlockIndex[hash]->nHeight, dDiff); - LogPrintf("ProcessBlock: ACCEPTED\n"); +#ifdef ENABLE_WALLET + { + LOCK(pwalletMain->cs_wallet); + pwalletMain->fCachedBalanceNeedsUpdating = true; // update cached balance in case coins came out of stake with the accepted block + } +#endif return true; } @@ -3631,151 +3976,154 @@ bool static AlreadyHave(CTxDB& txdb, const CInv& inv) void static ProcessGetData(CNode* pfrom) { - std::deque::iterator it = pfrom->vRecvGetData.begin(); + { + std::deque::iterator it = pfrom->vRecvGetData.begin(); - vector vNotFound; + vector vNotFound; - LOCK(cs_main); - - while (it != pfrom->vRecvGetData.end()) { - // Don't bother if send buffer is too full to respond anyway - if (pfrom->nSendSize >= SendBufferSize()) - break; + LOCK(cs_main); - const CInv &inv = *it; - { - boost::this_thread::interruption_point(); - it++; + while (it != pfrom->vRecvGetData.end()) { + // Don't bother if send buffer is too full to respond anyway + if (pfrom->nSendSize >= SendBufferSize()) + break; - if (inv.type == MSG_BLOCK || inv.type == MSG_FILTERED_BLOCK) + const CInv &inv = *it; { - // Send block from disk - map::iterator mi = mapBlockIndex.find(inv.hash); - if (mi != mapBlockIndex.end()) - { - CBlock block; - block.ReadFromDisk((*mi).second); - pfrom->PushMessage("block", block); + boost::this_thread::interruption_point(); + it++; - // Trigger them to send a getblocks request for the next batch of inventory - if (inv.hash == pfrom->hashContinue) + if (inv.type == MSG_BLOCK || inv.type == MSG_FILTERED_BLOCK) + { + // Send block from disk + map::iterator mi = mapBlockIndex.find(inv.hash); + if (mi != mapBlockIndex.end()) { - // Bypass PushInventory, this must send even if redundant, - // and we want it right after the last block so they don't - // wait for other stuff first. - vector vInv; - vInv.push_back(CInv(MSG_BLOCK, hashBestChain)); - pfrom->PushMessage("inv", vInv); - pfrom->hashContinue = 0; + CBlock block; + block.ReadFromDisk((*mi).second); + pfrom->PushMessage("block", block); + + // Trigger them to send a getblocks request for the next batch of inventory + if (inv.hash == pfrom->hashContinue) + { + // Bypass PushInventory, this must send even if redundant, + // and we want it right after the last block so they don't + // wait for other stuff first. + vector vInv; + vInv.push_back(CInv(MSG_BLOCK, hashBestChain)); + pfrom->PushMessage("inv", vInv); + pfrom->hashContinue = 0; + } } } - } - else if (inv.IsKnownType()) - { - if(fDebug) LogPrintf("ProcessGetData -- Starting \n"); - // Send stream from relay memory - bool pushed = false; - /*{ - LOCK(cs_mapRelay); - map::iterator mi = mapRelay.find(inv); - if (mi != mapRelay.end()) { - pfrom->PushMessage(inv.GetCommand(), (*mi).second); - if(fDebug) LogPrintf("ProcessGetData -- pushed = true Rest will fail\n"); - pushed = true; + else if (inv.IsKnownType()) + { + if(fDebug) LogPrintf("ProcessGetData -- Starting \n"); + // Send stream from relay memory + bool pushed = false; + { + LOCK(cs_mapRelay); + map::iterator mi = mapRelay.find(inv); + if (mi != mapRelay.end()) { + pfrom->PushMessage(inv.GetCommand(), (*mi).second); + if(fDebug) LogPrintf("ProcessGetData -- pushed = true Rest will fail\n"); + pushed = true; + } } - }*/ - if (!pushed && inv.type == MSG_TX) { - - CTransaction tx; - if (mempool.lookup(inv.hash, tx)) { - CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); - ss.reserve(1000); - ss << tx; - pfrom->PushMessage("tx", ss); - pushed = true; + + if (!pushed && inv.type == MSG_TX) { + + CTransaction tx; + if (mempool.lookup(inv.hash, tx)) { + CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); + ss.reserve(1000); + ss << tx; + pfrom->PushMessage("tx", ss); + pushed = true; + } } - } - if (!pushed && inv.type == MSG_TXLOCK_VOTE) { - if(mapTxLockVote.count(inv.hash)){ - CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); - ss.reserve(1000); - ss << mapTxLockVote[inv.hash]; - pfrom->PushMessage("txlvote", ss); - pushed = true; + if (!pushed && inv.type == MSG_TXLOCK_VOTE) { + if(mapTxLockVote.count(inv.hash)){ + CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); + ss.reserve(1000); + ss << mapTxLockVote[inv.hash]; + pfrom->PushMessage("txlvote", ss); + pushed = true; + } } - } - if (!pushed && inv.type == MSG_TXLOCK_REQUEST) { - if(mapTxLockReq.count(inv.hash)){ - CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); - ss.reserve(1000); - ss << mapTxLockReq[inv.hash]; - pfrom->PushMessage("txlreq", ss); - pushed = true; + if (!pushed && inv.type == MSG_TXLOCK_REQUEST) { + if(mapTxLockReq.count(inv.hash)){ + CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); + ss.reserve(1000); + ss << mapTxLockReq[inv.hash]; + pfrom->PushMessage("txlreq", ss); + pushed = true; + } } - } - if (!pushed && inv.type == MSG_SPORK) { - if(mapSporks.count(inv.hash)){ - CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); - ss.reserve(1000); - ss << mapSporks[inv.hash]; - pfrom->PushMessage("spork", ss); - pushed = true; + if (!pushed && inv.type == MSG_SPORK) { + if(mapSporks.count(inv.hash)){ + CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); + ss.reserve(1000); + ss << mapSporks[inv.hash]; + pfrom->PushMessage("spork", ss); + pushed = true; + } } - } - if (!pushed && inv.type == MSG_MASTERNODE_WINNER) { - if(mapSeenMasternodeVotes.count(inv.hash)){ - CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); - ss.reserve(1000); - ss << mapSeenMasternodeVotes[inv.hash]; - pfrom->PushMessage("mnw", ss); - pushed = true; + if (!pushed && inv.type == MSG_MASTERNODE_WINNER) { + if(mapSeenMasternodeVotes.count(inv.hash)){ + CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); + ss.reserve(1000); + ss << mapSeenMasternodeVotes[inv.hash]; + pfrom->PushMessage("mnw", ss); + pushed = true; + } } - } - if (!pushed && inv.type == MSG_DSTX) { - if(mapDarksendBroadcastTxes.count(inv.hash)){ - CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); - ss.reserve(1000); - ss << - mapDarksendBroadcastTxes[inv.hash].tx << - mapDarksendBroadcastTxes[inv.hash].vin << - mapDarksendBroadcastTxes[inv.hash].vchSig << - mapDarksendBroadcastTxes[inv.hash].sigTime; - - pfrom->PushMessage("dstx", ss); - pushed = true; + if (!pushed && inv.type == MSG_DSTX) { + if(mapDarksendBroadcastTxes.count(inv.hash)){ + CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); + ss.reserve(1000); + ss << + mapDarksendBroadcastTxes[inv.hash].tx << + mapDarksendBroadcastTxes[inv.hash].vin << + mapDarksendBroadcastTxes[inv.hash].vchSig << + mapDarksendBroadcastTxes[inv.hash].sigTime; + + pfrom->PushMessage("dstx", ss); + pushed = true; + } + } + if (!pushed) { + vNotFound.push_back(inv); } } - if (!pushed) { - vNotFound.push_back(inv); - } - } - // Track requests for our stuff. - g_signals.Inventory(inv.hash); + // Track requests for our stuff. + g_signals.Inventory(inv.hash); - if (inv.type == MSG_BLOCK || inv.type == MSG_FILTERED_BLOCK) - break; + if (inv.type == MSG_BLOCK || inv.type == MSG_FILTERED_BLOCK) + break; + } } - } - - pfrom->vRecvGetData.erase(pfrom->vRecvGetData.begin(), it); - if (!vNotFound.empty()) { - // Let the peer know that we didn't find what it asked for, so it doesn't - // have to wait around forever. Currently only SPV clients actually care - // about this message: it's needed when they are recursively walking the - // dependencies of relevant unconfirmed transactions. SPV clients want to - // do that because they want to know about (and store and rebroadcast and - // risk analyze) the dependencies of transactions relevant to them, without - // having to download the entire memory pool. - pfrom->PushMessage("notfound", vNotFound); + pfrom->vRecvGetData.erase(pfrom->vRecvGetData.begin(), it); + + if (!vNotFound.empty()) { + // Let the peer know that we didn't find what it asked for, so it doesn't + // have to wait around forever. Currently only SPV clients actually care + // about this message: it's needed when they are recursively walking the + // dependencies of relevant unconfirmed transactions. SPV clients want to + // do that because they want to know about (and store and rebroadcast and + // risk analyze) the dependencies of transactions relevant to them, without + // having to download the entire memory pool. + pfrom->PushMessage("notfound", vNotFound); + } } } bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, int64_t nTimeReceived) { RandAddSeedPerfmon(); - LogPrint("net", "received: %s (%u bytes)\n", strCommand, vRecv.size()); + LogPrint("net", "received: %s (%u bytes) peer=%s\n", strCommand, vRecv.size(), pfrom->addr.ToString()); if (mapArgs.count("-dropmessagestest") && GetRand(atoi(mapArgs["-dropmessagestest"])) == 0) { LogPrintf("dropmessagestest DROPPING RECV MESSAGE\n"); @@ -3801,6 +4149,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, // disconnect from peers older than this proto version LogPrintf("partner %s using obsolete version %i; disconnecting\n", pfrom->addr.ToString(), pfrom->nVersion); pfrom->fDisconnect = true; + pfrom->Misbehaving(100); // just ban them return false; } @@ -3812,6 +4161,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, vRecv >> pfrom->strSubVer; if (!vRecv.empty()) vRecv >> pfrom->nStartingHeight; + + pfrom->fRelayTxes = true; pfrom->cleanSubVer = SanitizeString(pfrom->strSubVer); @@ -3869,6 +4220,22 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } + //--- + // Ask the first connected node for block updates + + if (!pfrom->fClient && !pfrom->fOneShot && !pfrom->fDisconnect && + (pfrom->nStartingHeight > nBestHeight) && + (pfrom->nVersion < NOBLKS_VERSION_START || + pfrom->nVersion > NOBLKS_VERSION_END) && + (nAskedForBlocks < 1 || vNodes.size() <= 1)) + { + pfrom->fStartSync = true; + nAskedForBlocks++; + PushGetBlocks(pfrom, pindexBest, uint256(0)); + pfrom->tGetblocks = GetTimeMillis(); + } + //--- + // Relay alerts { LOCK(cs_mapAlerts); @@ -3974,7 +4341,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, pfrom->Misbehaving(20); return error("message inv size() = %u", vInv.size()); } - + // find last block in inv vector unsigned int nLastBlock = (unsigned int)(-1); for (unsigned int nInv = 0; nInv < vInv.size(); nInv++) { @@ -3983,8 +4350,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, break; } } - + LOCK(cs_main); + int nBlocksGet = 0; + CTxDB txdb("r"); for (unsigned int nInv = 0; nInv < vInv.size(); nInv++) @@ -3999,7 +4368,13 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, if (!fAlreadyHave) { if (!fImporting) - pfrom->AskFor(inv); + if (inv.type == MSG_BLOCK) { + if (pfrom->tGetblocks > pfrom->tBlockInvs || !IsSyncing()) { + pfrom->AskFor(inv); + nBlocksGet++; + } + } else + pfrom->AskFor(inv); } else if (inv.type == MSG_BLOCK && mapOrphanBlocks.count(inv.hash)) { PushGetBlocks(pfrom, pindexBest, GetOrphanRoot(inv.hash)); } else if (nInv == nLastBlock) { @@ -4011,9 +4386,13 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, LogPrintf("force request: %s\n", inv.ToString()); } + // Track requests for our stuff g_signals.Inventory(inv.hash); } + + if (nBlocksGet) + pfrom->tBlockInvs = GetTimeMillis(); } @@ -4052,7 +4431,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, // Send the rest of the chain if (pindex) pindex = pindex->pnext; - int nLimit = 5000; + int nLimit = 500; LogPrint("net", "getblocks %d to %s limit %d\n", (pindex ? pindex->nHeight : -1), hashStop.ToString(), nLimit); for (; pindex; pindex = pindex->pnext) { @@ -4075,12 +4454,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, else if (strCommand == "getheaders") { - CBlockLocator locator; + /*CBlockLocator locator; uint256 hashStop; vRecv >> locator >> hashStop; - LOCK(cs_main); - CBlockIndex* pindex = NULL; if (locator.IsNull()) { @@ -4097,9 +4474,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, if (pindex) pindex = pindex->pnext; } - vector vHeaders; - int nLimit = 2000; + int nLimit = 500; LogPrint("net", "getheaders %d to %s\n", (pindex ? pindex->nHeight : -1), hashStop.ToString()); for (; pindex; pindex = pindex->pnext) { @@ -4107,64 +4483,23 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, if (--nLimit <= 0 || pindex->GetBlockHash() == hashStop) break; } - pfrom->PushMessage("headers", vHeaders); + pfrom->PushMessage("headers", vHeaders);*/ } - else if (strCommand == "tx"|| strCommand == "dstx") + else if (strCommand == "tx") { vector vWorkQueue; vector vEraseQueue; CTransaction tx; - - //masternode signed transaction - bool ignoreFees = false; - CTxIn vin; - vector vchSig; - int64_t sigTime; - - if(strCommand == "tx") { - vRecv >> tx; - } else if (strCommand == "dstx") { - //these allow masternodes to publish a limited amount of free transactions - vRecv >> tx >> vin >> vchSig >> sigTime; - - CMasternode* pmn = mnodeman.Find(vin); - if(pmn != NULL) - { - if(!pmn->allowFreeTx){ - //multiple peers can send us a valid masternode transaction - if(fDebug) LogPrintf("dstx: Masternode sending too many transactions %s\n", tx.GetHash().ToString().c_str()); - return true; - } - - std::string strMessage = tx.GetHash().ToString() + boost::lexical_cast(sigTime); - - std::string errorMessage = ""; - if(!darkSendSigner.VerifyMessage(pmn->pubkey2, vchSig, strMessage, errorMessage)){ - LogPrintf("dstx: Got bad masternode address signature %s \n", vin.ToString().c_str()); - //pfrom->Misbehaving(20); - return false; - } - - LogPrintf("dstx: Got Masternode transaction %s\n", tx.GetHash().ToString().c_str()); - - ignoreFees = true; - pmn->allowFreeTx = false; - - if(!mapDarksendBroadcastTxes.count(tx.GetHash())){ - CDarksendBroadcastTx dstx; - dstx.tx = tx; - dstx.vin = vin; - dstx.vchSig = vchSig; - dstx.sigTime = sigTime; - - mapDarksendBroadcastTxes.insert(make_pair(tx.GetHash(), dstx)); - } - } - } + vRecv >> tx; + CTxDB txdb("r"); CInv inv(MSG_TX, tx.GetHash()); + // Check for recently rejected (and do other quick existence checks) + if (AlreadyHave(txdb, inv)) + return true; + pfrom->AddInventoryKnown(inv); LOCK(cs_main); @@ -4173,7 +4508,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, mapAlreadyAskedFor.erase(inv); - if (AcceptToMemoryPool(mempool, tx, true, &fMissingInputs, false, ignoreFees)) + if (AcceptToMemoryPool(mempool, tx, true, &fMissingInputs)) { RelayTransaction(tx, inv.hash); vWorkQueue.push_back(inv.hash); @@ -4221,29 +4556,36 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, if (nEvicted > 0) LogPrint("mempool", "mapOrphan overflow, removed %u tx\n", nEvicted); } - if(strCommand == "dstx"){ - CInv inv(MSG_DSTX, tx.GetHash()); - RelayInventory(inv); - } if (tx.nDoS) pfrom->Misbehaving(tx.nDoS); } - else if (strCommand == "block" && !fImporting && !fReindex) // Ignore blocks received while importing { + int size = vRecv.size(); CBlock block; vRecv >> block; uint256 hashBlock = block.GetHash(); - LogPrint("net", "received block %s\n", hashBlock.ToString()); + //LogPrint("net", "received block %s\n", hashBlock.ToString()); CInv inv(MSG_BLOCK, hashBlock); + pfrom->AddInventoryKnown(inv); + int timetodownload = GetTimeMillis() - pfrom->tBlockRecved/1000; + if (timetodownload > 1000) + LogPrint("net", "received block %s (%u bytes, %us, %uB/s) peer=%d\n", + inv.hash.ToString(), size, timetodownload / 1000, size * 1000 / timetodownload, pfrom->id); + else + LogPrint("net", "received block %s (%u bytes) peer=%d\n", inv.hash.ToString(), size, pfrom->id); + LOCK(cs_main); if (ProcessBlock(pfrom, &block)) + { mapAlreadyAskedFor.erase(inv); + pfrom->tBlockRecved = GetTimeMillis(); + } if (block.nDoS) pfrom->Misbehaving(block.nDoS); if (fSecMsgEnabled) SecureMsgScanBlock(block); @@ -4395,15 +4737,21 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, else - { - if (fSecMsgEnabled) - SecureMsgReceiveData(pfrom, strCommand, vRecv); - - darkSendPool.ProcessMessageDarksend(pfrom, strCommand, vRecv); - mnodeman.ProcessMessage(pfrom, strCommand, vRecv); - ProcessMessageMasternodePayments(pfrom, strCommand, vRecv); - ProcessMessageInstantX(pfrom, strCommand, vRecv); - ProcessSpork(pfrom, strCommand, vRecv); + { + if(IsSyncing() && !pfrom->fStartSync) + { + pfrom->fDisconnect = true; + } + else if(!fLiteMode && !IsSyncing()) + { + if (fSecMsgEnabled) + SecureMsgReceiveData(pfrom, strCommand, vRecv); + + ProcessMessageDarksend(pfrom, strCommand, vRecv); + ProcessMessageMasternode(pfrom, strCommand, vRecv); + ProcessMessageInstantX(pfrom, strCommand, vRecv); + ProcessSpork(pfrom, strCommand, vRecv); + } // Ignore unknown commands for extensibility } @@ -4432,7 +4780,7 @@ bool ProcessMessages(CNode* pfrom) // (4) checksum // (x) data // - bool fOk = true; + bool fOk = true; if (!pfrom->vRecvGetData.empty()) ProcessGetData(pfrom); @@ -4448,12 +4796,28 @@ bool ProcessMessages(CNode* pfrom) // get next message CNetMessage& msg = *it; + CMessageHeader& hdr = msg.hdr; + unsigned int nMessageSize = hdr.nMessageSize; + string strCommand = hdr.GetCommand(); //if (fDebug) // LogPrintf("ProcessMessages(message %u msgsz, %zu bytes, complete:%s)\n", // msg.hdr.nMessageSize, msg.vRecv.size(), // msg.complete() ? "Y" : "N"); + if (msg.nDataPos != msg.nLastDataPos) { + if (strCommand == "block") { + if (msg.nLastDataPos == 0) { + pfrom->tBlockRecvStart = GetTimeMillis(); + if (pfrom->tBlockRecved) + LogPrint("net", "%ums later, ", pfrom->tBlockRecvStart - pfrom->tBlockRecved); + LogPrint("net", "incoming block (%u bytes) peer=%d\n", nMessageSize, pfrom->id); + } + pfrom->tBlockRecving = GetTimeMillis(); + } + msg.nLastDataPos = msg.nDataPos; + } + // end, if an incomplete message is found if (!msg.complete()) break; @@ -4469,16 +4833,16 @@ bool ProcessMessages(CNode* pfrom) } // Read header - CMessageHeader& hdr = msg.hdr; + //CMessageHeader& hdr = msg.hdr; if (!hdr.IsValid()) { - LogPrintf("\n\nPROCESSMESSAGE: ERRORS IN HEADER %s\n\n\n", hdr.GetCommand()); + LogPrintf("\n\nPROCESSMESSAGE: ERRORS IN HEADER %s\n\n\n", strCommand); continue; } - string strCommand = hdr.GetCommand(); + //string strCommand = hdr.GetCommand(); // Message size - unsigned int nMessageSize = hdr.nMessageSize; + //unsigned int nMessageSize = hdr.nMessageSize; // Checksum CDataStream& vRecv = msg.vRecv; @@ -4542,7 +4906,8 @@ bool ProcessMessages(CNode* pfrom) bool SendMessages(CNode* pto, bool fSendTrickle) { TRY_LOCK(cs_main, lockMain); - if (lockMain) { + if (lockMain) + { // Don't send anything until we get their version message if (pto->nVersion == 0) return true; @@ -4576,15 +4941,15 @@ bool SendMessages(CNode* pto, bool fSendTrickle) } } - TRY_LOCK(cs_main, lockMain); // Acquire cs_main for IsInitialBlockDownload() and CNodeState() - if (!lockMain) - return true; + //TRY_LOCK(cs_main, lockMain); // Acquire cs_main for IsInitialBlockDownload() and CNodeState() + //if (!lockMain) + // return true; // Start block sync - if (pto->fStartSync && !fImporting && !fReindex) { + /* if (pto->fStartSync && !fImporting && !fReindex) { pto->fStartSync = false; PushGetBlocks(pto, pindexBest, uint256(0)); - } + }*/ // Resend wallet transactions that haven't gotten in a block yet // Except during reindex, importing and IBD, when old wallet @@ -4659,8 +5024,9 @@ bool SendMessages(CNode* pto, bool fSendTrickle) if (pto->setInventoryKnown.count(inv)) continue; + // --- Don't trickle tx's, network is too small and results in transaction delays --- // trickle out tx inv to protect privacy - if (inv.type == MSG_TX && !fSendTrickle) + /* if (inv.type == MSG_TX && !fSendTrickle) { // 1/4 of tx invs blast to all immediately static uint256 hashSalt; @@ -4675,7 +5041,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle) vInvWait.push_back(inv); continue; } - } + }*/ // returns true if wasn't already contained in the set if (pto->setInventoryKnown.insert(inv).second) @@ -4693,6 +5059,34 @@ bool SendMessages(CNode* pto, bool fSendTrickle) if (!vInv.empty()) pto->PushMessage("inv", vInv); + // Detect stalled peers. + int nSyncTimeout = GetArg("-synctimeout", 60); + int64_t tNow = GetTimeMillis(); + if (pto->tGetblocks && IsSyncing()) { + if (pto->tBlockRecving > pto->tBlockRecved) { + if (tNow-pto->tBlockRecving > nSyncTimeout * 1000) { + LogPrintf("sync peer=%d: Block download stalled for over %d seconds.\n", pto->id, nSyncTimeout); + pto->fDisconnect = true; + pto->fStartSync = false; + nAskedForBlocks = 0; + } + } else if (pto->tGetblocks > pto->tBlockInvs && tNow-pto->tGetblocks > nSyncTimeout * 1000) { + LogPrintf("sync peer=%d: No invs of new blocks received within %d seconds.\n", pto->id, nSyncTimeout); + pto->fDisconnect = true; + pto->fStartSync = false; + nAskedForBlocks = 0; + } else if (IsSyncing() && pto->tBlockRecved && tNow-pto->tBlockRecved > nSyncTimeout * 1000) { + LogPrintf("sync peer=%d: No block reception for over %d seconds.\n", pto->id, nSyncTimeout); + pto->fDisconnect = true; + pto->fStartSync = false; + nAskedForBlocks = 0; + } else if (pto->tGetdataBlock > pto->tBlockRecving && tNow-pto->tGetdataBlock > nSyncTimeout * 1000) { + LogPrintf("sync peer=%d: No block download started for over %d seconds.\n", pto->id, nSyncTimeout); + pto->fDisconnect = true; + pto->fStartSync = false; + nAskedForBlocks = 0; + } + } // // Message: getdata @@ -4708,6 +5102,8 @@ bool SendMessages(CNode* pto, bool fSendTrickle) if (fDebug) LogPrint("net", "sending getdata: %s\n", inv.ToString()); vGetData.push_back(inv); + if (!pto->tGetdataBlock) + pto->tGetdataBlock = GetTimeMillis(); if (vGetData.size() >= 1000) { pto->PushMessage("getdata", vGetData); @@ -4731,7 +5127,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle) int64_t GetMasternodePayment(int nHeight, int64_t blockValue) { - int64_t ret = blockValue * 0.1; // 10% Masternodes pay + staking + int64_t ret = blockValue * 0.375; // 37.5% Masternodes pay + staking return ret; } @@ -4775,4 +5171,4 @@ void RescanPepeMessages() pindex = pindex->pprev; } -} \ No newline at end of file +} diff --git a/src/main.h b/src/main.h index 3287aa9c..fb151d58 100644 --- a/src/main.h +++ b/src/main.h @@ -9,7 +9,7 @@ // Copyright (c) 2014 NetCoin Developers // Copyright (c) 2015 Transfercoin Developer // Copyright (c) 2015-2016 PepeCoin Developers -// Copyright (c) 2016 The Memetic Developers +// Copyright (c) 2016-2019 Memetic / PepeCoin Developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -26,13 +26,15 @@ #include "hashblock.h" #include +#include class CValidationState; -#define START_MASTERNODE_PAYMENTS_TESTNET 1460635200 // "20160414 0600" -#define START_MASTERNODE_PAYMENTS 1460635200 +#define START_MASTERNODE_PAYMENTS_TESTNET 1496987073 // June 9, 2017 2:20:04 AM GMT +#define START_MASTERNODE_PAYMENTS 1499579073 // Sunday, July 9, 2017 5:44:33 AM GMT -static const int64_t DARKSEND_COLLATERAL = (0.01*COIN); +static const int64_t DARKSEND_COLLATERAL = (5000*COIN); +static const int64_t DARKSEND_FEE = (0.0001*COIN); static const int64_t DARKSEND_POOL_MAX = (9999.99*COIN); static const int64_t TARGET_SPACING = 60; @@ -55,10 +57,43 @@ class CReserveKey; class CWallet; class CPepeMessage; +static const int64_t PEPE_JACKOLANTERN_FORK_HEIGHT = 888000; +static const int64_t PEPE_NTARGETTIMESPAN_UNSTICK_HEIGHT = 885655; + +static const int64_t MASTERTOAD_LOWERTRAFFIC_FORK = 1030000; +static const int64_t MASTERTOAD_RELOWERTRAFFIC_FORK = 1177777; + static const int64_t PEPE_STAKE_WINTER_SWITCH_HEIGHT = 312000; static const int64_t PEPE_STAKE_V2_SWITCH_HEIGHT = 32000; static const int64_t PEPE_STAKE_V2_SWITCH_HEIGHT_TESTNET = 10; + +// Rebrand Back To PEPE Hardfork +// At this height, POS moves to 7%, POW moves to 7 for 1 month of blocks then 5 and then halving every year +// and dev reward is implemented (3 dev addresses at 3% each) +static const int64_t PEPE_REBRAND_HEIGHT = 580000; +static const int64_t PEPE_REBRAND_HEIGHT_TESTNET = 100; +static const std::string PEPE_REBRAND_DEV_1 = "UE5hSlMzbVBNY1FjNmdZc0xKMUg4endHSDZIMVh4VG40OA=="; +static const std::string PEPE_REBRAND_DEV_2 = "UFJyeFZQWGNUQjN2TGNjZlBVRlRNVzJ6NTd3Skd3ZEd1ag=="; +static const std::string PEPE_REBRAND_DEV_3 = "UExSY1ZHVmNZdkE2NmJNWGVQd2hSUTJleFdNdlBvVm83MQ=="; +static const std::string PEPE_DEV_4 = "UFUxWm05N3R6NmRyQ0FuQmZNYjVFd2s3R0NSa3FYV2dZeA=="; +static const int64_t PEPE_REBRAND_PF_HEIGHT = 600000; +static const int64_t PEPE_KEKDAQ_MID_HEIGHT = 733333; +static const int64_t PEPE_KEKDAQ_MID_FIX_HEIGHT = 738500; +static const int64_t PEPE_IPFSMN_FNL_HEIGHT = 833333; +static const int64_t PEPE_KEKDAQ2_SWAP_HEIGHT = 1161137; +static const int64_t PEPE_REBRAND_PF_HEIGHT_TESTNET = 200; +static const int64_t PEPE_KEKDAQ_MID_HEIGHT_TESTNET = 10000; +static const int64_t PEPE_DEV_GRANT = 333333 * COIN; +static const int64_t PEPE_DEV_GRANT_MID = 333333 * COIN; +static const int64_t PEPE_DEV_GRANT_FINAL = 111111 * COIN; +static const int64_t DEVFEE_OFF_SWAP_FINAL = 777777 * COIN; +static const int64_t PEPE_SO_SWAP_GRANT = 888888 * COIN; +static const int64_t PEPE_STAKE_CONF_HEIGHT = 1021111; +static const int64_t PEPE_STAKE_CONF_TWEAK = 1177777; +static const int64_t PEPE_STAKEONLY_HEIGHT = 1700000; +static const int64_t PEPE_DIFFIMPROVE_HEIGHT = 1830000; + /** The maximum allowed size for a serialized block, in bytes (network rule) */ static const unsigned int MAX_BLOCK_SIZE = 20000000; /** The maximum size for mined blocks */ @@ -76,18 +111,18 @@ static const unsigned int MAX_TX_SIGOPS = MAX_BLOCK_SIGOPS/5; /** The maximum number of orphan transactions kept in memory */ static const unsigned int MAX_ORPHAN_TRANSACTIONS = MAX_BLOCK_SIZE/100; /** Default for -maxorphanblocks, maximum number of orphan blocks kept in memory */ -static const unsigned int DEFAULT_MAX_ORPHAN_BLOCKS = 10000; +static const unsigned int DEFAULT_MAX_ORPHAN_BLOCKS = 750; /** The maximum number of entries in an 'inv' protocol message */ static const unsigned int MAX_INV_SZ = 50000; /** Fees smaller than this (in satoshi) are considered zero fee (for transaction creation) */ static const int64_t MIN_TX_FEE = 0.0001*COIN; /** Fees smaller than this (in satoshi) are considered zero fee (for relaying) */ static const int64_t MIN_RELAY_TX_FEE = MIN_TX_FEE; -/** No amount larger than this (in satoshi) is valid */ -static const int64_t MAX_MONEY = 16628690 * COIN; // 16,628,690 POW Coins - -// Pepe Stake Rate PSR / PIR : Staking rewards are variable depending on the number of coins held. +/** No amount larger than this (in satoshi) is valid */ +// static const int64_t MAX_MONEY = 16628690 * COIN; // 16,628,690 POW Coins +static const int64_t MAX_MONEY = 28600000 * COIN; // more realistic target project of 28.6m total coins by 2024 minus KDAQ burns +// no longer used, kept for old block confirmation static const int PIR_LEVELS = 4; // number of entries in PIR_THRESHOLDS static const int64_t PIR_PHASEBLOCKS = 365 * 24 * 60; // one year for each phase static const int PIR_PHASES = 3; // pepe - three POS reward phases @@ -113,12 +148,12 @@ inline bool MoneyRange(int64_t nValue) { return (nValue >= 0 && nValue <= MAX_MO static const unsigned int LOCKTIME_THRESHOLD = 500000000; // Tue Nov 5 00:53:20 1985 UTC static const int64_t DRIFT = 600; -inline int64_t FutureDrift(int64_t nTime) { return nTime + DRIFT; } +inline int64_t FutureDrift(int64_t nTime, int nHeight) { return nHeight >= PEPE_DIFFIMPROVE_HEIGHT ? nTime + 60 : nTime + DRIFT; } /** "reject" message codes **/ static const unsigned char REJECT_INVALID = 0x10; -inline int64_t GetMNCollateral(int nHeight) { return nHeight>=420000 ? 10000 : 10000; } // No change for now. +inline int64_t GetMNCollateral(int nHeight) { return 15000; } // 15k PEPE / MEME required for MN extern CScript COINBASE_FLAGS; extern CCriticalSection cs_main; @@ -203,10 +238,13 @@ int64_t GetPIRRewardCoinYear(int64_t nCoinValue, int64_t nHeight); int64_t GetProofOfStakeReward(const CBlockIndex* pindexPrev, int64_t nCoinAge, int64_t nFees, int64_t nCoinValue); int64_t GetProofOfStakeRewardV1(const CBlockIndex* pindexPrev, int64_t nCoinAge, int64_t nFees, int64_t nCoinValue); int64_t GetProofOfStakeRewardV2(const CBlockIndex* pindexPrev, int64_t nCoinAge, int64_t nFees, int64_t nCoinValue); +int64_t GetProofOfStakeRewardV3(const CBlockIndex* pindexPrev, int64_t nCoinAge, int64_t nFees, int64_t nCoinValue); +bool IsSyncing(); +void DropNonRespondingSyncPeer(); bool IsInitialBlockDownload(); bool IsConfirmedInNPrevBlocks(const CTxIndex& txindex, const CBlockIndex* pindexFrom, int nMaxDepth, int& nActualDepth); std::string GetWarnings(std::string strFor); -bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock); +bool GetTransaction(const uint256 &hash, CTransaction &tx, uint256 &hashBlock, bool fCheckMempool = true); uint256 WantedByOrphan(const COrphanBlock* pblockOrphan); const CBlockIndex* GetLastBlockIndex(const CBlockIndex* pindex, bool fProofOfStake); void ThreadStakeMiner(CWallet *pwallet); @@ -232,6 +270,9 @@ void Misbehaving(NodeId nodeid, int howmuch); int64_t GetMasternodePayment(int nHeight, int64_t blockValue); +void RebuildAddressIndexFromHeight(int64_t nStartHeight); +void RebuildAddressIndexForBlock(int64_t nBlockHeight); + /** Message cached from op_return **/ class CPepeMessage { @@ -256,6 +297,11 @@ class CPepeMessage return DateTimeStrFormat(nTime) + ": " + msg; } +bool operator < (const CPepeMessage& a) const + { + return (nTime < a.nTime); + } + }; /** Position on disk for a particular transaction. */ @@ -623,8 +669,7 @@ class CMerkleTx : public CTransaction bool IsInMainChain() const { CBlockIndex *pindexRet; return GetDepthInMainChainINTERNAL(pindexRet) > 0; } int GetBlocksToMaturity() const; bool AcceptToMemoryPool(bool fLimitFree=true, bool fRejectInsaneFee=true, bool ignoreFees=false); - int GetTransactionLockSignatures() const; - bool IsTransactionLockTimedOut() const; + }; @@ -962,6 +1007,7 @@ class CBlock bool SignBlock(CWallet& keystore, int64_t nFees); bool CheckBlockSignature() const; void RebuildAddressIndex(CTxDB& txdb); + bool CheckDevRewards(CTransaction tx, int64_t nHeight, int64_t nReward, int64_t nFees); private: bool SetBestChainInner(CTxDB& txdb, CBlockIndex *pindexNew); @@ -1113,7 +1159,10 @@ class CBlockIndex int64_t GetPastTimeLimit() const { - return GetBlockTime() - DRIFT; + if(nHeight >= PEPE_DIFFIMPROVE_HEIGHT) + return GetBlockTime(); + else + return GetBlockTime() - DRIFT; } enum { nMedianTimeSpan=11 }; diff --git a/src/makefile.bsd b/src/makefile.bsd index ca7995ed..98f83592 100644 --- a/src/makefile.bsd +++ b/src/makefile.bsd @@ -142,7 +142,7 @@ ifeq (${USE_WALLET}, 1) obj/walletdb.o endif -all: memeticd +all: pepecoind LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) @@ -176,11 +176,11 @@ obj/%.o: %.cpp -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ rm -f $(@:%.o=%.d) -memeticd: $(OBJS:obj/%=obj/%) +pepecoind: $(OBJS:obj/%=obj/%) $(LINK) $(xCXXFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS) clean: - -rm -f memeticd + -rm -f pepecoind -rm -f obj/*.o -rm -f obj/*.P -rm -f obj/build.h diff --git a/src/makefile.linux-mingw b/src/makefile.linux-mingw index 87b63943..9d6891db 100644 --- a/src/makefile.linux-mingw +++ b/src/makefile.linux-mingw @@ -52,7 +52,7 @@ ifneq (${USE_UPNP}, -) DEFS += -DSTATICLIB -DUSE_UPNP=$(USE_UPNP) endif -LIBS += -l mingwthrd -l kernel32 -l user32 -l gdi32 -l comdlg32 -l winspool -l winmm -l memetic32 -l comctl32 -l ole32 -l oleaut32 -l uuid -l rpcrt4 -l advapi32 -l ws2_32 -l mswsock -l shlwapi +LIBS += -l mingwthrd -l kernel32 -l user32 -l gdi32 -l comdlg32 -l winspool -l winmm -l pepecoin32 -l comctl32 -l ole32 -l oleaut32 -l uuid -l rpcrt4 -l advapi32 -l ws2_32 -l mswsock -l shlwapi # TODO: make the mingw builds smarter about dependencies, like the linux/osx builds are HEADERS = $(wildcard *.h) @@ -105,7 +105,7 @@ ifeq (${USE_WALLET}, 1) obj/walletdb.o endif -all: memeticd.exe +all: pepecoind.exe LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a DEFS += -I"$(CURDIR)/leveldb/include" @@ -123,9 +123,9 @@ DEFS += -DHAVE_BUILD_INFO obj/%.o: %.cpp $(HEADERS) $(CXX) -c $(CFLAGS) -o $@ $< -memeticd.exe: $(OBJS:obj/%=obj/%) +pepecoind.exe: $(OBJS:obj/%=obj/%) $(CXX) $(CFLAGS) $(LDFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) -lshlwapi - $(STRIP) memeticd.exe + $(STRIP) pepecoind.exe obj/scrypt-x86.o: scrypt-x86.S $(CXX) -c $(CFLAGS) -MMD -o $@ $< @@ -135,7 +135,7 @@ obj/scrypt-x86_64.o: scrypt-x86_64.S clean: -rm -f obj/*.o - -rm -f memeticd.exe + -rm -f pepecoind.exe -rm -f obj/build.h cd leveldb && TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) clean && cd .. diff --git a/src/makefile.mingw b/src/makefile.mingw index 1fd05e3e..ffde523b 100644 --- a/src/makefile.mingw +++ b/src/makefile.mingw @@ -38,7 +38,8 @@ LIBS= \ DEFS=-DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB -DBOOST_SPIRIT_THREADSAFE DEBUGFLAGS=-g -CFLAGS=-mthreads -O2 -w -Wall -Wextra -Wno-ignored-qualifiers -Wformat -Wformat-security -Wno-unused-parameter -fpermissive $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) +CFLAGS=-mthreads -O2 -w -Wall -Wextra -Wno-ignored-qualifiers -Wformat -Wformat-security - +Wno-unused-parameter -fpermissive $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -Wl,--large-address-aware -static TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data) @@ -51,7 +52,9 @@ ifneq (${USE_UPNP}, -) DEFS += -DMINIUPNP_STATICLIB -DUSE_UPNP=$(USE_UPNP) endif -LIBS += -l mingwthrd -l kernel32 -l user32 -l gdi32 -l comdlg32 -l winspool -l winmm -l shell32 -l comctl32 -l ole32 -l oleaut32 -l uuid -l rpcrt4 -l advapi32 -l ws2_32 -l mswsock -l shlwapi +LIBS += -l mingwthrd -l kernel32 -l user32 -l gdi32 -l comdlg32 -l winspool -l winmm -l +shell32 -l comctl32 -l ole32 -l oleaut32 -l uuid -l rpcrt4 -l advapi32 -l ws2_32 -l mswsock +-l shlwapi # TODO: make the mingw builds smarter about dependencies, like the linux/osx builds are HEADERS = $(wildcard *.h) @@ -97,12 +100,9 @@ OBJS= \ obj/stealth.o \ obj/activemasternode.o \ obj/darksend.o \ - obj/darksend-relay.o \ obj/instantx.o \ obj/masternodeconfig.o \ - obj/masternodeman.o \ obj/masternode.o \ - obj/masternode-payments.o \ obj/rpcdarksend.o \ obj/spork.o \ obj/crypto/hmac_sha256.o \ @@ -137,14 +137,15 @@ ifeq (${USE_WALLET}, 1) obj/walletdb.o endif -all: memeticd.exe +all: pepecoind.exe LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers) OBJS += obj/txdb-leveldb.o leveldb/libleveldb.a: - @echo "Building LevelDB ..."; cd leveldb; chmod 755 *;make libleveldb.a libmemenv.a; cd ..; + @echo "Building LevelDB ..."; cd leveldb; chmod 755 *;make libleveldb.a +libmemenv.a; cd ..; obj/txdb-leveldb.o: leveldb/libleveldb.a obj/%.o: %.cpp $(HEADERS) @@ -153,7 +154,7 @@ obj/%.o: %.cpp $(HEADERS) obj/%.o: %.c $(HEADERS) $(CXX) -c $(CFLAGS) -fpermissive -o $@ $< -memeticd.exe: $(OBJS:obj/%=obj/%) +pepecoind.exe: $(OBJS:obj/%=obj/%) g++ $(CFLAGS) $(LDFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) obj/scrypt-x86.o: scrypt-x86.S diff --git a/src/makefile.osx b/src/makefile.osx index 3cf706d2..c6522e6b 100644 --- a/src/makefile.osx +++ b/src/makefile.osx @@ -3,7 +3,7 @@ # Distributed under the MIT/X11 software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. -# Mac OS X makefile for memetic +# Mac OS X makefile for pepecoin # Originally by Laszlo Hanyecz (solar@heliacal.net) CXX=clang++ @@ -30,7 +30,7 @@ USE_WALLET:=1 LIBS= -dead_strip ifdef STATIC -# Build STATIC if you are redistributing the memeticd binary +# Build STATIC if you are redistributing the pepecoind binary LIBS += \ $(DEPSDIR)/lib/db48/libdb_cxx-4.8.a \ $(DEPSDIR)/lib/libboost_system.a \ @@ -160,13 +160,13 @@ else endif endif -all: memeticd +all: pepecoind # build secp256k1 DEFS += $(addprefix -I,$(CURDIR)/secp256k1/include) secp256k1/src/libsecp256k1_la-secp256k1.o: @echo "Building Secp256k1 ..."; cd secp256k1; chmod 755 *; ./autogen.sh; ./configure --enable-module-recovery; make; cd ..; -memeticd: secp256k1/src/libsecp256k1_la-secp256k1.o +pepecoind: secp256k1/src/libsecp256k1_la-secp256k1.o # build leveldb LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a @@ -205,11 +205,11 @@ obj/%.o: %.c -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ rm -f $(@:%.o=%.d) -memeticd: $(OBJS:obj/%=obj/%) +pepecoind: $(OBJS:obj/%=obj/%) $(CXX) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) clean: - -rm -f memeticd + -rm -f pepecoind -rm -f obj/*.o -rm -f obj/*.P -rm -f obj/build.h diff --git a/src/makefile.unix b/src/makefile.unix index 61ebfc1d..0b6a8789 100644 --- a/src/makefile.unix +++ b/src/makefile.unix @@ -143,12 +143,9 @@ OBJS= \ obj/stealth.o \ obj/activemasternode.o \ obj/darksend.o \ - obj/darksend-relay.o \ obj/instantx.o \ obj/masternodeconfig.o \ - obj/masternodeman.o \ obj/masternode.o \ - obj/masternode-payments.o \ obj/rpcdarksend.o \ obj/spork.o \ obj/crypto/hmac_sha256.o \ @@ -183,13 +180,13 @@ ifeq (${USE_WALLET}, 1) obj/walletdb.o endif -all: memeticd +all: pepecoind # build secp256k1 DEFS += $(addprefix -I,$(CURDIR)/secp256k1/include) secp256k1/src/libsecp256k1_la-secp256k1.o: @echo "Building Secp256k1 ..."; cd secp256k1; chmod 755 *; ./autogen.sh; ./configure --enable-module-recovery; make; cd ..; -memeticd: secp256k1/src/libsecp256k1_la-secp256k1.o +pepecoind: secp256k1/src/libsecp256k1_la-secp256k1.o # build leveldb LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a @@ -231,11 +228,11 @@ obj/%.o: %.c -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ rm -f $(@:%.o=%.d) -memeticd: $(OBJS:obj/%=obj/%) +pepecoind: $(OBJS:obj/%=obj/%) $(LINK) $(xCXXFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS) clean: - -rm -f memeticd + -rm -f pepecoind -rm -f obj/*.o -rm -f obj/*.P -rm -f obj/build.h diff --git a/src/masternode-payments.cpp b/src/masternode-payments.cpp deleted file mode 100644 index 62f2da84..00000000 --- a/src/masternode-payments.cpp +++ /dev/null @@ -1,365 +0,0 @@ -// Copyright (c) 2014-2015 The Dash developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include "masternode-payments.h" -#include "masternodeman.h" -#include "darksend.h" -#include "util.h" -#include "sync.h" -#include "spork.h" -#include "addrman.h" -#include - -CCriticalSection cs_masternodepayments; - -/** Object for who's going to get paid on which blocks */ -CMasternodePayments masternodePayments; -// keep track of Masternode votes I've seen -map mapSeenMasternodeVotes; - -int CMasternodePayments::GetMinMasternodePaymentsProto() { - return IsSporkActive(SPORK_10_MASTERNODE_PAY_UPDATED_NODES) - ? MIN_MASTERNODE_PAYMENT_PROTO_VERSION_2 - : MIN_MASTERNODE_PAYMENT_PROTO_VERSION_1; -} - -void ProcessMessageMasternodePayments(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) -{ - if(!darkSendPool.IsBlockchainSynced()) return; - - if (strCommand == "mnget") { //Masternode Payments Request Sync - - if(pfrom->HasFulfilledRequest("mnget")) { - LogPrintf("mnget - peer already asked me for the list\n"); - Misbehaving(pfrom->GetId(), 20); - return; - } - - pfrom->FulfilledRequest("mnget"); - masternodePayments.Sync(pfrom); - LogPrintf("mnget - Sent Masternode winners to %s\n", pfrom->addr.ToString().c_str()); - } - else if (strCommand == "mnw") { //Masternode Payments Declare Winner - - LOCK(cs_masternodepayments); - - //this is required in litemode - CMasternodePaymentWinner winner; - vRecv >> winner; - - if(pindexBest == NULL) return; - - CTxDestination address1; - ExtractDestination(winner.payee, address1); - CBitcoinAddress address2(address1); - - uint256 hash = winner.GetHash(); - if(mapSeenMasternodeVotes.count(hash)) { - if(fDebug) LogPrintf("mnw - seen vote %s Addr %s Height %d bestHeight %d\n", hash.ToString().c_str(), address2.ToString().c_str(), winner.nBlockHeight, pindexBest->nHeight); - return; - } - - if(winner.nBlockHeight < pindexBest->nHeight - 10 || winner.nBlockHeight > pindexBest->nHeight+20){ - LogPrintf("mnw - winner out of range %s Addr %s Height %d bestHeight %d\n", winner.vin.ToString().c_str(), address2.ToString().c_str(), winner.nBlockHeight, pindexBest->nHeight); - return; - } - - if(winner.vin.nSequence != std::numeric_limits::max()){ - LogPrintf("mnw - invalid nSequence\n"); - Misbehaving(pfrom->GetId(), 100); - return; - } - - LogPrintf("mnw - winning vote - Vin %s Addr %s Height %d bestHeight %d\n", winner.vin.ToString().c_str(), address2.ToString().c_str(), winner.nBlockHeight, pindexBest->nHeight); - - if(!masternodePayments.CheckSignature(winner)){ - LogPrintf("mnw - invalid signature\n"); - Misbehaving(pfrom->GetId(), 100); - return; - } - - mapSeenMasternodeVotes.insert(make_pair(hash, winner)); - - if(masternodePayments.AddWinningMasternode(winner)){ - masternodePayments.Relay(winner); - } - } -} - - -bool CMasternodePayments::CheckSignature(CMasternodePaymentWinner& winner) -{ - //note: need to investigate why this is failing - std::string strMessage = winner.vin.ToString().c_str() + boost::lexical_cast(winner.nBlockHeight) + winner.payee.ToString(); - std::string strPubKey = strMainPubKey ; - CPubKey pubkey(ParseHex(strPubKey)); - - std::string errorMessage = ""; - if(!darkSendSigner.VerifyMessage(pubkey, winner.vchSig, strMessage, errorMessage)){ - return false; - } - - return true; -} - -bool CMasternodePayments::Sign(CMasternodePaymentWinner& winner) -{ - std::string strMessage = winner.vin.ToString().c_str() + boost::lexical_cast(winner.nBlockHeight) + winner.payee.ToString(); - - CKey key2; - CPubKey pubkey2; - std::string errorMessage = ""; - - if(!darkSendSigner.SetKey(strMasterPrivKey, errorMessage, key2, pubkey2)) - { - LogPrintf("CMasternodePayments::Sign - ERROR: Invalid Masternodeprivkey: '%s'\n", errorMessage.c_str()); - return false; - } - - if(!darkSendSigner.SignMessage(strMessage, errorMessage, winner.vchSig, key2)) { - LogPrintf("CMasternodePayments::Sign - Sign message failed"); - return false; - } - - if(!darkSendSigner.VerifyMessage(pubkey2, winner.vchSig, strMessage, errorMessage)) { - LogPrintf("CMasternodePayments::Sign - Verify message failed"); - return false; - } - - return true; -} - -uint64_t CMasternodePayments::CalculateScore(uint256 blockHash, CTxIn& vin) -{ - uint256 n1 = blockHash; - uint256 n2 = Hash(BEGIN(n1), END(n1)); - uint256 n3 = Hash(BEGIN(vin.prevout.hash), END(vin.prevout.hash)); - uint256 n4 = n3 > n2 ? (n3 - n2) : (n2 - n3); - - //printf(" -- CMasternodePayments CalculateScore() n2 = %d \n", n2.Get64()); - //printf(" -- CMasternodePayments CalculateScore() n3 = %d \n", n3.Get64()); - //printf(" -- CMasternodePayments CalculateScore() n4 = %d \n", n4.Get64()); - - return n4.Get64(); -} - -bool CMasternodePayments::GetBlockPayee(int nBlockHeight, CScript& payee, CTxIn& vin) -{ - BOOST_FOREACH(CMasternodePaymentWinner& winner, vWinning){ - if(winner.nBlockHeight == nBlockHeight) { - payee = winner.payee; - vin = winner.vin; - return true; - } - } - - return false; -} - -bool CMasternodePayments::GetWinningMasternode(int nBlockHeight, CTxIn& vinOut) -{ - BOOST_FOREACH(CMasternodePaymentWinner& winner, vWinning){ - if(winner.nBlockHeight == nBlockHeight) { - vinOut = winner.vin; - return true; - } - } - - return false; -} - -bool CMasternodePayments::AddWinningMasternode(CMasternodePaymentWinner& winnerIn) -{ - uint256 blockHash = 0; - if(!GetBlockHash(blockHash, winnerIn.nBlockHeight-576)) { - return false; - } - - winnerIn.score = CalculateScore(blockHash, winnerIn.vin); - - bool foundBlock = false; - BOOST_FOREACH(CMasternodePaymentWinner& winner, vWinning){ - if(winner.nBlockHeight == winnerIn.nBlockHeight) { - foundBlock = true; - if(winner.score < winnerIn.score){ - winner.score = winnerIn.score; - winner.vin = winnerIn.vin; - winner.payee = winnerIn.payee; - winner.vchSig = winnerIn.vchSig; - - mapSeenMasternodeVotes.insert(make_pair(winnerIn.GetHash(), winnerIn)); - - return true; - } - } - } - - // if it's not in the vector - if(!foundBlock){ - vWinning.push_back(winnerIn); - mapSeenMasternodeVotes.insert(make_pair(winnerIn.GetHash(), winnerIn)); - - return true; - } - - return false; -} - -void CMasternodePayments::CleanPaymentList() -{ - LOCK(cs_masternodepayments); - - if(pindexBest == NULL) return; - - int nLimit = std::max(((int)mnodeman.size())*((int)1.25), 1000); - - vector::iterator it; - for(it=vWinning.begin();itnHeight - (*it).nBlockHeight > nLimit){ - if(fDebug) LogPrintf("CMasternodePayments::CleanPaymentList - Removing old Masternode payment - block %d\n", (*it).nBlockHeight); - vWinning.erase(it); - break; - } - } -} - -bool CMasternodePayments::ProcessBlock(int nBlockHeight) -{ - LOCK(cs_masternodepayments); - - if(nBlockHeight <= nLastBlockHeight) return false; - if(!enabled) return false; - CMasternodePaymentWinner newWinner; - int nMinimumAge = mnodeman.CountEnabled(); - CScript payeeSource; - - uint256 hash; - if(!GetBlockHash(hash, nBlockHeight-10)) return false; - unsigned int nHash; - memcpy(&nHash, &hash, 2); - - LogPrintf(" ProcessBlock Start nHeight %d - vin %s. \n", nBlockHeight, activeMasternode.vin.ToString().c_str()); - - std::vector vecLastPayments; - BOOST_REVERSE_FOREACH(CMasternodePaymentWinner& winner, vWinning) - { - //if we already have the same vin - we have one full payment cycle, break - if(vecLastPayments.size() > (unsigned int)nMinimumAge) break; - vecLastPayments.push_back(winner.vin); - } - - // pay to the oldest MN that still had no payment but its input is old enough and it was active long enough - CMasternode *pmn = mnodeman.FindOldestNotInVec(vecLastPayments, nMinimumAge); - if(pmn != NULL) - { - LogPrintf(" Found by FindOldestNotInVec \n"); - - newWinner.score = 0; - newWinner.nBlockHeight = nBlockHeight; - newWinner.vin = pmn->vin; - - if(pmn->donationPercentage > 0 && (nHash % 100) <= (unsigned int)pmn->donationPercentage) { - newWinner.payee = pmn->donationAddress; - } else { - newWinner.payee = GetScriptForDestination(pmn->pubkey.GetID()); - } - - payeeSource = GetScriptForDestination(pmn->pubkey.GetID()); - } - - //if we can't find new MN to get paid, pick first active MN counting back from the end of vecLastPayments list - if(newWinner.nBlockHeight == 0 && nMinimumAge > 0) - { - LogPrintf(" Find by reverse \n"); - - BOOST_REVERSE_FOREACH(CTxIn& vinLP, vecLastPayments) - { - CMasternode* pmn = mnodeman.Find(vinLP); - if(pmn != NULL) - { - pmn->Check(); - if(!pmn->IsEnabled()) continue; - - newWinner.score = 0; - newWinner.nBlockHeight = nBlockHeight; - newWinner.vin = pmn->vin; - - if(pmn->donationPercentage > 0 && (nHash % 100) <= (unsigned int)pmn->donationPercentage) { - newWinner.payee = pmn->donationAddress; - } else { - newWinner.payee = GetScriptForDestination(pmn->pubkey.GetID()); - } - - payeeSource = GetScriptForDestination(pmn->pubkey.GetID()); - - break; // we found active MN - } - } - } - - if(newWinner.nBlockHeight == 0) return false; - - CTxDestination address1; - ExtractDestination(newWinner.payee, address1); - CBitcoinAddress address2(address1); - - CTxDestination address3; - ExtractDestination(payeeSource, address3); - CBitcoinAddress address4(address3); - - LogPrintf("Winner payee %s nHeight %d vin source %s. \n", address2.ToString().c_str(), newWinner.nBlockHeight, address4.ToString().c_str()); - - if(Sign(newWinner)) - { - if(AddWinningMasternode(newWinner)) - { - Relay(newWinner); - nLastBlockHeight = nBlockHeight; - return true; - } - } - - return false; -} - - -void CMasternodePayments::Relay(CMasternodePaymentWinner& winner) -{ - CInv inv(MSG_MASTERNODE_WINNER, winner.GetHash()); - - vector vInv; - vInv.push_back(inv); - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes){ - pnode->PushMessage("inv", vInv); - } -} - -void CMasternodePayments::Sync(CNode* node) -{ - LOCK(cs_masternodepayments); - - BOOST_FOREACH(CMasternodePaymentWinner& winner, vWinning) - if(winner.nBlockHeight >= pindexBest->nHeight-10 && winner.nBlockHeight <= pindexBest->nHeight + 20) - node->PushMessage("mnw", winner); -} - - -bool CMasternodePayments::SetPrivKey(std::string strPrivKey) -{ - CMasternodePaymentWinner winner; - - // Test signing successful, proceed - strMasterPrivKey = strPrivKey; - - Sign(winner); - - if(CheckSignature(winner)){ - LogPrintf("CMasternodePayments::SetPrivKey - Successfully initialized as Masternode payments master\n"); - enabled = true; - return true; - } else { - return false; - } -} diff --git a/src/masternode-payments.h b/src/masternode-payments.h deleted file mode 100644 index 487fafd6..00000000 --- a/src/masternode-payments.h +++ /dev/null @@ -1,107 +0,0 @@ - - -// Copyright (c) 2014-2015 The Dash developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef MASTERNODE_PAYMENTS_H -#define MASTERNODE_PAYMENTS_H - -#include "sync.h" -#include "net.h" -#include "key.h" -#include "util.h" -#include "base58.h" -#include "main.h" -#include "masternode.h" -#include "timedata.h" - -using namespace std; - -class CMasternodePayments; -class CMasternodePaymentWinner; - -extern CMasternodePayments masternodePayments; -extern map mapSeenMasternodeVotes; - -void ProcessMessageMasternodePayments(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); - - -// for storing the winning payments -class CMasternodePaymentWinner -{ -public: - int nBlockHeight; - CTxIn vin; - CScript payee; - std::vector vchSig; - uint64_t score; - - CMasternodePaymentWinner() { - nBlockHeight = 0; - score = 0; - vin = CTxIn(); - payee = CScript(); - } - - uint256 GetHash(){ - uint256 n2 = Hash(BEGIN(nBlockHeight), END(nBlockHeight)); - uint256 n3 = vin.prevout.hash > n2 ? (vin.prevout.hash - n2) : (n2 - vin.prevout.hash); - - return n3; - } - - IMPLEMENT_SERIALIZE( - READWRITE(nBlockHeight); - READWRITE(payee); - READWRITE(vin); - READWRITE(score); - READWRITE(vchSig); - ) -}; - -// -// Masternode Payments Class -// Keeps track of who should get paid for which blocks -// - -class CMasternodePayments -{ -private: - std::vector vWinning; - int nSyncedFromPeer; - std::string strMasterPrivKey; - std::string strMainPubKey; - bool enabled; - int nLastBlockHeight; - -public: - - CMasternodePayments() { - strMainPubKey = ""; - enabled = false; - } - - bool SetPrivKey(std::string strPrivKey); - bool CheckSignature(CMasternodePaymentWinner& winner); - bool Sign(CMasternodePaymentWinner& winner); - - // Deterministically calculate a given "score" for a masternode depending on how close it's hash is - // to the blockHeight. The further away they are the better, the furthest will win the election - // and get paid this block - // - - uint64_t CalculateScore(uint256 blockHash, CTxIn& vin); - bool GetWinningMasternode(int nBlockHeight, CTxIn& vinOut); - bool AddWinningMasternode(CMasternodePaymentWinner& winner); - bool ProcessBlock(int nBlockHeight); - void Relay(CMasternodePaymentWinner& winner); - void Sync(CNode* node); - void CleanPaymentList(); - int LastPayment(CMasternode& mn); - int GetMinMasternodePaymentsProto(); - - bool GetBlockPayee(int nBlockHeight, CScript& payee, CTxIn& vin); -}; - - -#endif \ No newline at end of file diff --git a/src/masternode-pos.cpp b/src/masternode-pos.cpp deleted file mode 100644 index 013d1ac1..00000000 --- a/src/masternode-pos.cpp +++ /dev/null @@ -1,253 +0,0 @@ - - - -#include "bignum.h" -#include "sync.h" -#include "net.h" -#include "key.h" -#include "util.h" -#include "script.h" -#include "base58.h" -#include "protocol.h" -#include "activemasternode.h" -#include "masternodeman.h" -#include "spork.h" -#include -#include "masternodeman.h" - -using namespace std; -using namespace boost; - -std::map mapMasternodeScanningErrors; -CMasternodeScanning mnscan; - -/* - Masternode - Proof of Service - - -- What it checks - - 1.) Making sure Masternodes have their ports open - 2.) Are responding to requests made by the network - - -- How it works - - When a block comes in, DoMasternodePOS is executed if the client is a - masternode. Using the deterministic ranking algorithm up to 1% of the masternode - network is checked each block. - - A port is opened from Masternode A to Masternode B, if successful then nothing happens. - If there is an error, a CMasternodeScanningError object is propagated with an error code. - Errors are applied to the Masternodes and a score is incremented within the masternode object, - after a threshold is met, the masternode goes into an error state. Each cycle the score is - decreased, so if the masternode comes back online it will return to the list. - - Masternodes in a error state do not receive payment. - - -- Future expansion - - We want to be able to prove the nodes have many qualities such as a specific CPU speed, bandwidth, - and dedicated storage. E.g. We could require a full node be a computer running 2GHz with 10GB of space. - -*/ - -void ProcessMessageMasternodePOS(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) -{ - if(!IsSporkActive(SPORK_7_MASTERNODE_SCANNING)) return; - if(IsInitialBlockDownload()) return; - - if (strCommand == "mnse") //Masternode Scanning Error - { - - CDataStream vMsg(vRecv); - CMasternodeScanningError mnse; - vRecv >> mnse; - - CInv inv(MSG_MASTERNODE_SCANNING_ERROR, mnse.GetHash()); - pfrom->AddInventoryKnown(inv); - - if(mapMasternodeScanningErrors.count(mnse.GetHash())){ - return; - } - mapMasternodeScanningErrors.insert(make_pair(mnse.GetHash(), mnse)); - - if(!mnse.IsValid()) - { - LogPrintf("MasternodePOS::mnse - Invalid object\n"); - return; - } - - CMasternode* pmnA = mnodeman.Find(mnse.vinMasternodeA); - if(pmnA == NULL) return; - if(pmnA->protocolVersion < MIN_MASTERNODE_POS_PROTO_VERSION) return; - - int nBlockHeight = pindexBest->nHeight; - if(nBlockHeight - mnse.nBlockHeight > 10){ - LogPrintf("MasternodePOS::mnse - Too old\n"); - return; - } - - // Lowest masternodes in rank check the highest each block - int a = mnodeman.GetMasternodeRank(mnse.vinMasternodeA, mnse.nBlockHeight, MIN_MASTERNODE_POS_PROTO_VERSION); - if(a == -1 || a > GetCountScanningPerBlock()) - { - if(a != -1) LogPrintf("MasternodePOS::mnse - MasternodeA ranking is too high\n"); - return; - } - - int b = mnodeman.GetMasternodeRank(mnse.vinMasternodeB, mnse.nBlockHeight, MIN_MASTERNODE_POS_PROTO_VERSION, false); - if(b == -1 || b < mnodeman.CountMasternodesAboveProtocol(MIN_MASTERNODE_POS_PROTO_VERSION)-GetCountScanningPerBlock()) - { - if(b != -1) LogPrintf("MasternodePOS::mnse - MasternodeB ranking is too low\n"); - return; - } - - if(!mnse.SignatureValid()){ - LogPrintf("MasternodePOS::mnse - Bad masternode message\n"); - return; - } - - CMasternode* pmnB = mnodeman.Find(mnse.vinMasternodeB); - if(pmnB == NULL) return; - - if(fDebug) LogPrintf("ProcessMessageMasternodePOS::mnse - nHeight %d MasternodeA %s MasternodeB %s\n", mnse.nBlockHeight, pmnA->addr.ToString().c_str(), pmnB->addr.ToString().c_str()); - - pmnB->ApplyScanningError(mnse); - mnse.Relay(); - } -} - -// Returns how many masternodes are allowed to scan each block -int GetCountScanningPerBlock() -{ - return std::max(1, mnodeman.CountMasternodesAboveProtocol(MIN_MASTERNODE_POS_PROTO_VERSION)/100); -} - - -void CMasternodeScanning::CleanMasternodeScanningErrors() -{ - if(pindexBest == NULL) return; - - std::map::iterator it = mapMasternodeScanningErrors.begin(); - - while(it != mapMasternodeScanningErrors.end()) { - if(GetTime() > it->second.nExpiration){ //keep them for an hour - LogPrintf("Removing old masternode scanning error %s\n", it->second.GetHash().ToString().c_str()); - - mapMasternodeScanningErrors.erase(it++); - } else { - it++; - } - } - -} - -// Check other masternodes to make sure they're running correctly -void CMasternodeScanning::DoMasternodePOSChecks() -{ - if(!fMasterNode) return; - if(!IsSporkActive(SPORK_7_MASTERNODE_SCANNING)) return; - if(IsInitialBlockDownload()) return; - - int nBlockHeight = pindexBest->nHeight-5; - - int a = mnodeman.GetMasternodeRank(activeMasternode.vin, nBlockHeight, MIN_MASTERNODE_POS_PROTO_VERSION); - if(a == -1 || a > GetCountScanningPerBlock()){ - // we don't need to do anything this block - return; - } - - // The lowest ranking nodes (Masternode A) check the highest ranking nodes (Masternode B) - CMasternode* pmn = mnodeman.GetMasternodeByRank(mnodeman.CountMasternodesAboveProtocol(MIN_MASTERNODE_POS_PROTO_VERSION)-a, nBlockHeight, MIN_MASTERNODE_POS_PROTO_VERSION, false); - if(pmn == NULL) return; - - // -- first check : Port is open - - if(!ConnectNode((CAddress)pmn->addr, NULL, true)){ - // we couldn't connect to the node, let's send a scanning error - CMasternodeScanningError mnse(activeMasternode.vin, pmn->vin, SCANNING_ERROR_NO_RESPONSE, nBlockHeight); - mnse.Sign(); - mapMasternodeScanningErrors.insert(make_pair(mnse.GetHash(), mnse)); - mnse.Relay(); - } - - // success - CMasternodeScanningError mnse(activeMasternode.vin, pmn->vin, SCANNING_SUCCESS, nBlockHeight); - mnse.Sign(); - mapMasternodeScanningErrors.insert(make_pair(mnse.GetHash(), mnse)); - mnse.Relay(); -} - -bool CMasternodeScanningError::SignatureValid() -{ - std::string errorMessage; - std::string strMessage = vinMasternodeA.ToString() + vinMasternodeB.ToString() + - boost::lexical_cast(nBlockHeight) + boost::lexical_cast(nErrorType); - - CMasternode* pmn = mnodeman.Find(vinMasternodeA); - - if(pmn == NULL) - { - LogPrintf("CMasternodeScanningError::SignatureValid() - Unknown Masternode\n"); - return false; - } - - CScript pubkey; - pubkey.SetDestination(pmn->pubkey2.GetID()); - CTxDestination address1; - ExtractDestination(pubkey, address1); - CBitcoinAddress address2(address1); - - if(!darkSendSigner.VerifyMessage(pmn->pubkey2, vchMasterNodeSignature, strMessage, errorMessage)) { - LogPrintf("CMasternodeScanningError::SignatureValid() - Verify message failed\n"); - return false; - } - - return true; -} - -bool CMasternodeScanningError::Sign() -{ - std::string errorMessage; - - CKey key2; - CPubKey pubkey2; - std::string strMessage = vinMasternodeA.ToString() + vinMasternodeB.ToString() + - boost::lexical_cast(nBlockHeight) + boost::lexical_cast(nErrorType); - - if(!darkSendSigner.SetKey(strMasterNodePrivKey, errorMessage, key2, pubkey2)) - { - LogPrintf("CMasternodeScanningError::Sign() - ERROR: Invalid masternodeprivkey: '%s'\n", errorMessage.c_str()); - return false; - } - - CScript pubkey; - pubkey.SetDestination(pubkey2.GetID()); - CTxDestination address1; - ExtractDestination(pubkey, address1); - CBitcoinAddress address2(address1); - //LogPrintf("signing pubkey2 %s \n", address2.ToString().c_str()); - - if(!darkSendSigner.SignMessage(strMessage, errorMessage, vchMasterNodeSignature, key2)) { - LogPrintf("CMasternodeScanningError::Sign() - Sign message failed"); - return false; - } - - if(!darkSendSigner.VerifyMessage(pubkey2, vchMasterNodeSignature, strMessage, errorMessage)) { - LogPrintf("CMasternodeScanningError::Sign() - Verify message failed"); - return false; - } - - return true; -} - -void CMasternodeScanningError::Relay() -{ - CInv inv(MSG_MASTERNODE_SCANNING_ERROR, GetHash()); - - vector vInv; - vInv.push_back(inv); - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes){ - pnode->PushMessage("inv", vInv); - } -} diff --git a/src/masternode-pos.h b/src/masternode-pos.h deleted file mode 100644 index 411ef536..00000000 --- a/src/masternode-pos.h +++ /dev/null @@ -1,115 +0,0 @@ - - -// Copyright (c) 2014-2015 The Dash developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef MASTERNODE_POS_H -#define MASTERNODE_POS_H - -#include "bignum.h" -#include "sync.h" -#include "net.h" -#include "key.h" -#include "core.h" -#include "util.h" -#include "script.h" -#include "base58.h" -#include "main.h" - -using namespace std; -using namespace boost; - -class CMasternodeScanning; -class CMasternodeScanningError; - -extern map mapMasternodeScanningErrors; -extern CMasternodeScanning mnscan; - -static const int MIN_MASTERNODE_POS_PROTO_VERSION = 61402; - -/* - 1% of the network is scanned every 2.5 minutes, making a full - round of scanning take about 4.16 hours. We're targeting about - a day of proof-of-service errors for complete removal from the - masternode system. -*/ -static const int MASTERNODE_SCANNING_ERROR_THESHOLD = 6; - -#define SCANNING_SUCCESS 1 -#define SCANNING_ERROR_NO_RESPONSE 2 -#define SCANNING_ERROR_IX_NO_RESPONSE 3 -#define SCANNING_ERROR_MAX 3 - -void ProcessMessageMasternodePOS(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); - -class CMasternodeScanning -{ -public: - void DoMasternodePOSChecks(); - void CleanMasternodeScanningErrors(); -}; - -// Returns how many masternodes are allowed to scan each block -int GetCountScanningPerBlock(); - -class CMasternodeScanningError -{ -public: - CTxIn vinMasternodeA; - CTxIn vinMasternodeB; - int nErrorType; - int nExpiration; - int nBlockHeight; - std::vector vchMasterNodeSignature; - - CMasternodeScanningError () - { - vinMasternodeA = CTxIn(); - vinMasternodeB = CTxIn(); - nErrorType = 0; - nExpiration = GetTime()+(60*60); - nBlockHeight = 0; - } - - CMasternodeScanningError (CTxIn& vinMasternodeAIn, CTxIn& vinMasternodeBIn, int nErrorTypeIn, int nBlockHeightIn) - { - vinMasternodeA = vinMasternodeAIn; - vinMasternodeB = vinMasternodeBIn; - nErrorType = nErrorTypeIn; - nExpiration = GetTime()+(60*60); - nBlockHeight = nBlockHeightIn; - } - - CMasternodeScanningError (CTxIn& vinMasternodeBIn, int nErrorTypeIn, int nBlockHeightIn) - { - //just used for IX, MasternodeA is any client - vinMasternodeA = CTxIn(); - vinMasternodeB = vinMasternodeBIn; - nErrorType = nErrorTypeIn; - nExpiration = GetTime()+(60*60); - nBlockHeight = nBlockHeightIn; - } - - uint256 GetHash() const {return SerializeHash(*this);} - - bool SignatureValid(); - bool Sign(); - bool IsExpired() {return GetTime() > nExpiration;} - void Relay(); - bool IsValid() { - return (nErrorType > 0 && nErrorType <= SCANNING_ERROR_MAX); - } - - IMPLEMENT_SERIALIZE - ( - READWRITE(vinMasternodeA); - READWRITE(vinMasternodeB); - READWRITE(nErrorType); - READWRITE(nExpiration); - READWRITE(nBlockHeight); - READWRITE(vchMasterNodeSignature); - ) -}; - - -#endif diff --git a/src/masternode.cpp b/src/masternode.cpp index c1af6b4b..88002dbf 100644 --- a/src/masternode.cpp +++ b/src/masternode.cpp @@ -1,20 +1,407 @@ #include "masternode.h" -#include "masternodeman.h" +#include "activemasternode.h" #include "darksend.h" -#include "core.h" +//#include "primitives/transaction.h" #include "main.h" -#include "sync.h" #include "util.h" #include "addrman.h" #include +int CMasterNode::minProtoVersion = MIN_MN_PROTO_VERSION; + CCriticalSection cs_masternodes; + +/** The list of active masternodes */ +std::vector vecMasternodes; +/** Object for who's going to get paid on which blocks */ +CMasternodePayments masternodePayments; +// keep track of masternode votes I've seen +map mapSeenMasternodeVotes; // keep track of the scanning errors I've seen map mapSeenMasternodeScanningErrors; +// who's asked for the masternode list and the last time +std::map askedForMasternodeList; +// which masternodes we've asked for +std::map askedForMasternodeListEntry; // cache block hashes as we calculate them std::map mapCacheBlockHashes; +std::set setKnownMnMsgs; + +// manage the masternode connections +void ProcessMasternodeConnections(){ + LOCK(cs_vNodes); + + BOOST_FOREACH(CNode* pnode, vNodes) + { + //if it's our masternode, let it be + if(darkSendPool.submittedToMasternode == pnode->addr) continue; + + if(pnode->fDarkSendMaster){ + LogPrintf("Closing masternode connection %s \n", pnode->addr.ToString().c_str()); + pnode->CloseSocketDisconnect(); + } + } +} + +void ProcessMessageMasternode(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) +{ + + if(fLiteMode) return; + + if (strCommand == "dsee") { //DarkSend Election Entry + if(fLiteMode) return; //disable all darksend/masternode related functionality + + bool fIsInitialDownload = IsInitialBlockDownload(); + if(fIsInitialDownload || IsSyncing()) return; + + CTxIn vin; + CService addr; + CPubKey pubkey; + CPubKey pubkey2; + vector vchSig; + int64_t sigTime; + int count; + int current; + int64_t lastUpdated; + int protocolVersion; + std::string strMessage; + + // 70047 and greater + vRecv >> vin >> addr >> vchSig >> sigTime >> pubkey >> pubkey2 >> count >> current >> lastUpdated >> protocolVersion; + + CDataStream ssCheck(SER_GETHASH, PROTOCOL_VERSION); + ssCheck << CMessageHeader("dsee",0) << vin << addr << vchSig << sigTime << pubkey << pubkey2 << count << current << lastUpdated << protocolVersion; + uint256 hashCheck = SerializeHash(std::vector(ssCheck.begin(), ssCheck.end())); + + if(setKnownMnMsgs.count(hashCheck)) + { + // already have this dsee + return; + } + + setKnownMnMsgs.insert(hashCheck); + + // make sure signature isn't in the future (past is OK) + if (sigTime > GetAdjustedTime() + 60 * 60) { + LogPrintf("dsee - Signature rejected, too far into the future %s\n", vin.ToString().c_str()); + return; + } + + bool isLocal = addr.IsRFC1918() || addr.IsLocal(); + //if(Params().MineBlocksOnDemand()) isLocal = false; + + std::string vchPubKey(pubkey.begin(), pubkey.end()); + std::string vchPubKey2(pubkey2.begin(), pubkey2.end()); + + strMessage = addr.ToString() + boost::lexical_cast(sigTime) + vchPubKey + vchPubKey2 + boost::lexical_cast(protocolVersion); + + if(protocolVersion < MIN_MN_PROTO_VERSION) { + LogPrintf("dsee - ignoring outdated masternode %s protocol version %d\n", vin.ToString().c_str(), protocolVersion); + return; + } + + CScript pubkeyScript; + pubkeyScript =GetScriptForDestination(pubkey.GetID()); + + if(pubkeyScript.size() != 25) { + LogPrintf("dsee - pubkey the wrong size\n"); + Misbehaving(pfrom->GetId(), 100); + return; + } + + CScript pubkeyScript2; + pubkeyScript2 =GetScriptForDestination(pubkey2.GetID()); + + if(pubkeyScript2.size() != 25) { + LogPrintf("dsee - pubkey2 the wrong size\n"); + Misbehaving(pfrom->GetId(), 100); + return; + } + + std::string errorMessage = ""; + if(!darkSendSigner.VerifyMessage(pubkey, vchSig, strMessage, errorMessage)){ + LogPrintf("dsee - Got bad masternode address signature\n"); + Misbehaving(pfrom->GetId(), 100); + return; + } + + + + //search existing masternode list, this is where we update existing masternodes with new dsee broadcasts + LOCK(cs_masternodes); + BOOST_FOREACH(CMasterNode& mn, vecMasternodes) { + if(mn.vin.prevout == vin.prevout) { + // count == -1 when it's a new entry + // e.g. We don't want the entry relayed/time updated when we're syncing the list + // mn.pubkey = pubkey, IsVinAssociatedWithPubkey is validated once below, + // after that they just need to match + if(count == -1 && mn.pubkey == pubkey && !mn.UpdatedWithin(MASTERNODE_MIN_DSEE_SECONDS)){ + mn.UpdateLastSeen(); + + if(mn.now < sigTime){ //take the newest entry + LogPrintf("dsee - Got updated entry for %s\n", addr.ToString().c_str()); + mn.pubkey2 = pubkey2; + mn.now = sigTime; + mn.sig = vchSig; + mn.protocolVersion = protocolVersion; + mn.addr = addr; + + RelayDarkSendElectionEntry(vin, addr, vchSig, sigTime, pubkey, pubkey2, count, current, lastUpdated, protocolVersion); + } + } + + return; + } + } + + // make sure the vout that was signed is related to the transaction that spawned the masternode + // - this is expensive, so it's only done once per masternode + if(!darkSendSigner.IsVinAssociatedWithPubkey(vin, pubkey)) { + LogPrintf("dsee - Got mismatched pubkey and vin\n"); + Misbehaving(pfrom->GetId(), 100); + return; + } + + if(fDebug) LogPrintf("dsee - Got NEW masternode entry %s\n", addr.ToString().c_str()); + + // make sure it's still unspent + // - this is checked later by .check() in many places and by ThreadCheckDarkSendPool() + + CValidationState state; + CTransaction tx = CTransaction(); + CTxOut vout = CTxOut(14999*COIN, darkSendPool.collateralPubKey); + tx.vin.push_back(vin); + tx.vout.push_back(vout); + //if(AcceptableInputs(mempool, state, tx)){ + bool* pfMissingInputs; + if(AcceptableInputs(mempool, tx, false, pfMissingInputs)){ + if(fDebug) LogPrintf("dsee - Accepted masternode entry %i %i\n", count, current); + + if(GetInputAge(vin) < MASTERNODE_MIN_CONFIRMATIONS){ + LogPrintf("dsee - Input must have least %d confirmations\n", MASTERNODE_MIN_CONFIRMATIONS); + Misbehaving(pfrom->GetId(), 20); + return; + } + + // use this as a peer + addrman.Add(CAddress(addr), pfrom->addr, 2*60*60); + + // add our masternode + CMasterNode mn(addr, vin, pubkey, vchSig, sigTime, pubkey2, protocolVersion); + mn.UpdateLastSeen(lastUpdated); + vecMasternodes.push_back(mn); + + // if it matches our masternodeprivkey, then we've been remotely activated + if(pubkey2 == activeMasternode.pubKeyMasternode && protocolVersion == PROTOCOL_VERSION){ + activeMasternode.EnableHotColdMasterNode(vin, addr); + } + + if(count == -1 && !isLocal) + RelayDarkSendElectionEntry(vin, addr, vchSig, sigTime, pubkey, pubkey2, count, current, lastUpdated, protocolVersion); + + } else { + LogPrintf("dsee - Rejected masternode entry %s\n", addr.ToString().c_str()); + + int nDoS = 0; + if (state.IsInvalid(nDoS)) + { + LogPrintf("dsee - %s from %s %s was not accepted into the memory pool\n", tx.GetHash().ToString().c_str(), + pfrom->addr.ToString().c_str(), pfrom->cleanSubVer.c_str()); + if (nDoS > 0) + Misbehaving(pfrom->GetId(), nDoS); + } + } + } + + else if (strCommand == "dseep") { //DarkSend Election Entry Ping + if(fLiteMode) return; //disable all darksend/masternode related functionality + bool fIsInitialDownload = IsInitialBlockDownload(); + if(fIsInitialDownload || IsSyncing()) return; + + CTxIn vin; + vector vchSig; + int64_t sigTime; + bool stop; + vRecv >> vin >> vchSig >> sigTime >> stop; + + CDataStream ssCheck(SER_GETHASH, PROTOCOL_VERSION); + ssCheck << CMessageHeader("dseep",0) << vin << vchSig << sigTime << stop; + uint256 hashCheck = SerializeHash(std::vector(ssCheck.begin(), ssCheck.end())); + if(setKnownMnMsgs.count(hashCheck)) + { + // already have this dseep + return; + } + + setKnownMnMsgs.insert(hashCheck); + + //LogPrintf("dseep - Received: vin: %s sigTime: %lld stop: %s\n", vin.ToString().c_str(), sigTime, stop ? "true" : "false"); + + if (sigTime > GetAdjustedTime() + 60 * 60) { + LogPrintf("dseep - Signature rejected, too far into the future %s\n", vin.ToString().c_str()); + return; + } + + if (sigTime <= GetAdjustedTime() - 60 * 60) { + LogPrintf("dseep - Signature rejected, too far into the past %s - %d %d \n", vin.ToString().c_str(), sigTime, GetAdjustedTime()); + return; + } + + // see if we have this masternode + LOCK(cs_masternodes); + BOOST_FOREACH(CMasterNode& mn, vecMasternodes) { + if(mn.vin.prevout == vin.prevout) { + // LogPrintf("dseep - Found corresponding mn for vin: %s\n", vin.ToString().c_str()); + // take this only if it's newer + if(mn.lastDseep < sigTime){ + std::string strMessage = mn.addr.ToString() + boost::lexical_cast(sigTime) + boost::lexical_cast(stop); + + std::string errorMessage = ""; + if(!darkSendSigner.VerifyMessage(mn.pubkey2, vchSig, strMessage, errorMessage)){ + LogPrintf("dseep - Got bad masternode address signature %s \n", vin.ToString().c_str()); + //Misbehaving(pfrom->GetId(), 100); + return; + } + + mn.lastDseep = sigTime; + + if(!mn.UpdatedWithin(MASTERNODE_MIN_DSEEP_SECONDS)){ + mn.UpdateLastSeen(); + if(stop) { + mn.Disable(); + mn.Check(); + } + RelayDarkSendElectionEntryPing(vin, vchSig, sigTime, stop); + } + } + return; + } + } + + if(fDebug) LogPrintf("dseep - Couldn't find masternode entry %s\n", vin.ToString().c_str()); + + std::map::iterator i = askedForMasternodeListEntry.find(vin.prevout); + if (i != askedForMasternodeListEntry.end()){ + int64_t t = (*i).second; + if (GetTime() < t) { + // we've asked recently + return; + } + } + + // ask for the dsee info once from the node that sent dseep + + LogPrintf("dseep - Asking source node for missing entry %s\n", vin.ToString().c_str()); + pfrom->PushMessage("dseg", vin); + int64_t askAgain = GetTime()+(60*60*24); + askedForMasternodeListEntry[vin.prevout] = askAgain; + + } else if (strCommand == "dseg") { //Get masternode list or specific entry + if(fLiteMode) return; //disable all darksend/masternode related functionality + CTxIn vin; + vRecv >> vin; + + if(vin == CTxIn()) { //only should ask for this once + //local network + //Note tor peers show up as local proxied addrs //if(!pfrom->addr.IsRFC1918())//&& !Params().MineBlocksOnDemand()) + //{ + std::map::iterator i = askedForMasternodeList.find(pfrom->addr); + if (i != askedForMasternodeList.end()) + { + int64_t t = (*i).second; + if (GetTime() < t) { + //Misbehaving(pfrom->GetId(), 34); + //LogPrintf("dseg - peer already asked me for the list\n"); + //return; + } + } + + int64_t askAgain = GetTime()+(60*60*3); + askedForMasternodeList[pfrom->addr] = askAgain; + //} + } //else, asking for a specific node which is ok + + LOCK(cs_masternodes); + int count = vecMasternodes.size(); + int i = 0; + + BOOST_FOREACH(CMasterNode mn, vecMasternodes) { + + if(mn.addr.IsRFC1918()) continue; //local network + + if(vin == CTxIn()){ + mn.Check(); + if(mn.IsEnabled()) { + if(fDebug) LogPrintf("dseg - Sending masternode entry - %s \n", mn.addr.ToString().c_str()); + pfrom->PushMessage("dsee", mn.vin, mn.addr, mn.sig, mn.now, mn.pubkey, mn.pubkey2, count, i, mn.lastTimeSeen, mn.protocolVersion); + } + } else if (vin == mn.vin) { + if(fDebug) LogPrintf("dseg - Sending masternode entry - %s \n", mn.addr.ToString().c_str()); + pfrom->PushMessage("dsee", mn.vin, mn.addr, mn.sig, mn.now, mn.pubkey, mn.pubkey2, count, i, mn.lastTimeSeen, mn.protocolVersion); + LogPrintf("dseg - Sent 1 masternode entries to %s\n", pfrom->addr.ToString().c_str()); + return; + } + i++; + } + + LogPrintf("dseg - Sent %d masternode entries to %s\n", count, pfrom->addr.ToString().c_str()); + } + + else if (strCommand == "mnget") { //Masternode Payments Request Sync + if(fLiteMode) return; //disable all darksend/masternode related functionality + + /*if(pfrom->HasFulfilledRequest("mnget")) { + LogPrintf("mnget - peer already asked me for the list\n"); + Misbehaving(pfrom->GetId(), 20); + return; + }*/ + + pfrom->FulfilledRequest("mnget"); + masternodePayments.Sync(pfrom); + LogPrintf("mnget - Sent masternode winners to %s\n", pfrom->addr.ToString().c_str()); + } + else if (strCommand == "mnw") { //Masternode Payments Declare Winner + //this is required in litemode / nomntesting mode + CMasternodePaymentWinner winner; + int a = 0; + vRecv >> winner >> a; + + if(pindexBest == NULL) return; + + uint256 hash = winner.GetHash(); + if(mapSeenMasternodeVotes.count(hash)) { + if(fDebug) LogPrintf("mnw - seen vote %s Height %d bestHeight %d\n", hash.ToString().c_str(), winner.nBlockHeight, pindexBest->nHeight); + return; + } + + if(winner.nBlockHeight < pindexBest->nHeight - 10 || winner.nBlockHeight > pindexBest->nHeight+20){ + LogPrintf("mnw - winner out of range %s Height %d bestHeight %d\n", winner.vin.ToString().c_str(), winner.nBlockHeight, pindexBest->nHeight); + return; + } + + if(winner.vin.nSequence != std::numeric_limits::max()){ + LogPrintf("mnw - invalid nSequence\n"); + Misbehaving(pfrom->GetId(), 100); + return; + } + + LogPrintf("mnw - winning vote %s Height %d bestHeight %d\n", winner.vin.ToString().c_str(), winner.nBlockHeight, pindexBest->nHeight); + + if(!masternodePayments.CheckSignature(winner)){ + LogPrintf("mnw - invalid signature\n"); + Misbehaving(pfrom->GetId(), 100); + return; + } + + mapSeenMasternodeVotes.insert(make_pair(hash, winner)); + + if(masternodePayments.AddWinningMasternode(winner)){ + masternodePayments.Relay(winner); + } + } +} struct CompareValueOnly { @@ -25,6 +412,140 @@ struct CompareValueOnly } }; +struct CompareValueOnly2 +{ + bool operator()(const pair& t1, + const pair& t2) const + { + return t1.first < t2.first; + } +}; + +int CountMasternodesAboveProtocol(int protocolVersion) +{ + int i = 0; + LOCK(cs_masternodes); + BOOST_FOREACH(CMasterNode& mn, vecMasternodes) { + if(mn.protocolVersion < protocolVersion) continue; + i++; + } + + return i; + +} + + +int GetMasternodeByVin(CTxIn& vin) +{ + int i = 0; + LOCK(cs_masternodes); + BOOST_FOREACH(CMasterNode& mn, vecMasternodes) { + if (mn.vin == vin) return i; + i++; + } + + return -1; +} + +int GetCurrentMasterNode(int mod, int64_t nBlockHeight, int minProtocol) +{ + int i = 0; + unsigned int score = 0; + int winner = -1; + LOCK(cs_masternodes); + // scan for winner + BOOST_FOREACH(CMasterNode mn, vecMasternodes) { + mn.Check(); + if(mn.protocolVersion < minProtocol) continue; + if(!mn.IsEnabled()) { + i++; + continue; + } + + // calculate the score for each masternode + uint256 n = mn.CalculateScore(mod, nBlockHeight); + unsigned int n2 = 0; + memcpy(&n2, &n, sizeof(n2)); + + // determine the winner + if(n2 > score){ + score = n2; + winner = i; + } + i++; + } + + return winner; +} + +int GetMasternodeByRank(int findRank, int64_t nBlockHeight, int minProtocol) +{ + LOCK(cs_masternodes); + int i = 0; + + std::vector > vecMasternodeScores; + + i = 0; + BOOST_FOREACH(CMasterNode mn, vecMasternodes) { + mn.Check(); + if(mn.protocolVersion < minProtocol) continue; + if(!mn.IsEnabled()) { + i++; + continue; + } + + uint256 n = mn.CalculateScore(1, nBlockHeight); + unsigned int n2 = 0; + memcpy(&n2, &n, sizeof(n2)); + + vecMasternodeScores.push_back(make_pair(n2, i)); + i++; + } + + sort(vecMasternodeScores.rbegin(), vecMasternodeScores.rend(), CompareValueOnly2()); + + int rank = 0; + BOOST_FOREACH (PAIRTYPE(unsigned int, int)& s, vecMasternodeScores){ + rank++; + if(rank == findRank) return s.second; + } + + return -1; +} + +int GetMasternodeRank(CTxIn& vin, int64_t nBlockHeight, int minProtocol) +{ + LOCK(cs_masternodes); + std::vector > vecMasternodeScores; + + BOOST_FOREACH(CMasterNode& mn, vecMasternodes) { + mn.Check(); + + if(mn.protocolVersion < minProtocol) continue; + if(!mn.IsEnabled()) { + continue; + } + + uint256 n = mn.CalculateScore(1, nBlockHeight); + unsigned int n2 = 0; + memcpy(&n2, &n, sizeof(n2)); + + vecMasternodeScores.push_back(make_pair(n2, mn.vin)); + } + + sort(vecMasternodeScores.rbegin(), vecMasternodeScores.rend(), CompareValueOnly()); + + unsigned int rank = 0; + BOOST_FOREACH (PAIRTYPE(unsigned int, CTxIn)& s, vecMasternodeScores){ + rank++; + if(s.second == vin) { + return rank; + } + } + + return -1; +} + //Get the last hash that matches the modulus given. Processed in reverse order bool GetBlockHash(uint256& hash, int nBlockHeight) { @@ -63,94 +584,12 @@ bool GetBlockHash(uint256& hash, int nBlockHeight) return false; } -CMasternode::CMasternode() -{ - LOCK(cs); - vin = CTxIn(); - addr = CService(); - pubkey = CPubKey(); - pubkey2 = CPubKey(); - sig = std::vector(); - activeState = MASTERNODE_ENABLED; - sigTime = GetAdjustedTime(); - lastDseep = 0; - lastTimeSeen = 0; - cacheInputAge = 0; - cacheInputAgeBlock = 0; - unitTest = false; - allowFreeTx = true; - protocolVersion = MIN_PEER_PROTO_VERSION; - nLastDsq = 0; - donationAddress = CScript(); - donationPercentage = 0; - nVote = 0; - lastVote = 0; - nScanningErrorCount = 0; - nLastScanningErrorBlockHeight = 0; - //mark last paid as current for new entries - nLastPaid = GetAdjustedTime(); -} - -CMasternode::CMasternode(const CMasternode& other) -{ - LOCK(cs); - vin = other.vin; - addr = other.addr; - pubkey = other.pubkey; - pubkey2 = other.pubkey2; - sig = other.sig; - activeState = other.activeState; - sigTime = other.sigTime; - lastDseep = other.lastDseep; - lastTimeSeen = other.lastTimeSeen; - cacheInputAge = other.cacheInputAge; - cacheInputAgeBlock = other.cacheInputAgeBlock; - unitTest = other.unitTest; - allowFreeTx = other.allowFreeTx; - protocolVersion = other.protocolVersion; - nLastDsq = other.nLastDsq; - donationAddress = other.donationAddress; - donationPercentage = other.donationPercentage; - nVote = other.nVote; - lastVote = other.lastVote; - nScanningErrorCount = other.nScanningErrorCount; - nLastScanningErrorBlockHeight = other.nLastScanningErrorBlockHeight; - nLastPaid = other.nLastPaid; - nLastPaid = GetAdjustedTime(); -} - -CMasternode::CMasternode(CService newAddr, CTxIn newVin, CPubKey newPubkey, std::vector newSig, int64_t newSigTime, CPubKey newPubkey2, int protocolVersionIn, CScript newDonationAddress, int newDonationPercentage) -{ - LOCK(cs); - vin = newVin; - addr = newAddr; - pubkey = newPubkey; - pubkey2 = newPubkey2; - sig = newSig; - activeState = MASTERNODE_ENABLED; - sigTime = newSigTime; - lastDseep = 0; - lastTimeSeen = 0; - cacheInputAge = 0; - cacheInputAgeBlock = 0; - unitTest = false; - allowFreeTx = true; - protocolVersion = protocolVersionIn; - nLastDsq = 0; - donationAddress = newDonationAddress; - donationPercentage = newDonationPercentage; - nVote = 0; - lastVote = 0; - nScanningErrorCount = 0; - nLastScanningErrorBlockHeight = 0; -} - // // Deterministically calculate a given "score" for a masternode depending on how close it's hash is to // the proof of work for that block. The further away they are the better, the furthest will win the election // and get paid this block // -uint256 CMasternode::CalculateScore(int mod, int64_t nBlockHeight) +uint256 CMasterNode::CalculateScore(int mod, int64_t nBlockHeight) { if(pindexBest == NULL) return 0; @@ -160,47 +599,298 @@ uint256 CMasternode::CalculateScore(int mod, int64_t nBlockHeight) if(!GetBlockHash(hash, nBlockHeight)) return 0; uint256 hash2 = Hash(BEGIN(hash), END(hash)); - uint256 hash3 = Hash(BEGIN(hash), END(hash), BEGIN(aux), END(aux)); + uint256 hash3 = Hash(BEGIN(hash), END(aux)); uint256 r = (hash3 > hash2 ? hash3 - hash2 : hash2 - hash3); return r; } -void CMasternode::Check() +void CMasterNode::Check() { - if(ShutdownRequested()) return; - - //TODO: Random segfault with this line removed - TRY_LOCK(cs_main, lockRecv); - if(!lockRecv) return; - //once spent, stop doing the checks - if(activeState == MASTERNODE_VIN_SPENT) return; + if(enabled==3) return; if(!UpdatedWithin(MASTERNODE_REMOVAL_SECONDS)){ - activeState = MASTERNODE_REMOVE; + enabled = 4; return; } if(!UpdatedWithin(MASTERNODE_EXPIRATION_SECONDS)){ - activeState = MASTERNODE_EXPIRED; + enabled = 2; return; } if(!unitTest){ CValidationState state; CTransaction tx = CTransaction(); - CTxOut vout = CTxOut(DARKSEND_POOL_MAX, darkSendPool.collateralPubKey); + CTxOut vout = CTxOut(499*COIN, darkSendPool.collateralPubKey); tx.vin.push_back(vin); tx.vout.push_back(vout); - if(!AcceptableInputs(mempool, tx, false, NULL)){ - activeState = MASTERNODE_VIN_SPENT; + //if(!AcceptableInputs(mempool, state, tx)){ + bool* pfMissingInputs; + + if(!AcceptableInputs(mempool, tx, false, pfMissingInputs)){ + enabled = 3; return; } } - activeState = MASTERNODE_ENABLED; // OK -} \ No newline at end of file + enabled = 1; // OK +} + +std::string CMasterNode::GetStatus() +{ + switch(enabled) + { + case 0: + return "Not Processed"; + case 1: + return "Ok"; + case 2: + return "Not Capable"; + case 3: + return "Stopped"; + case 4: + return "Input Too New"; + case 6: + return "Port Not Open"; + case 7: + return "Port Open"; + case 8: + return "Syncing"; + case 9: + return "Remotely Enabled"; + } +} + +bool CMasternodePayments::CheckSignature(CMasternodePaymentWinner& winner) +{ + //note: need to investigate why this is failing + std::string strMessage = winner.vin.ToString().c_str() + boost::lexical_cast(winner.nBlockHeight) + winner.payee.ToString(); + std::string strPubKey = strMainPubKey ; + CPubKey pubkey(ParseHex(strPubKey)); + + std::string errorMessage = ""; + if(!darkSendSigner.VerifyMessage(pubkey, winner.vchSig, strMessage, errorMessage)){ + return false; + } + + return true; +} + +bool CMasternodePayments::Sign(CMasternodePaymentWinner& winner) +{ + std::string strMessage = winner.vin.ToString().c_str() + boost::lexical_cast(winner.nBlockHeight) + winner.payee.ToString(); + + CKey key2; + CPubKey pubkey2; + std::string errorMessage = ""; + + if(!darkSendSigner.SetKey(strMasterPrivKey, errorMessage, key2, pubkey2)) + { + LogPrintf("CMasternodePayments::Sign - ERROR: Invalid masternodeprivkey: '%s'\n", errorMessage.c_str()); + return false; + } + + if(!darkSendSigner.SignMessage(strMessage, errorMessage, winner.vchSig, key2)) { + LogPrintf("CMasternodePayments::Sign - Sign message failed"); + return false; + } + + if(!darkSendSigner.VerifyMessage(pubkey2, winner.vchSig, strMessage, errorMessage)) { + LogPrintf("CMasternodePayments::Sign - Verify message failed"); + return false; + } + + return true; +} + +uint64_t CMasternodePayments::CalculateScore(uint256 blockHash, CTxIn& vin) +{ + uint256 n1 = blockHash; + uint256 n2 = Hash(BEGIN(n1), END(n1)); + uint256 n3 = Hash(BEGIN(vin.prevout.hash), END(vin.prevout.hash)); + uint256 n4 = n3 > n2 ? (n3 - n2) : (n2 - n3); + + //printf(" -- CMasternodePayments CalculateScore() n2 = %d \n", n2.Get64()); + //printf(" -- CMasternodePayments CalculateScore() n3 = %d \n", n3.Get64()); + //printf(" -- CMasternodePayments CalculateScore() n4 = %d \n", n4.Get64()); + + return n4.Get64(); +} + +bool CMasternodePayments::GetBlockPayee(int nBlockHeight, CScript& payee) +{ + BOOST_FOREACH(CMasternodePaymentWinner& winner, vWinning){ + if(winner.nBlockHeight == nBlockHeight) { + payee = winner.payee; + return true; + } + } + + return false; +} + +bool CMasternodePayments::GetWinningMasternode(int nBlockHeight, CTxIn& vinOut) +{ + BOOST_FOREACH(CMasternodePaymentWinner& winner, vWinning){ + if(winner.nBlockHeight == nBlockHeight) { + vinOut = winner.vin; + return true; + } + } + + return false; +} + +bool CMasternodePayments::AddWinningMasternode(CMasternodePaymentWinner& winnerIn) +{ + uint256 blockHash = 0; + if(!GetBlockHash(blockHash, winnerIn.nBlockHeight-576)) { + return false; + } + + winnerIn.score = CalculateScore(blockHash, winnerIn.vin); + + bool foundBlock = false; + BOOST_FOREACH(CMasternodePaymentWinner& winner, vWinning){ + if(winner.nBlockHeight == winnerIn.nBlockHeight) { + foundBlock = true; + if(winner.score < winnerIn.score){ + winner.score = winnerIn.score; + winner.vin = winnerIn.vin; + winner.payee = winnerIn.payee; + winner.vchSig = winnerIn.vchSig; + + return true; + } + } + } + + // if it's not in the vector + if(!foundBlock){ + vWinning.push_back(winnerIn); + mapSeenMasternodeVotes.insert(make_pair(winnerIn.GetHash(), winnerIn)); + + return true; + } + + return false; +} + +void CMasternodePayments::CleanPaymentList() +{ + TRY_LOCK(cs_masternodes, lockMasternodes); + if(!lockMasternodes) return; + + if(pindexBest == NULL) return; + + int nLimit = std::max(((int)vecMasternodes.size())*2, 1000); + + vector::iterator it; + for(it=vWinning.begin();itnHeight - (*it).nBlockHeight > nLimit){ + if(fDebug) LogPrintf("CMasternodePayments::CleanPaymentList - Removing old masternode payment - block %d\n", (*it).nBlockHeight); + vWinning.erase(it); + break; + } + } +} + +bool CMasternodePayments::ProcessBlock(int nBlockHeight) +{ + LOCK(cs_masternodes); + if(!enabled) return false; + CMasternodePaymentWinner winner; + + std::vector vecLastPayments; + int c = 0; + BOOST_REVERSE_FOREACH(CMasternodePaymentWinner& winner, vWinning){ + vecLastPayments.push_back(winner.vin); + //if we have one full payment cycle, break + if(++c > (int)vecMasternodes.size()) break; + } + + std::random_shuffle ( vecMasternodes.begin(), vecMasternodes.end() ); + BOOST_FOREACH(CMasterNode& mn, vecMasternodes) { + bool found = false; + BOOST_FOREACH(CTxIn& vin, vecLastPayments) + if(mn.vin == vin) found = true; + + if(found) continue; + + mn.Check(); + if(!mn.IsEnabled()) { + continue; + } + + winner.score = 0; + winner.nBlockHeight = nBlockHeight; + winner.vin = mn.vin; + winner.payee =GetScriptForDestination(mn.pubkey.GetID()); + + break; + } + + //if we can't find someone to get paid, pick randomly + if(winner.nBlockHeight == 0 && vecMasternodes.size() > 0) { + winner.score = 0; + winner.nBlockHeight = nBlockHeight; + winner.vin = vecMasternodes[0].vin; + winner.payee =GetScriptForDestination(vecMasternodes[0].pubkey.GetID()); + } + + if(Sign(winner)){ + if(AddWinningMasternode(winner)){ + Relay(winner); + return true; + } + } + + return false; +} + +void CMasternodePayments::Relay(CMasternodePaymentWinner& winner) +{ + if(!fLiteMode && !IsInitialBlockDownload() && !IsSyncing()) + { + CInv inv(MSG_MASTERNODE_WINNER, winner.GetHash()); + + vector vInv; + vInv.push_back(inv); + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes){ + pnode->PushMessage("inv", vInv); + } + } +} + +void CMasternodePayments::Sync(CNode* node) +{ + int a = 0; + BOOST_FOREACH(CMasternodePaymentWinner& winner, vWinning) + if(winner.nBlockHeight >= pindexBest->nHeight-10 && winner.nBlockHeight <= pindexBest->nHeight + 20) + node->PushMessage("mnw", winner, a); +} + + +bool CMasternodePayments::SetPrivKey(std::string strPrivKey) +{ + CMasternodePaymentWinner winner; + + // Test signing successful, proceed + strMasterPrivKey = strPrivKey; + + Sign(winner); + + if(CheckSignature(winner)){ + LogPrintf("CMasternodePayments::SetPrivKey - Successfully initialized as masternode payments master\n"); + enabled = true; + return true; + } else { + return false; + } +} diff --git a/src/masternode.h b/src/masternode.h index 1172a93e..4c601123 100644 --- a/src/masternode.h +++ b/src/masternode.h @@ -1,3 +1,4 @@ + // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2012 The Darkcoin developers // Distributed under the MIT/X11 software license, see the accompanying @@ -5,17 +6,22 @@ #ifndef MASTERNODE_H #define MASTERNODE_H +#include "uint256.h" #include "uint256.h" #include "sync.h" #include "net.h" #include "key.h" +//#include "primitives/transaction.h" +//#include "primitives/block.h" #include "util.h" +//#include "script/script.h" #include "base58.h" #include "main.h" #include "timedata.h" #include "script.h" -#include "masternode.h" +class CMasterNode; +class CMasternodePayments; class uint256; #define MASTERNODE_NOT_PROCESSED 0 // initial state @@ -28,7 +34,7 @@ class uint256; #define MASTERNODE_SYNC_IN_PROCESS 8 #define MASTERNODE_REMOTELY_ENABLED 9 -#define MASTERNODE_MIN_CONFIRMATIONS 7 +#define MASTERNODE_MIN_CONFIRMATIONS 15 #define MASTERNODE_MIN_DSEEP_SECONDS (30*60) #define MASTERNODE_MIN_DSEE_SECONDS (5*60) #define MASTERNODE_PING_SECONDS (1*60) @@ -37,147 +43,70 @@ class uint256; using namespace std; -class CMasternode; +class CMasternodePaymentWinner; extern CCriticalSection cs_masternodes; +extern std::vector vecMasternodes; +extern CMasternodePayments masternodePayments; +extern std::vector vecMasternodeAskedFor; +extern map mapSeenMasternodeVotes; extern map mapCacheBlockHashes; -bool GetBlockHash(uint256& hash, int nBlockHeight); + +// manage the masternode connections +void ProcessMasternodeConnections(); +int CountMasternodesAboveProtocol(int protocolVersion); + + +void ProcessMessageMasternode(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); // -// The Masternode Class. For managing the darksend process. It contains the input of the 10000 Memetic, signature to prove +// The Masternode Class. For managing the darksend process. It contains the input of the 1000DRK, signature to prove // it's the one who own that ip address and code for calculating the payment election. // -class CMasternode +class CMasterNode { -private: - // critical section to protect the inner data structures - mutable CCriticalSection cs; - public: - enum state { - MASTERNODE_ENABLED = 1, - MASTERNODE_EXPIRED = 2, - MASTERNODE_VIN_SPENT = 3, - MASTERNODE_REMOVE = 4, - MASTERNODE_POS_ERROR = 5 - }; - - CTxIn vin; + static int minProtoVersion; CService addr; + CTxIn vin; + int64_t lastTimeSeen; CPubKey pubkey; CPubKey pubkey2; std::vector sig; - int activeState; - int64_t sigTime; //dsee message times + int64_t now; //dsee message times int64_t lastDseep; - int64_t lastTimeSeen; int cacheInputAge; int cacheInputAgeBlock; + int enabled; bool unitTest; bool allowFreeTx; int protocolVersion; - int64_t nLastDsq; //the dsq count from the last dsq broadcast of this node - CScript donationAddress; - int donationPercentage; - int nVote; - int64_t lastVote; - int nScanningErrorCount; - int nLastScanningErrorBlockHeight; - int64_t nLastPaid; - - CMasternode(); - CMasternode(const CMasternode& other); - CMasternode(CService newAddr, CTxIn newVin, CPubKey newPubkey, std::vector newSig, int64_t newSigTime, CPubKey newPubkey2, int protocolVersionIn, CScript donationAddress, int donationPercentage); + //the dsq count from the last dsq broadcast of this node + int64_t nLastDsq; - - void swap(CMasternode& first, CMasternode& second) // nothrow - { - // enable ADL (not necessary in our case, but good practice) - using std::swap; - - // by swapping the members of two classes, - // the two classes are effectively swapped - swap(first.vin, second.vin); - swap(first.addr, second.addr); - swap(first.pubkey, second.pubkey); - swap(first.pubkey2, second.pubkey2); - swap(first.sig, second.sig); - swap(first.activeState, second.activeState); - swap(first.sigTime, second.sigTime); - swap(first.lastDseep, second.lastDseep); - swap(first.lastTimeSeen, second.lastTimeSeen); - swap(first.cacheInputAge, second.cacheInputAge); - swap(first.cacheInputAgeBlock, second.cacheInputAgeBlock); - swap(first.unitTest, second.unitTest); - swap(first.allowFreeTx, second.allowFreeTx); - swap(first.protocolVersion, second.protocolVersion); - swap(first.nLastDsq, second.nLastDsq); - swap(first.donationAddress, second.donationAddress); - swap(first.donationPercentage, second.donationPercentage); - swap(first.nVote, second.nVote); - swap(first.lastVote, second.lastVote); - swap(first.nScanningErrorCount, second.nScanningErrorCount); - swap(first.nLastScanningErrorBlockHeight, second.nLastScanningErrorBlockHeight); - swap(first.nLastPaid, second.nLastPaid); - } - - CMasternode& operator=(CMasternode from) + CMasterNode(CService newAddr, CTxIn newVin, CPubKey newPubkey, std::vector newSig, int64_t newNow, CPubKey newPubkey2, int protocolVersionIn) { - swap(*this, from); - return *this; - } - friend bool operator==(const CMasternode& a, const CMasternode& b) - { - return a.vin == b.vin; - } - friend bool operator!=(const CMasternode& a, const CMasternode& b) - { - return !(a.vin == b.vin); + addr = newAddr; + vin = newVin; + pubkey = newPubkey; + pubkey2 = newPubkey2; + sig = newSig; + now = newNow; + enabled = 1; + lastTimeSeen = 0; + unitTest = false; + cacheInputAge = 0; + cacheInputAgeBlock = 0; + nLastDsq = 0; + lastDseep = 0; + allowFreeTx = true; + protocolVersion = protocolVersionIn; } uint256 CalculateScore(int mod=1, int64_t nBlockHeight=0); - IMPLEMENT_SERIALIZE - ( - // serialized format: - // * version byte (currently 0) - // * all fields (?) - { - LOCK(cs); - unsigned char nVersion = 0; - READWRITE(nVersion); - READWRITE(vin); - READWRITE(addr); - READWRITE(pubkey); - READWRITE(pubkey2); - READWRITE(sig); - READWRITE(activeState); - READWRITE(sigTime); - READWRITE(lastDseep); - READWRITE(lastTimeSeen); - READWRITE(cacheInputAge); - READWRITE(cacheInputAgeBlock); - READWRITE(unitTest); - READWRITE(allowFreeTx); - READWRITE(protocolVersion); - READWRITE(nLastDsq); - READWRITE(donationAddress); - READWRITE(donationPercentage); - READWRITE(nVote); - READWRITE(lastVote); - READWRITE(nScanningErrorCount); - READWRITE(nLastScanningErrorBlockHeight); - READWRITE(nLastPaid); - } - ) - - int64_t SecondsSincePayment() - { - return (GetAdjustedTime() - nLastPaid); - } - void UpdateLastSeen(int64_t override=0) { if(override == 0){ @@ -195,6 +124,7 @@ class CMasternode } void Check(); + std::string GetStatus(); bool UpdatedWithin(int seconds) { @@ -210,7 +140,7 @@ class CMasternode bool IsEnabled() { - return activeState == MASTERNODE_ENABLED; + return enabled == 1; } int GetMasternodeInputAge() @@ -224,18 +154,99 @@ class CMasternode return cacheInputAge+(pindexBest->nHeight-cacheInputAgeBlock); } +}; + + +// Get the current winner for this block +int GetCurrentMasterNode(int mod=1, int64_t nBlockHeight=0, int minProtocol=CMasterNode::minProtoVersion); - std::string Status() { - std::string strStatus = "ACTIVE"; +int GetMasternodeByVin(CTxIn& vin); +int GetMasternodeRank(CTxIn& vin, int64_t nBlockHeight=0, int minProtocol=CMasterNode::minProtoVersion); +int GetMasternodeByRank(int findRank, int64_t nBlockHeight=0, int minProtocol=CMasterNode::minProtoVersion); - if(activeState == CMasternode::MASTERNODE_ENABLED) strStatus = "ENABLED"; - if(activeState == CMasternode::MASTERNODE_EXPIRED) strStatus = "EXPIRED"; - if(activeState == CMasternode::MASTERNODE_VIN_SPENT) strStatus = "VIN_SPENT"; - if(activeState == CMasternode::MASTERNODE_REMOVE) strStatus = "REMOVE"; - if(activeState == CMasternode::MASTERNODE_POS_ERROR) strStatus = "POS_ERROR"; - return strStatus; +// for storing the winning payments +class CMasternodePaymentWinner +{ +public: + int nBlockHeight; + CTxIn vin; + CScript payee; + std::vector vchSig; + uint64_t score; + + CMasternodePaymentWinner() { + nBlockHeight = 0; + score = 0; + vin = CTxIn(); + payee = CScript(); } + + uint256 GetHash(){ + uint256 n2 = Hash(BEGIN(nBlockHeight), END(nBlockHeight)); + uint256 n3 = vin.prevout.hash > n2 ? (vin.prevout.hash - n2) : (n2 - vin.prevout.hash); + + return n3; + } + + ADD_SERIALIZE_METHODS; + + template + inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion){ + unsigned int nSerSize = 0; + READWRITE(nBlockHeight); + READWRITE(payee); + READWRITE(vin); + READWRITE(score); + READWRITE(vchSig); + } }; +// +// Masternode Payments Class +// Keeps track of who should get paid for which blocks +// + +class CMasternodePayments +{ +private: + std::vector vWinning; + int nSyncedFromPeer; + std::string strMasterPrivKey; + std::string strTestPubKey; + std::string strMainPubKey; + bool enabled; + +public: + + CMasternodePayments() { + strMainPubKey = "0430a870a5a1e8a85b816c64cb86d6aa4955134efe72c458246fb84cfd5221c111ee84dfc0dbf160d339415044259519eae2840ab3ffe86368f3f9a93ec22e3f4d"; + strTestPubKey = "0430a870a5a1e8a85b816c64cb86d6aa4955134efe72c458246fb84cfd5221c111ee84dfc0dbf160d339415044259519eae2840ab3ffe86368f3f9a93ec22e3f4d"; + enabled = false; + } + + bool SetPrivKey(std::string strPrivKey); + bool CheckSignature(CMasternodePaymentWinner& winner); + bool Sign(CMasternodePaymentWinner& winner); + + // Deterministically calculate a given "score" for a masternode depending on how close it's hash is + // to the blockHeight. The further away they are the better, the furthest will win the election + // and get paid this block + // + + uint64_t CalculateScore(uint256 blockHash, CTxIn& vin); + bool GetWinningMasternode(int nBlockHeight, CTxIn& vinOut); + bool AddWinningMasternode(CMasternodePaymentWinner& winner); + bool ProcessBlock(int nBlockHeight); + void Relay(CMasternodePaymentWinner& winner); + void Sync(CNode* node); + void CleanPaymentList(); + int LastPayment(CMasterNode& mn); + + //slow + bool GetBlockPayee(int nBlockHeight, CScript& payee); +}; + + + #endif diff --git a/src/masternodeconfig.cpp b/src/masternodeconfig.cpp index 75b4bc47..4f32dd56 100644 --- a/src/masternodeconfig.cpp +++ b/src/masternodeconfig.cpp @@ -2,16 +2,15 @@ #include "net.h" #include "masternodeconfig.h" #include "util.h" -#include CMasternodeConfig masternodeConfig; -void CMasternodeConfig::add(std::string alias, std::string ip, std::string privKey, std::string txHash, std::string outputIndex, std::string donationAddress, std::string donationPercent) { - CMasternodeEntry cme(alias, ip, privKey, txHash, outputIndex, donationAddress, donationPercent); +void CMasternodeConfig::add(std::string alias, std::string ip, std::string privKey, std::string txHash, std::string outputIndex) { + CMasternodeEntry cme(alias, ip, privKey, txHash, outputIndex); entries.push_back(cme); } -bool CMasternodeConfig::read(boost::filesystem::path path) { +bool CMasternodeConfig::read(std::string& strErr) { boost::filesystem::ifstream streamConfig(GetMasternodeConfigFile()); if (!streamConfig.good()) { return true; // No masternode.conf file is OK @@ -23,35 +22,20 @@ bool CMasternodeConfig::read(boost::filesystem::path path) { continue; } std::istringstream iss(line); - std::string alias, ip, privKey, txHash, outputIndex, donation, donationAddress, donationPercent; - if (!(iss >> alias >> ip >> privKey >> txHash >> outputIndex >> donation)) { - donationAddress = ""; - donationPercent = ""; - iss.str(line); - iss.clear(); - if (!(iss >> alias >> ip >> privKey >> txHash >> outputIndex)) { - LogPrintf("Could not parse masternode.conf line: %s\n", line.c_str()); - streamConfig.close(); - return false; - } - } else { - size_t pos = donation.find_first_of(":"); - if(pos == string::npos) { // no ":" found - donationPercent = "100"; - donationAddress = donation; - } else { - donationPercent = donation.substr(pos + 1); - donationAddress = donation.substr(0, pos); - } - CBitcoinAddress address(donationAddress); - if (!address.IsValid()) { - LogPrintf("Invalid Memetic address in masternode.conf line: %s\n", line.c_str()); - streamConfig.close(); - return false; - } + std::string alias, ip, privKey, txHash, outputIndex; + if (!(iss >> alias >> ip >> privKey >> txHash >> outputIndex)) { + strErr = "Could not parse masternode.conf line: " + line; + streamConfig.close(); + return false; } - add(alias, ip, privKey, txHash, outputIndex, donationAddress, donationPercent); +/* if(CService(ip).GetPort() != 19999 && CService(ip).GetPort() != 9999) { + strErr = "Invalid port (must be 9999 for mainnet or 19999 for testnet) detected in masternode.conf: " + line; + streamConfig.close(); + return false; + }*/ + + add(alias, ip, privKey, txHash, outputIndex); } streamConfig.close(); diff --git a/src/masternodeconfig.h b/src/masternodeconfig.h index 747af476..c5afb68e 100644 --- a/src/masternodeconfig.h +++ b/src/masternodeconfig.h @@ -1,5 +1,5 @@ - -// Copyright (c) 2014-2015 The Dash developers +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -19,95 +19,84 @@ class CMasternodeConfig { public: - - class CMasternodeEntry { - - private: - std::string alias; - std::string ip; - std::string privKey; - std::string txHash; - std::string outputIndex; - std::string donationAddress; - std::string donationPercent; - public: - - CMasternodeEntry(std::string alias, std::string ip, std::string privKey, std::string txHash, std::string outputIndex, std::string donationAddress, std::string donationPercent) { - this->alias = alias; - this->ip = ip; - this->privKey = privKey; - this->txHash = txHash; - this->outputIndex = outputIndex; - this->donationAddress = donationAddress; - this->donationPercent = donationPercent; - } - - const std::string& getAlias() const { - return alias; - } - - void setAlias(const std::string& alias) { - this->alias = alias; - } - - const std::string& getOutputIndex() const { - return outputIndex; - } - - void setOutputIndex(const std::string& outputIndex) { - this->outputIndex = outputIndex; - } - - const std::string& getPrivKey() const { - return privKey; - } - - void setPrivKey(const std::string& privKey) { - this->privKey = privKey; - } - - const std::string& getTxHash() const { - return txHash; - } - - void setTxHash(const std::string& txHash) { - this->txHash = txHash; - } - - const std::string& getIp() const { - return ip; - } - - void setIp(const std::string& ip) { - this->ip = ip; - } - - const std::string& getDonationAddress() const { - return donationAddress; - } - - const std::string& getDonationPercentage() const { - return donationPercent; - } - }; - - CMasternodeConfig() { - entries = std::vector(); - } - - void clear(); - bool read(boost::filesystem::path path); - void add(std::string alias, std::string ip, std::string privKey, std::string txHash, std::string outputIndex, std::string donationAddress, std::string donationPercent); - - std::vector& getEntries() { - return entries; - } + class CMasternodeEntry { + + private: + std::string alias; + std::string ip; + std::string privKey; + std::string txHash; + std::string outputIndex; + + public: + + CMasternodeEntry(std::string alias, std::string ip, std::string privKey, std::string txHash, std::string outputIndex) { + this->alias = alias; + this->ip = ip; + this->privKey = privKey; + this->txHash = txHash; + this->outputIndex = outputIndex; + } + + const std::string& getAlias() const { + return alias; + } + + void setAlias(const std::string& alias) { + this->alias = alias; + } + + const std::string& getOutputIndex() const { + return outputIndex; + } + + void setOutputIndex(const std::string& outputIndex) { + this->outputIndex = outputIndex; + } + + const std::string& getPrivKey() const { + return privKey; + } + + void setPrivKey(const std::string& privKey) { + this->privKey = privKey; + } + + const std::string& getTxHash() const { + return txHash; + } + + void setTxHash(const std::string& txHash) { + this->txHash = txHash; + } + + const std::string& getIp() const { + return ip; + } + + void setIp(const std::string& ip) { + this->ip = ip; + } + }; + + CMasternodeConfig() { + entries = std::vector(); + } + + void clear(); + bool read(std::string& strErr); + void add(std::string alias, std::string ip, std::string privKey, std::string txHash, std::string outputIndex); + + std::vector& getEntries() { + return entries; + } private: - std::vector entries; + std::vector entries; }; #endif /* SRC_MASTERNODECONFIG_H_ */ + diff --git a/src/masternodeman.cpp b/src/masternodeman.cpp deleted file mode 100644 index 52c1e4f6..00000000 --- a/src/masternodeman.cpp +++ /dev/null @@ -1,980 +0,0 @@ -#include "masternodeman.h" -#include "masternode.h" -#include "activemasternode.h" -#include "darksend.h" -#include "core.h" -#include "util.h" -#include "addrman.h" -#include -#include - - -/** Masternode manager */ -CMasternodeMan mnodeman; -CCriticalSection cs_process_message; - -struct CompareValueOnly -{ - bool operator()(const pair& t1, - const pair& t2) const - { - return t1.first < t2.first; - } -}; -struct CompareValueOnlyMN -{ - bool operator()(const pair& t1, - const pair& t2) const - { - return t1.first < t2.first; - } -}; - - -// -// CMasternodeDB -// - -CMasternodeDB::CMasternodeDB() -{ - pathMN = GetDataDir() / "mncache.dat"; - strMagicMessage = "MasternodeCache"; -} - -bool CMasternodeDB::Write(const CMasternodeMan& mnodemanToSave) -{ - int64_t nStart = GetTimeMillis(); - - // serialize addresses, checksum data up to that point, then append csum - CDataStream ssMasternodes(SER_DISK, CLIENT_VERSION); - ssMasternodes << strMagicMessage; // masternode cache file specific magic message - ssMasternodes << FLATDATA(Params().MessageStart()); // network specific magic number - ssMasternodes << mnodemanToSave; - uint256 hash = Hash(ssMasternodes.begin(), ssMasternodes.end()); - ssMasternodes << hash; - - // open output file, and associate with CAutoFile - FILE *file = fopen(pathMN.string().c_str(), "wb"); - CAutoFile fileout = CAutoFile(file, SER_DISK, CLIENT_VERSION); - if (!fileout) - return error("%s : Failed to open file %s", __func__, pathMN.string()); - - // Write and commit header, data - try { - fileout << ssMasternodes; - } - catch (std::exception &e) { - return error("%s : Serialize or I/O error - %s", __func__, e.what()); - } - FileCommit(fileout); - fileout.fclose(); - - LogPrintf("Written info to mncache.dat %dms\n", GetTimeMillis() - nStart); - LogPrintf(" %s\n", mnodemanToSave.ToString()); - - return true; -} - -CMasternodeDB::ReadResult CMasternodeDB::Read(CMasternodeMan& mnodemanToLoad) -{ - int64_t nStart = GetTimeMillis(); - // open input file, and associate with CAutoFile - FILE *file = fopen(pathMN.string().c_str(), "rb"); - CAutoFile filein = CAutoFile(file, SER_DISK, CLIENT_VERSION); - if (!filein) - { - error("%s : Failed to open file %s", __func__, pathMN.string()); - return FileError; - } - - // use file size to size memory buffer - int fileSize = boost::filesystem::file_size(pathMN); - int dataSize = fileSize - sizeof(uint256); - // Don't try to resize to a negative number if file is small - if (dataSize < 0) - dataSize = 0; - vector vchData; - vchData.resize(dataSize); - uint256 hashIn; - - // read data and checksum from file - try { - filein.read((char *)&vchData[0], dataSize); - filein >> hashIn; - } - catch (std::exception &e) { - error("%s : Deserialize or I/O error - %s", __func__, e.what()); - return HashReadError; - } - filein.fclose(); - - CDataStream ssMasternodes(vchData, SER_DISK, CLIENT_VERSION); - - // verify stored checksum matches input data - uint256 hashTmp = Hash(ssMasternodes.begin(), ssMasternodes.end()); - if (hashIn != hashTmp) - { - error("%s : Checksum mismatch, data corrupted", __func__); - return IncorrectHash; - } - - unsigned char pchMsgTmp[4]; - std::string strMagicMessageTmp; - try { - // de-serialize file header (masternode cache file specific magic message) and .. - - ssMasternodes >> strMagicMessageTmp; - - // ... verify the message matches predefined one - if (strMagicMessage != strMagicMessageTmp) - { - error("%s : Invalid masternode cache magic message", __func__); - return IncorrectMagicMessage; - } - - // de-serialize file header (network specific magic number) and .. - ssMasternodes >> FLATDATA(pchMsgTmp); - - // ... verify the network matches ours - if (memcmp(pchMsgTmp, Params().MessageStart(), sizeof(pchMsgTmp))) - { - error("%s : Invalid network magic number", __func__); - return IncorrectMagicNumber; - } - - // de-serialize address data into one CMnList object - ssMasternodes >> mnodemanToLoad; - } - catch (std::exception &e) { - mnodemanToLoad.Clear(); - error("%s : Deserialize or I/O error - %s", __func__, e.what()); - return IncorrectFormat; - } - - mnodemanToLoad.CheckAndRemove(); // clean out expired - LogPrintf("Loaded info from mncache.dat %dms\n", GetTimeMillis() - nStart); - LogPrintf(" %s\n", mnodemanToLoad.ToString()); - - return Ok; -} - -void DumpMasternodes() -{ - int64_t nStart = GetTimeMillis(); - - CMasternodeDB mndb; - CMasternodeMan tempMnodeman; - - LogPrintf("Verifying mncache.dat format...\n"); - CMasternodeDB::ReadResult readResult = mndb.Read(tempMnodeman); - // there was an error and it was not an error on file openning => do not proceed - if (readResult == CMasternodeDB::FileError) - LogPrintf("Missing masternode list file - mncache.dat, will try to recreate\n"); - else if (readResult != CMasternodeDB::Ok) - { - LogPrintf("Error reading mncache.dat: "); - if(readResult == CMasternodeDB::IncorrectFormat) - LogPrintf("magic is ok but data has invalid format, will try to recreate\n"); - else - { - LogPrintf("file format is unknown or invalid, please fix it manually\n"); - return; - } - } - LogPrintf("Writting info to mncache.dat...\n"); - mndb.Write(mnodeman); - - LogPrintf("Masternode dump finished %dms\n", GetTimeMillis() - nStart); -} - -CMasternodeMan::CMasternodeMan() { - nDsqCount = 0; -} - -bool CMasternodeMan::Add(CMasternode &mn) -{ - LOCK(cs); - - if (!mn.IsEnabled()) - return false; - - CMasternode *pmn = Find(mn.vin); - - if (pmn == NULL) - { - LogPrint("masternode", "CMasternodeMan: Adding new masternode %s - %i now\n", mn.addr.ToString().c_str(), size() + 1); - vMasternodes.push_back(mn); - return true; - } - - return false; -} - -void CMasternodeMan::AskForMN(CNode* pnode, CTxIn &vin) -{ - std::map::iterator i = mWeAskedForMasternodeListEntry.find(vin.prevout); - if (i != mWeAskedForMasternodeListEntry.end()) - { - int64_t t = (*i).second; - if (GetTime() < t) return; // we've asked recently - } - - // ask for the mnb info once from the node that sent mnp - - LogPrintf("CMasternodeMan::AskForMN - Asking node for missing entry, vin: %s\n", vin.ToString()); - pnode->PushMessage("dseg", vin); - int64_t askAgain = GetTime() + MASTERNODE_MIN_DSEEP_SECONDS; - mWeAskedForMasternodeListEntry[vin.prevout] = askAgain; -} - -void CMasternodeMan::Check() -{ - LOCK(cs); - - BOOST_FOREACH(CMasternode& mn, vMasternodes) - mn.Check(); -} - -void CMasternodeMan::CheckAndRemove() -{ - LOCK(cs); - - Check(); - - //remove inactive - vector::iterator it = vMasternodes.begin(); - while(it != vMasternodes.end()){ - if((*it).activeState == CMasternode::MASTERNODE_REMOVE || (*it).activeState == CMasternode::MASTERNODE_VIN_SPENT || (*it).protocolVersion < nMasternodeMinProtocol){ - LogPrint("masternode", "CMasternodeMan: Removing inactive masternode %s - %i now\n", (*it).addr.ToString().c_str(), size() - 1); - it = vMasternodes.erase(it); - } else { - ++it; - } - } - - // check who's asked for the masternode list - map::iterator it1 = mAskedUsForMasternodeList.begin(); - while(it1 != mAskedUsForMasternodeList.end()){ - if((*it1).second < GetTime()) { - mAskedUsForMasternodeList.erase(it1++); - } else { - ++it1; - } - } - - // check who we asked for the masternode list - it1 = mWeAskedForMasternodeList.begin(); - while(it1 != mWeAskedForMasternodeList.end()){ - if((*it1).second < GetTime()){ - mWeAskedForMasternodeList.erase(it1++); - } else { - ++it1; - } - } - - // check which masternodes we've asked for - map::iterator it2 = mWeAskedForMasternodeListEntry.begin(); - while(it2 != mWeAskedForMasternodeListEntry.end()){ - if((*it2).second < GetTime()){ - mWeAskedForMasternodeListEntry.erase(it2++); - } else { - ++it2; - } - } - -} - -void CMasternodeMan::Clear() -{ - LOCK(cs); - vMasternodes.clear(); - mAskedUsForMasternodeList.clear(); - mWeAskedForMasternodeList.clear(); - mWeAskedForMasternodeListEntry.clear(); - nDsqCount = 0; -} - -int CMasternodeMan::CountEnabled(int protocolVersion) -{ - int i = 0; - protocolVersion = protocolVersion == -1 ? masternodePayments.GetMinMasternodePaymentsProto() : protocolVersion; - - BOOST_FOREACH(CMasternode& mn, vMasternodes) { - mn.Check(); - if(mn.protocolVersion < protocolVersion || !mn.IsEnabled()) continue; - i++; - } - - return i; -} - -int CMasternodeMan::CountMasternodesAboveProtocol(int protocolVersion) -{ - int i = 0; - - BOOST_FOREACH(CMasternode& mn, vMasternodes) { - mn.Check(); - if(mn.protocolVersion < protocolVersion || !mn.IsEnabled()) continue; - i++; - } - - return i; -} - -void CMasternodeMan::DsegUpdate(CNode* pnode) -{ - LOCK(cs); - - std::map::iterator it = mWeAskedForMasternodeList.find(pnode->addr); - if (it != mWeAskedForMasternodeList.end()) - { - if (GetTime() < (*it).second) { - LogPrintf("dseg - we already asked %s for the list; skipping...\n", pnode->addr.ToString()); - return; - } - } - pnode->PushMessage("dseg", CTxIn()); - int64_t askAgain = GetTime() + MASTERNODES_DSEG_SECONDS; - mWeAskedForMasternodeList[pnode->addr] = askAgain; -} - -CMasternode *CMasternodeMan::Find(const CTxIn &vin) -{ - LOCK(cs); - - BOOST_FOREACH(CMasternode& mn, vMasternodes) - { - if(mn.vin.prevout == vin.prevout) - return &mn; - } - return NULL; -} - -CMasternode* CMasternodeMan::FindOldestNotInVec(const std::vector &vVins, int nMinimumAge) -{ - LOCK(cs); - - CMasternode *pOldestMasternode = NULL; - - BOOST_FOREACH(CMasternode &mn, vMasternodes) - { - mn.Check(); - if(!mn.IsEnabled()) continue; - - if(mn.GetMasternodeInputAge() < nMinimumAge) continue; - - bool found = false; - BOOST_FOREACH(const CTxIn& vin, vVins) - if(mn.vin.prevout == vin.prevout) - { - found = true; - break; - } - if(found) continue; - - if(pOldestMasternode == NULL || pOldestMasternode->SecondsSincePayment() < mn.SecondsSincePayment()) - { - pOldestMasternode = &mn; - } - } - - return pOldestMasternode; -} - -CMasternode *CMasternodeMan::FindRandom() -{ - LOCK(cs); - - if(size() == 0) return NULL; - - return &vMasternodes[GetRandInt(vMasternodes.size())]; -} - -CMasternode *CMasternodeMan::Find(const CPubKey &pubKeyMasternode) -{ - LOCK(cs); - - BOOST_FOREACH(CMasternode& mn, vMasternodes) - { - if(mn.pubkey2 == pubKeyMasternode) - return &mn; - } - return NULL; -} - -CMasternode *CMasternodeMan::FindRandomNotInVec(std::vector &vecToExclude, int protocolVersion) -{ - LOCK(cs); - - protocolVersion = protocolVersion == -1 ? masternodePayments.GetMinMasternodePaymentsProto() : protocolVersion; - - int nCountEnabled = CountEnabled(protocolVersion); - LogPrintf("CMasternodeMan::FindRandomNotInVec - nCountEnabled - vecToExclude.size() %d\n", nCountEnabled - vecToExclude.size()); - if(nCountEnabled - vecToExclude.size() < 1) return NULL; - - int rand = GetRandInt(nCountEnabled - vecToExclude.size()); - LogPrintf("CMasternodeMan::FindRandomNotInVec - rand %d\n", rand); - bool found; - - BOOST_FOREACH(CMasternode &mn, vMasternodes) { - if(mn.protocolVersion < protocolVersion || !mn.IsEnabled()) continue; - found = false; - BOOST_FOREACH(CTxIn &usedVin, vecToExclude) { - if(mn.vin.prevout == usedVin.prevout) { - found = true; - break; - } - } - if(found) continue; - if(--rand < 1) { - return &mn; - } - } - - return NULL; -} - -CMasternode* CMasternodeMan::GetCurrentMasterNode(int mod, int64_t nBlockHeight, int minProtocol) -{ - unsigned int score = 0; - CMasternode* winner = NULL; - - // scan for winner - BOOST_FOREACH(CMasternode& mn, vMasternodes) { - mn.Check(); - if(mn.protocolVersion < minProtocol || !mn.IsEnabled()) continue; - - // calculate the score for each masternode - uint256 n = mn.CalculateScore(mod, nBlockHeight); - unsigned int n2 = 0; - memcpy(&n2, &n, sizeof(n2)); - - // determine the winner - if(n2 > score){ - score = n2; - winner = &mn; - } - } - - return winner; -} - -int CMasternodeMan::GetMasternodeRank(const CTxIn& vin, int64_t nBlockHeight, int minProtocol, bool fOnlyActive) -{ - std::vector > vecMasternodeScores; - - //make sure we know about this block - uint256 hash = 0; - if(!GetBlockHash(hash, nBlockHeight)) return -1; - - // scan for winner - BOOST_FOREACH(CMasternode& mn, vMasternodes) { - - if(mn.protocolVersion < minProtocol) continue; - if(fOnlyActive) { - mn.Check(); - if(!mn.IsEnabled()) continue; - } - - uint256 n = mn.CalculateScore(1, nBlockHeight); - unsigned int n2 = 0; - memcpy(&n2, &n, sizeof(n2)); - - vecMasternodeScores.push_back(make_pair(n2, mn.vin)); - } - - sort(vecMasternodeScores.rbegin(), vecMasternodeScores.rend(), CompareValueOnly()); - - int rank = 0; - BOOST_FOREACH (PAIRTYPE(unsigned int, CTxIn)& s, vecMasternodeScores){ - rank++; - if(s.second == vin) { - return rank; - } - } - - return -1; -} - -std::vector > CMasternodeMan::GetMasternodeRanks(int64_t nBlockHeight, int minProtocol) -{ - std::vector > vecMasternodeScores; - std::vector > vecMasternodeRanks; - - //make sure we know about this block - uint256 hash = 0; - if(!GetBlockHash(hash, nBlockHeight)) return vecMasternodeRanks; - - // scan for winner - BOOST_FOREACH(CMasternode& mn, vMasternodes) { - - mn.Check(); - - if(mn.protocolVersion < minProtocol) continue; - if(!mn.IsEnabled()) { - continue; - } - - uint256 n = mn.CalculateScore(1, nBlockHeight); - unsigned int n2 = 0; - memcpy(&n2, &n, sizeof(n2)); - - vecMasternodeScores.push_back(make_pair(n2, mn)); - } - - sort(vecMasternodeScores.rbegin(), vecMasternodeScores.rend(), CompareValueOnlyMN()); - - int rank = 0; - BOOST_FOREACH (PAIRTYPE(unsigned int, CMasternode)& s, vecMasternodeScores){ - rank++; - vecMasternodeRanks.push_back(make_pair(rank, s.second)); - } - - return vecMasternodeRanks; -} - -CMasternode* CMasternodeMan::GetMasternodeByRank(int nRank, int64_t nBlockHeight, int minProtocol, bool fOnlyActive) -{ - std::vector > vecMasternodeScores; - - // scan for winner - BOOST_FOREACH(CMasternode& mn, vMasternodes) { - - if(mn.protocolVersion < minProtocol) continue; - if(fOnlyActive) { - mn.Check(); - if(!mn.IsEnabled()) continue; - } - - uint256 n = mn.CalculateScore(1, nBlockHeight); - unsigned int n2 = 0; - memcpy(&n2, &n, sizeof(n2)); - - vecMasternodeScores.push_back(make_pair(n2, mn.vin)); - } - - sort(vecMasternodeScores.rbegin(), vecMasternodeScores.rend(), CompareValueOnly()); - - int rank = 0; - BOOST_FOREACH (PAIRTYPE(unsigned int, CTxIn)& s, vecMasternodeScores){ - rank++; - if(rank == nRank) { - return Find(s.second); - } - } - - return NULL; -} - -void CMasternodeMan::ProcessMasternodeConnections() -{ - LOCK(cs_vNodes); - - if(!darkSendPool.pSubmittedToMasternode) return; - - BOOST_FOREACH(CNode* pnode, vNodes) - { - if(darkSendPool.pSubmittedToMasternode->addr == pnode->addr) continue; - - if(pnode->fDarkSendMaster){ - LogPrintf("Closing masternode connection %s \n", pnode->addr.ToString().c_str()); - pnode->CloseSocketDisconnect(); - } - } -} - -void CMasternodeMan::ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) -{ - - //Normally would disable functionality, NEED this enabled for staking. - //if(fLiteMode) return; - - if(!darkSendPool.IsBlockchainSynced()) return; - - LOCK(cs_process_message); - - if (strCommand == "dsee") { //DarkSend Election Entry - - CTxIn vin; - CService addr; - CPubKey pubkey; - CPubKey pubkey2; - vector vchSig; - int64_t sigTime; - int count; - int current; - int64_t lastUpdated; - int protocolVersion; - CScript donationAddress; - int donationPercentage; - std::string strMessage; - - // 70047 and greater - vRecv >> vin >> addr >> vchSig >> sigTime >> pubkey >> pubkey2 >> count >> current >> lastUpdated >> protocolVersion >> donationAddress >> donationPercentage; - - // make sure signature isn't in the future (past is OK) - if (sigTime > GetAdjustedTime() + 60 * 60) { - LogPrintf("dsee - Signature rejected, too far into the future %s\n", vin.ToString().c_str()); - return; - } - - bool isLocal = addr.IsRFC1918() || addr.IsLocal(); - //if(RegTest()) isLocal = false; - - std::string vchPubKey(pubkey.begin(), pubkey.end()); - std::string vchPubKey2(pubkey2.begin(), pubkey2.end()); - - strMessage = addr.ToString() + boost::lexical_cast(sigTime) + vchPubKey + vchPubKey2 + boost::lexical_cast(protocolVersion) + donationAddress.ToString() + boost::lexical_cast(donationPercentage); - - if(donationPercentage < 0 || donationPercentage > 100){ - LogPrintf("dsee - donation percentage out of range %d\n", donationPercentage); - return; - } - if(protocolVersion < MIN_POOL_PEER_PROTO_VERSION) { - LogPrintf("dsee - ignoring outdated masternode %s protocol version %d\n", vin.ToString().c_str(), protocolVersion); - return; - } - - CScript pubkeyScript; - pubkeyScript.SetDestination(pubkey.GetID()); - - if(pubkeyScript.size() != 25) { - LogPrintf("dsee - pubkey the wrong size\n"); - Misbehaving(pfrom->GetId(), 100); - return; - } - - CScript pubkeyScript2; - pubkeyScript2.SetDestination(pubkey2.GetID()); - - if(pubkeyScript2.size() != 25) { - LogPrintf("dsee - pubkey2 the wrong size\n"); - Misbehaving(pfrom->GetId(), 100); - return; - } - - if(!vin.scriptSig.empty()) { - LogPrintf("dsee - Ignore Not Empty ScriptSig %s\n",vin.ToString().c_str()); - return; - } - - std::string errorMessage = ""; - if(!darkSendSigner.VerifyMessage(pubkey, vchSig, strMessage, errorMessage)){ - LogPrintf("dsee - Got bad masternode address signature\n"); - Misbehaving(pfrom->GetId(), 100); - return; - } - - //search existing masternode list, this is where we update existing masternodes with new dsee broadcasts - CMasternode* pmn = this->Find(vin); - // if we are a masternode but with undefined vin and this dsee is ours (matches our Masternode privkey) then just skip this part - if(pmn != NULL && !(fMasterNode && activeMasternode.vin == CTxIn() && pubkey2 == activeMasternode.pubKeyMasternode)) - { - // count == -1 when it's a new entry - // e.g. We don't want the entry relayed/time updated when we're syncing the list - // mn.pubkey = pubkey, IsVinAssociatedWithPubkey is validated once below, - // after that they just need to match - if(count == -1 && pmn->pubkey == pubkey && !pmn->UpdatedWithin(MASTERNODE_MIN_DSEE_SECONDS)){ - pmn->UpdateLastSeen(); - - if(pmn->sigTime < sigTime){ //take the newest entry - LogPrintf("dsee - Got updated entry for %s\n", addr.ToString().c_str()); - pmn->pubkey2 = pubkey2; - pmn->sigTime = sigTime; - pmn->sig = vchSig; - pmn->protocolVersion = protocolVersion; - pmn->addr = addr; - pmn->donationAddress = donationAddress; - pmn->donationPercentage = donationPercentage; - pmn->Check(); - if(pmn->IsEnabled()) - mnodeman.RelayMasternodeEntry(vin, addr, vchSig, sigTime, pubkey, pubkey2, count, current, lastUpdated, protocolVersion, donationAddress, donationPercentage); - } - } - - return; - } - - // make sure the vout that was signed is related to the transaction that spawned the masternode - // - this is expensive, so it's only done once per masternode - if(!darkSendSigner.IsVinAssociatedWithPubkey(vin, pubkey)) { - LogPrintf("dsee - Got mismatched pubkey and vin\n"); - Misbehaving(pfrom->GetId(), 100); - return; - } - - LogPrint("masternode", "dsee - Got NEW masternode entry %s\n", addr.ToString().c_str()); - - // make sure it's still unspent - // - this is checked later by .check() in many places and by ThreadCheckDarkSendPool() - - CValidationState state; - CTransaction tx = CTransaction(); - CTxOut vout = CTxOut(DARKSEND_POOL_MAX, darkSendPool.collateralPubKey); - tx.vin.push_back(vin); - tx.vout.push_back(vout); - bool fAcceptable = false; - { - TRY_LOCK(cs_main, lockMain); - if(!lockMain) return; - fAcceptable = AcceptableInputs(mempool, tx, false, NULL); - } - if(fAcceptable){ - LogPrint("masternode", "dsee - Accepted masternode entry %i %i\n", count, current); - - if(GetInputAge(vin) < MASTERNODE_MIN_CONFIRMATIONS){ - LogPrintf("dsee - Input must have least %d confirmations\n", MASTERNODE_MIN_CONFIRMATIONS); - Misbehaving(pfrom->GetId(), 20); - return; - } - - // verify that sig time is legit in past - // should be at least not earlier than block when 10000 TansferCoin tx got MASTERNODE_MIN_CONFIRMATIONS - uint256 hashBlock = 0; - GetTransaction(vin.prevout.hash, tx, hashBlock); - map::iterator mi = mapBlockIndex.find(hashBlock); - if (mi != mapBlockIndex.end() && (*mi).second) - { - CBlockIndex* pMNIndex = (*mi).second; // block for 10000 TansferCoin tx -> 1 confirmation - CBlockIndex* pConfIndex = FindBlockByHeight((pMNIndex->nHeight + MASTERNODE_MIN_CONFIRMATIONS - 1)); // block where tx got MASTERNODE_MIN_CONFIRMATIONS - if(pConfIndex->GetBlockTime() > sigTime) - { - LogPrintf("dsee - Bad sigTime %d for masternode %20s %105s (%i conf block is at %d)\n", - sigTime, addr.ToString(), vin.ToString(), MASTERNODE_MIN_CONFIRMATIONS, pConfIndex->GetBlockTime()); - return; - } - } - - - // use this as a peer - addrman.Add(CAddress(addr), pfrom->addr, 2*60*60); - - //doesn't support multisig addresses - if(donationAddress.IsPayToScriptHash()){ - donationAddress = CScript(); - donationPercentage = 0; - } - - // add our masternode - CMasternode mn(addr, vin, pubkey, vchSig, sigTime, pubkey2, protocolVersion, donationAddress, donationPercentage); - mn.UpdateLastSeen(lastUpdated); - this->Add(mn); - - // if it matches our masternodeprivkey, then we've been remotely activated - if(pubkey2 == activeMasternode.pubKeyMasternode && protocolVersion == PROTOCOL_VERSION){ - activeMasternode.EnableHotColdMasterNode(vin, addr); - } - - if(count == -1 && !isLocal) - mnodeman.RelayMasternodeEntry(vin, addr, vchSig, sigTime, pubkey, pubkey2, count, current, lastUpdated, protocolVersion, donationAddress, donationPercentage); - - } else { - LogPrintf("dsee - Rejected masternode entry %s\n", addr.ToString().c_str()); - - int nDoS = 0; - if (state.IsInvalid(nDoS)) - { - LogPrintf("dsee - %s from %s %s was not accepted into the memory pool\n", tx.GetHash().ToString().c_str(), - pfrom->addr.ToString().c_str(), pfrom->cleanSubVer.c_str()); - if (nDoS > 0) - Misbehaving(pfrom->GetId(), nDoS); - } - } - } - - else if (strCommand == "dseep") { //DarkSend Election Entry Ping - - CTxIn vin; - vector vchSig; - int64_t sigTime; - bool stop; - vRecv >> vin >> vchSig >> sigTime >> stop; - - //LogPrintf("dseep - Received: vin: %s sigTime: %lld stop: %s\n", vin.ToString().c_str(), sigTime, stop ? "true" : "false"); - - if (sigTime > GetAdjustedTime() + 60 * 60) { - LogPrintf("dseep - Signature rejected, too far into the future %s\n", vin.ToString().c_str()); - return; - } - - if (sigTime <= GetAdjustedTime() - 60 * 60) { - LogPrintf("dseep - Signature rejected, too far into the past %s - %d %d \n", vin.ToString().c_str(), sigTime, GetAdjustedTime()); - return; - } - - // see if we have this masternode - CMasternode* pmn = this->Find(vin); - if(pmn != NULL && pmn->protocolVersion >= MIN_POOL_PEER_PROTO_VERSION) - { - // LogPrintf("dseep - Found corresponding mn for vin: %s\n", vin.ToString().c_str()); - // take this only if it's newer - if(pmn->lastDseep < sigTime) - { - std::string strMessage = pmn->addr.ToString() + boost::lexical_cast(sigTime) + boost::lexical_cast(stop); - - std::string errorMessage = ""; - if(!darkSendSigner.VerifyMessage(pmn->pubkey2, vchSig, strMessage, errorMessage)) - { - LogPrintf("dseep - Got bad masternode address signature %s \n", vin.ToString().c_str()); - //Misbehaving(pfrom->GetId(), 100); - return; - } - - pmn->lastDseep = sigTime; - - if(!pmn->UpdatedWithin(MASTERNODE_MIN_DSEEP_SECONDS)) - { - if(stop) pmn->Disable(); - else - { - pmn->UpdateLastSeen(); - pmn->Check(); - if(!pmn->IsEnabled()) return; - } - mnodeman.RelayMasternodeEntryPing(vin, vchSig, sigTime, stop); - } - } - return; - } - - LogPrint("masternode", "dseep - Couldn't find masternode entry %s\n", vin.ToString().c_str()); - - std::map::iterator i = mWeAskedForMasternodeListEntry.find(vin.prevout); - if (i != mWeAskedForMasternodeListEntry.end()) - { - int64_t t = (*i).second; - if (GetTime() < t) return; // we've asked recently - } - - // ask for the dsee info once from the node that sent dseep - - LogPrintf("dseep - Asking source node for missing entry %s\n", vin.ToString().c_str()); - pfrom->PushMessage("dseg", vin); - int64_t askAgain = GetTime()+ MASTERNODE_MIN_DSEEP_SECONDS; - mWeAskedForMasternodeListEntry[vin.prevout] = askAgain; - - } else if (strCommand == "mvote") { //Masternode Vote - - CTxIn vin; - vector vchSig; - int nVote; - vRecv >> vin >> vchSig >> nVote; - - // see if we have this Masternode - CMasternode* pmn = this->Find(vin); - if(pmn != NULL) - { - if((GetAdjustedTime() - pmn->lastVote) > (60*60)) - { - std::string strMessage = vin.ToString() + boost::lexical_cast(nVote); - - std::string errorMessage = ""; - if(!darkSendSigner.VerifyMessage(pmn->pubkey2, vchSig, strMessage, errorMessage)) - { - LogPrintf("mvote - Got bad Masternode address signature %s \n", vin.ToString().c_str()); - return; - } - - pmn->nVote = nVote; - pmn->lastVote = GetAdjustedTime(); - - //send to all peers - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - pnode->PushMessage("mvote", vin, vchSig, nVote); - } - - return; - } - - } else if (strCommand == "dseg") { //Get masternode list or specific entry - - CTxIn vin; - vRecv >> vin; - - if(vin == CTxIn()) { //only should ask for this once - //local network - if(!pfrom->addr.IsRFC1918() && Params().NetworkID() == CChainParams::MAIN) - { - std::map::iterator i = mAskedUsForMasternodeList.find(pfrom->addr); - if (i != mAskedUsForMasternodeList.end()) - { - int64_t t = (*i).second; - if (GetTime() < t) { - Misbehaving(pfrom->GetId(), 34); - LogPrintf("dseg - peer already asked me for the list\n"); - return; - } - } - - int64_t askAgain = GetTime() + MASTERNODES_DSEG_SECONDS; - mAskedUsForMasternodeList[pfrom->addr] = askAgain; - } - } //else, asking for a specific node which is ok - - int count = this->size(); - int i = 0; - - BOOST_FOREACH(CMasternode& mn, vMasternodes) { - - if(mn.addr.IsRFC1918()) continue; //local network - - if(mn.IsEnabled()) - { - LogPrint("masternode", "dseg - Sending masternode entry - %s \n", mn.addr.ToString().c_str()); - if(vin == CTxIn()){ - pfrom->PushMessage("dsee", mn.vin, mn.addr, mn.sig, mn.sigTime, mn.pubkey, mn.pubkey2, count, i, mn.lastTimeSeen, mn.protocolVersion, mn.donationAddress, mn.donationPercentage); - } else if (vin == mn.vin) { - pfrom->PushMessage("dsee", mn.vin, mn.addr, mn.sig, mn.sigTime, mn.pubkey, mn.pubkey2, count, i, mn.lastTimeSeen, mn.protocolVersion, mn.donationAddress, mn.donationPercentage); - LogPrintf("dseg - Sent 1 masternode entries to %s\n", pfrom->addr.ToString().c_str()); - return; - } - i++; - } - } - - LogPrintf("dseg - Sent %d masternode entries to %s\n", i, pfrom->addr.ToString().c_str()); - } - -} - -void CMasternodeMan::RelayMasternodeEntry(const CTxIn vin, const CService addr, const std::vector vchSig, const int64_t nNow, const CPubKey pubkey, const CPubKey pubkey2, const int count, const int current, const int64_t lastUpdated, const int protocolVersion, CScript donationAddress, int donationPercentage) -{ - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - pnode->PushMessage("dsee", vin, addr, vchSig, nNow, pubkey, pubkey2, count, current, lastUpdated, protocolVersion, donationAddress, donationPercentage); -} - -void CMasternodeMan::RelayMasternodeEntryPing(const CTxIn vin, const std::vector vchSig, const int64_t nNow, const bool stop) -{ - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - pnode->PushMessage("dseep", vin, vchSig, nNow, stop); -} - -void CMasternodeMan::Remove(CTxIn vin) -{ - LOCK(cs); - - vector::iterator it = vMasternodes.begin(); - while(it != vMasternodes.end()){ - if((*it).vin == vin){ - LogPrint("masternode", "CMasternodeMan: Removing Masternode %s - %i now\n", (*it).addr.ToString().c_str(), size() - 1); - vMasternodes.erase(it); - break; - } - } -} - -std::string CMasternodeMan::ToString() const -{ - std::ostringstream info; - - info << "masternodes: " << (int)vMasternodes.size() << - ", peers who asked us for masternode list: " << (int)mAskedUsForMasternodeList.size() << - ", peers we asked for masternode list: " << (int)mWeAskedForMasternodeList.size() << - ", entries in Masternode list we asked for: " << (int)mWeAskedForMasternodeListEntry.size() << - ", nDsqCount: " << (int)nDsqCount; - - return info.str(); -} diff --git a/src/masternodeman.h b/src/masternodeman.h deleted file mode 100644 index f8d2b0ef..00000000 --- a/src/masternodeman.h +++ /dev/null @@ -1,155 +0,0 @@ - -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef MASTERNODEMAN_H -#define MASTERNODEMAN_H - -#include "bignum.h" -#include "sync.h" -#include "net.h" -#include "key.h" -#include "core.h" -#include "util.h" -#include "script.h" -#include "base58.h" -#include "main.h" -#include "masternode.h" - -#define MASTERNODES_DUMP_SECONDS (15*60) -#define MASTERNODES_DSEG_SECONDS (3*60*60) - -using namespace std; - -class CMasternodeMan; - -extern CMasternodeMan mnodeman; - -void DumpMasternodes(); - -/** Access to the MN database (mncache.dat) */ -class CMasternodeDB -{ -private: - boost::filesystem::path pathMN; - std::string strMagicMessage; -public: - enum ReadResult { - Ok, - FileError, - HashReadError, - IncorrectHash, - IncorrectMagicMessage, - IncorrectMagicNumber, - IncorrectFormat - }; - - CMasternodeDB(); - bool Write(const CMasternodeMan &mnodemanToSave); - ReadResult Read(CMasternodeMan& mnodemanToLoad); -}; - -class CMasternodeMan -{ -private: - // critical section to protect the inner data structures - mutable CCriticalSection cs; - - // map to hold all MNs - std::vector vMasternodes; - // who's asked for the masternode list and the last time - std::map mAskedUsForMasternodeList; - // who we asked for the masternode list and the last time - std::map mWeAskedForMasternodeList; - // which masternodes we've asked for - std::map mWeAskedForMasternodeListEntry; - -public: - // keep track of dsq count to prevent masternodes from gaming darksend queue - int64_t nDsqCount; - - IMPLEMENT_SERIALIZE - ( - // serialized format: - // * version byte (currently 0) - // * masternodes vector - { - LOCK(cs); - unsigned char nVersion = 0; - READWRITE(nVersion); - READWRITE(vMasternodes); - READWRITE(mAskedUsForMasternodeList); - READWRITE(mWeAskedForMasternodeList); - READWRITE(mWeAskedForMasternodeListEntry); - READWRITE(nDsqCount); - } - ) - - CMasternodeMan(); - CMasternodeMan(CMasternodeMan& other); - - // Add an entry - bool Add(CMasternode &mn); - - // Check all masternodes - void Check(); - - /// Ask (source) node for mnb - void AskForMN(CNode *pnode, CTxIn &vin); - - // Check all masternodes and remove inactive - void CheckAndRemove(); - - // Clear masternode vector - void Clear(); - - int CountEnabled(int protocolVersion = -1); - - int CountMasternodesAboveProtocol(int protocolVersion); - - void DsegUpdate(CNode* pnode); - - // Find an entry - CMasternode* Find(const CTxIn& vin); - CMasternode* Find(const CPubKey& pubKeyMasternode); - - //Find an entry thta do not match every entry provided vector - CMasternode* FindOldestNotInVec(const std::vector &vVins, int nMinimumAge); - - // Find a random entry - CMasternode* FindRandom(); - - /// Find a random entry - CMasternode* FindRandomNotInVec(std::vector &vecToExclude, int protocolVersion = -1); - - // Get the current winner for this block - CMasternode* GetCurrentMasterNode(int mod=1, int64_t nBlockHeight=0, int minProtocol=0); - - std::vector GetFullMasternodeVector() { Check(); return vMasternodes; } - - std::vector > GetMasternodeRanks(int64_t nBlockHeight, int minProtocol=0); - int GetMasternodeRank(const CTxIn &vin, int64_t nBlockHeight, int minProtocol=0, bool fOnlyActive=true); - CMasternode* GetMasternodeByRank(int nRank, int64_t nBlockHeight, int minProtocol=0, bool fOnlyActive=true); - - void ProcessMasternodeConnections(); - - void ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); - - // Return the number of (unique) masternodes - int size() { return vMasternodes.size(); } - - std::string ToString() const; - - // - // Relay Masternode Messages - // - - void RelayMasternodeEntry(const CTxIn vin, const CService addr, const std::vector vchSig, const int64_t nNow, const CPubKey pubkey, const CPubKey pubkey2, const int count, const int current, const int64_t lastUpdated, const int protocolVersion, CScript donationAddress, int donationPercentage); - void RelayMasternodeEntryPing(const CTxIn vin, const std::vector vchSig, const int64_t nNow, const bool stop); - - void Remove(CTxIn vin); - -}; - -#endif diff --git a/src/miner.cpp b/src/miner.cpp index d5915e70..cd808a9b 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -7,8 +7,7 @@ #include "txdb.h" #include "miner.h" #include "kernel.h" -#include "masternodeman.h" -#include "masternode-payments.h" +#include "masternode.h" using namespace std; @@ -535,26 +534,29 @@ bool CheckStake(CBlock* pblock, CWallet& wallet) return true; } +static int64_t nBlockThrottle = GetArg("-blockthrottle", 5000); // make this a static as we only need to load it once void ThreadStakeMiner(CWallet *pwallet) { SetThreadPriority(THREAD_PRIORITY_LOWEST); // Make this thread recognisable as the mining thread - RenameThread("memetic-miner"); + RenameThread("pepecoin-miner"); CReserveKey reservekey(pwallet); bool fTryToSync = true; - - while (true) + // Moved the check for 3 or more connections and up to date blockchain out of the main staking loop + while(true) { + boost::this_thread::interruption_point(); + while (pwallet->IsLocked()) { nLastCoinStakeSearchInterval = 0; MilliSleep(1000); } - while (vNodes.empty() || IsInitialBlockDownload()) + while (vNodes.size() < 2 || IsInitialBlockDownload()) { nLastCoinStakeSearchInterval = 0; fTryToSync = true; @@ -571,6 +573,14 @@ void ThreadStakeMiner(CWallet *pwallet) } } + break; + } + + // We have 3 or more connections and are caught up on the blockchain, so start the staking loop + while (true) + { + boost::this_thread::interruption_point(); + // // Create new block // @@ -583,6 +593,12 @@ void ThreadStakeMiner(CWallet *pwallet) if (pblock->SignBlock(*pwallet, nFees)) { SetThreadPriority(THREAD_PRIORITY_NORMAL); + // Pause after finding a block, before broadcasting it wait a little bit + // in case there is a block coming in and the block is stale + // Also helps throttle lots of inputs so they aren't all hitting at once + // in rapid fire succession and generating lots of ? conflicted stakes. + // 5 second default. + MilliSleep(nBlockThrottle); CheckStake(pblock.get(), *pwallet); SetThreadPriority(THREAD_PRIORITY_LOWEST); MilliSleep(500); diff --git a/src/net.cpp b/src/net.cpp index 7ee6e074..aa51a304 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -12,6 +12,7 @@ #include "ui_interface.h" #include "darksend.h" #include "wallet.h" +#include "serialize.h" #ifdef WIN32 #include @@ -30,7 +31,9 @@ using namespace std; using namespace boost; -static const int MAX_OUTBOUND_CONNECTIONS = 8; +unsigned int nMessageCores = 0; + +static const int MAX_OUTBOUND_CONNECTIONS = 10; bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound = NULL, const char *strDest = NULL, bool fOneShot = false); @@ -136,10 +139,12 @@ CAddress GetLocalAddress(const CNetAddr *paddrPeer) bool RecvLine(SOCKET hSocket, string& strLine) { strLine = ""; - while (true) + while (!ShutdownRequested()) { char c; - int nBytes = recv(hSocket, &c, 1, 0); + int nBytes = recv(hSocket, &c, 1, MSG_DONTWAIT); + if(ShutdownRequested()) + return false; if (nBytes > 0) { @@ -177,7 +182,7 @@ bool RecvLine(SOCKET hSocket, string& strLine) { // socket error int nErr = WSAGetLastError(); - LogPrint("net", "recv failed: %s\n", nErr); + LogPrint("net", "recv failed: %d\n", nErr); return false; } } @@ -200,21 +205,23 @@ bool IsPeerAddrLocalGood(CNode *pnode) !IsLimited(pnode->addrLocal.GetNetwork()); } -// used when scores of local addresses may have changed -// pushes better local address to peers -void static AdvertizeLocal() +// pushes our own address to a peer +void AdvertizeLocal(CNode *pnode) { - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) + if (!fNoListen && pnode->fSuccessfullyConnected) { - if (pnode->fSuccessfullyConnected) + CAddress addrLocal = GetLocalAddress(&pnode->addr); + // If discovery is enabled, sometimes give our peer the address it + // tells us that it sees us as in case it has a better idea of our + // address than we do. + if (IsPeerAddrLocalGood(pnode) && (!addrLocal.IsRoutable() || + GetRand((GetnScore(addrLocal) > LOCAL_MANUAL) ? 8:2) == 0)) { - CAddress addrLocal = GetLocalAddress(&pnode->addr); - if (addrLocal.IsRoutable() && (CService)addrLocal != (CService)pnode->addrLocal) - { - pnode->PushAddress(addrLocal); - pnode->addrLocal = addrLocal; - } + addrLocal.SetIP(pnode->addrLocal); + } + if (addrLocal.IsRoutable()) + { + pnode->PushAddress(addrLocal); } } } @@ -252,8 +259,6 @@ bool AddLocal(const CService& addr, int nScore) SetReachable(addr.GetNetwork()); } - AdvertizeLocal(); - return true; } @@ -291,9 +296,6 @@ bool SeenLocal(const CService& addr) return false; mapLocalHost[addr].nScore++; } - - AdvertizeLocal(); - return true; } @@ -365,8 +367,8 @@ CNode* ConnectNode(CAddress addrConnect, const char *pszDest, bool darkSendMaste CNode* pnode = FindNode((CService)addrConnect); if (pnode) { - if(darkSendMaster) - pnode->fDarkSendMaster = true; + if(darkSendMaster) + pnode->fDarkSendMaster = true; pnode->AddRef(); return pnode; @@ -430,6 +432,7 @@ void CNode::CloseSocketDisconnect() } // in case this fails, we'll empty the recv buffer when the CNode is deleted + LogPrint("net", "CloseSocketDisconnect: Try lock cs_vRecvMsg\n"); TRY_LOCK(cs_vRecvMsg, lockRecv); if (lockRecv) vRecvMsg.clear(); @@ -437,6 +440,8 @@ void CNode::CloseSocketDisconnect() // if this was the sync node, we'll need a new one if (this == pnodeSync) pnodeSync = NULL; + + LogPrint("net", "CloseSocketDisconnect: done.\n"); } void CNode::PushVersion() @@ -445,10 +450,10 @@ void CNode::PushVersion() int64_t nTime = (fInbound ? GetAdjustedTime() : GetTime()); CAddress addrYou = (addr.IsRoutable() && !IsProxy(addr) ? addr : CAddress(CService("0.0.0.0",0))); CAddress addrMe = GetLocalAddress(&addr); - GetRandBytes((unsigned char*)&nLocalHostNonce, sizeof(nLocalHostNonce)); + RAND_bytes((unsigned char*)&nLocalHostNonce, sizeof(nLocalHostNonce)); LogPrint("net", "send version message: version %d, blocks=%d, us=%s, them=%s, peer=%s\n", PROTOCOL_VERSION, nBestHeight, addrMe.ToString(), addrYou.ToString(), addr.ToString()); PushMessage("version", PROTOCOL_VERSION, nLocalServices, nTime, addrYou, addrMe, - nLocalHostNonce, FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, std::vector()), nBestHeight); + nLocalHostNonce, FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, std::vector()), nBestHeight, true); } @@ -488,9 +493,9 @@ bool CNode::Misbehaving(int howmuch) } nMisbehavior += howmuch; - if (nMisbehavior >= GetArg("-banscore", 100)) + if (nMisbehavior >= GetArg("-banscore", 30)) { - int64_t banTime = GetTime()+GetArg("-bantime", 60*60*24); // Default 24-hour ban + int64_t banTime = GetTime()+GetArg("-bantime", 60*60*48); // Default 24-hour ban LogPrintf("Misbehaving: %s (%d -> %d) DISCONNECTING\n", addr.ToString(), nMisbehavior-howmuch, nMisbehavior); { LOCK(cs_setBanned); @@ -522,10 +527,10 @@ void CNode::copyStats(CNodeStats &stats) X(nMisbehavior); X(nSendBytes); X(nRecvBytes); - stats.fSyncNode = (this == pnodeSync); + stats.fSyncNode = (this == pnodeSync); // It is common for nodes with good ping times to suddenly become lagged, - // due to a new block arriving or other large memetic. + // due to a new block arriving or other large transfer. // Merely reporting pingtime might fool the caller into thinking the node was still responsive, // since pingtime does not update until the ping is complete, which might take a while. // So, if a ping is taking an unusually long time in flight, @@ -538,7 +543,7 @@ void CNode::copyStats(CNodeStats &stats) // Raw ping time is in microseconds, but show it to user as whole seconds (Bitcoin users should be well used to small numbers with many decimal places by now :) stats.dPingTime = (((double)nPingUsecTime) / 1e6); stats.dPingWait = (((double)nPingUsecWait) / 1e6); - + // Leave string empty if addrLocal invalid (not filled in yet) stats.addrLocal = addrLocal.IsValid() ? addrLocal.ToString() : ""; } @@ -553,7 +558,7 @@ bool CNode::ReceiveMsgBytes(const char *pch, unsigned int nBytes) if (vRecvMsg.empty() || vRecvMsg.back().complete()) vRecvMsg.push_back(CNetMessage(SER_NETWORK, nRecvVersion)); - + CNetMessage& msg = vRecvMsg.back(); // absorb network data @@ -736,7 +741,6 @@ void ThreadSocketHandler() if (fDelete) { vNodesDisconnected.remove(pnode); - delete pnode; } } } @@ -763,6 +767,8 @@ void ThreadSocketHandler() SOCKET hSocketMax = 0; bool have_fds = false; + + BOOST_FOREACH(SOCKET hListenSocket, vhListenSocket) { FD_SET(hListenSocket, &fdsetRecv); hSocketMax = max(hSocketMax, hListenSocket); @@ -772,6 +778,8 @@ void ThreadSocketHandler() LOCK(cs_vNodes); BOOST_FOREACH(CNode* pnode, vNodes) { + if(!pnode) continue; + if (pnode->hSocket == INVALID_SOCKET) continue; { @@ -831,14 +839,19 @@ void ThreadSocketHandler() if (pnode->fInbound) nInbound++; } - int nMaxOutbound = min(MAX_OUTBOUND_CONNECTIONS, (int)GetArg("-maxconnections", 25)); + if (hSocket == INVALID_SOCKET) { int nErr = WSAGetLastError(); if (nErr != WSAEWOULDBLOCK) LogPrintf("socket error accept failed: %d\n", nErr); } - else if (nInbound >= nMaxOutbound) + else if(IsSyncing()) + { + closesocket(hSocket); + LogPrintf("Inbound connection from %s dropped because we are syncing.\n"); + } + else if (nInbound >= GetArg("-maxconnections", 125) - MAX_OUTBOUND_CONNECTIONS) { closesocket(hSocket); } @@ -851,6 +864,7 @@ void ThreadSocketHandler() { LogPrint("net", "accepted connection %s\n", addr.ToString()); CNode* pnode = new CNode(hSocket, addr, "", true); + pnode->AddRef(); { LOCK(cs_vNodes); @@ -860,19 +874,28 @@ void ThreadSocketHandler() } + // // Service each socket // vector vNodesCopy; { - LOCK(cs_vNodes); - vNodesCopy = vNodes; + { + LOCK(cs_vNodes); + vNodesCopy = vNodes; + } + BOOST_FOREACH(CNode* pnode, vNodesCopy) + { + if(!pnode) continue; + pnode->AddRef(); + } } BOOST_FOREACH(CNode* pnode, vNodesCopy) { boost::this_thread::interruption_point(); + if(!pnode) continue; // // Receive @@ -932,7 +955,9 @@ void ThreadSocketHandler() { TRY_LOCK(pnode->cs_vSend, lockSend); if (lockSend) + { SocketSendData(pnode); + } } // @@ -964,10 +989,14 @@ void ThreadSocketHandler() } } { - LOCK(cs_vNodes); + //LOCK(cs_vNodes); BOOST_FOREACH(CNode* pnode, vNodesCopy) + { + if(!pnode) continue; pnode->Release(); + } } + MilliSleep(1); // niceness } } @@ -989,15 +1018,12 @@ void ThreadMapPort() char lanaddr[64]; #ifndef UPNPDISCOVER_SUCCESS - + /* miniupnpc 1.5 */ + devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0); +#else + /* miniupnpc 1.6 */ int error = 0; devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, &error); - /* - //miniupnpc reverted to former function syntax - #else - int error = 0; - devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, 2, &error); - */ #endif struct UPNPUrls urls; @@ -1024,11 +1050,11 @@ void ThreadMapPort() } } - string strDesc = "Memetic " + FormatFullVersion(); + string strDesc = "PepeCoin " + FormatFullVersion(); try { while (!ShutdownRequested()) { - boost::this_thread::interruption_point(); + boost::this_thread::interruption_point(); #ifndef UPNPDISCOVER_SUCCESS /* miniupnpc 1.5 */ @@ -1102,11 +1128,11 @@ void ThreadDNSAddressSeed() { // goal: only query DNS seeds if address need is acute if ((addrman.size() > 0) && - (!GetBoolArg("-forcednsseed", false))) { + (!GetBoolArg("-forcednsseed", true))) { MilliSleep(11 * 1000); LOCK(cs_vNodes); - if (vNodes.size() >= 2) { + if (vNodes.size() >= 4) { LogPrintf("P2P peers available. Skipped DNS seeding.\n"); return; } @@ -1287,6 +1313,7 @@ void ThreadOpenAddedConnections() if (HaveNameProxy()) { while(true) { + boost::this_thread::interruption_point(); list lAddresses(0); { LOCK(cs_vAddedNodes); @@ -1305,6 +1332,7 @@ void ThreadOpenAddedConnections() for (unsigned int i = 0; true; i++) { + boost::this_thread::interruption_point(); list lAddresses(0); { LOCK(cs_vAddedNodes); @@ -1342,10 +1370,12 @@ void ThreadOpenAddedConnections() } BOOST_FOREACH(vector& vserv, lservAddressesToAdd) { + boost::this_thread::interruption_point(); CSemaphoreGrant grant(*semOutbound); OpenNetworkConnection(CAddress(vserv[i % vserv.size()]), &grant); MilliSleep(500); } + boost::this_thread::interruption_point(); MilliSleep(120000); // Retry every 2 minutes } } @@ -1365,6 +1395,22 @@ bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOu if (strDest && FindNode(strDest)) return false; + // if we are trying to sync but the sync peer hasn't responded and started the sync + // drop it so we can open a connection to a new sync peer + DropNonRespondingSyncPeer(); + + // if we are syncing and if we already have an active sync node, don't open more connections + bool bAlreadySyncing = false; + BOOST_FOREACH(CNode* pnode, vNodes) { + if(pnode->fStartSync && !pnode->fDisconnect && IsSyncing()) + { + bAlreadySyncing = true; + break; + } + } + if(bAlreadySyncing) + return false; + CNode* pnode = ConnectNode(addrConnect, strDest); boost::this_thread::interruption_point(); @@ -1397,10 +1443,12 @@ void static StartSync(const vector &vNodes) { // Iterate over all nodes BOOST_FOREACH(CNode* pnode, vNodes) { + if(!pnode) continue; + // check preconditions for allowing a sync if (!pnode->fClient && !pnode->fOneShot && !pnode->fDisconnect && pnode->fSuccessfullyConnected && - (pnode->nStartingHeight > (nBestHeight - 144)) && + (pnode->nStartingHeight > nBestHeight) && (pnode->nVersion < NOBLKS_VERSION_START || pnode->nVersion >= NOBLKS_VERSION_END)) { // if ok, compare node's score with the best so far int64_t nScore = NodeSyncScore(pnode); @@ -1417,36 +1465,143 @@ void static StartSync(const vector &vNodes) { } } -void ThreadMessageHandler() +void ThreadMessageHandler(int ncore) { - SetThreadPriority(THREAD_PRIORITY_BELOW_NORMAL); + // Make this thread recognisable as a message handling thread + std::string s = strprintf("pepe-msghnd-%d", ncore); + RenameThread(s.c_str()); + + std::vector vCoreNodes; + while (true) { + boost::this_thread::interruption_point(); bool fHaveSyncNode = false; - vector vNodesCopy; + vector vNodesFullSet; // the full set of nodes + vector vNodesCopy; // nodes to work on in this core { - LOCK(cs_vNodes); - vNodesCopy = vNodes; - BOOST_FOREACH(CNode* pnode, vNodesCopy) { + { + LOCK(cs_vNodes); + vNodesFullSet = vNodes; + } + + // figure out the start and end indexes for this core to work on + if(vNodesFullSet.size() < ncore+1) + { + // the size is less than our core number, e.g. the size is 3 but we are core 4 + // therefore we have nothing to work on, so sleep and then continue and look for work again + LogPrint("multicore", "ThreadMessageHandler: core %d no nodes for us to service nodes size %d\n", ncore, vNodesFullSet.size()); + MilliSleep(500); + continue; + } + + int nSliceSize = 0; + + if(vNodesFullSet.size() <= nMessageCores) + { + // the number of nodes is equal to or less than the total number of cores + // but not less than our core number + // which means we only have 1 node to work on + nSliceSize = 1; + } + else + { + // there are more nodes than total number of cores + // therefore split up the work across cores an equal amount + // with whatever is leftover tacked onto the last core + nSliceSize = vNodesFullSet.size() / nMessageCores; + + // load up the remainder on the last core because its easy + if( (ncore+1) == nMessageCores ) + { + // ex. 8 cores, 14 total nodes, slice size 1, core 8 should handle 6 + // ex. 8 cores, 16 total nodes, slice size 2, no remainder + // ex. 8 cores, 18 total nodes, slice size 2, core 8 should handle 4 + + // 16 = 8 * 2 + int nHandled = nMessageCores * nSliceSize; + if(vNodesFullSet.size() % nMessageCores > 0) + { + // there is a remainder + // 2 += 18 - 16 == 4 + nSliceSize += vNodesFullSet.size() - nHandled; + } + } + } + + { + LOCK(cs_vNodes); + // clean our node list of any nodes that have been disconnected and don't exist in the master node list anymore + std::vector vCoreNodesToRemove; + BOOST_FOREACH(CNode* pnode, vCoreNodes) + { + if(!pnode) + vCoreNodesToRemove.push_back(pnode); + + if(std::find(vNodesFullSet.begin(), vNodesFullSet.end(), pnode) == vNodesFullSet.end()) + vCoreNodesToRemove.push_back(pnode); + } + BOOST_FOREACH(CNode* pnode, vCoreNodesToRemove) + { + vCoreNodes.erase(remove(vCoreNodes.begin(), vCoreNodes.end(), pnode), vCoreNodes.end()); + } + } + + // the slice size tells us how many nodes this core is supposed to work on + if(vCoreNodes.size() < nSliceSize) + { + int nNodesToClaim = nSliceSize - vCoreNodes.size(); + + // claim nodes for this core until the slice size is reached + int d = 0; + BOOST_FOREACH(CNode* pnode, vNodesFullSet) + { + if(!pnode) continue; + + if(d == nNodesToClaim) // we reached how many we need + break; + + if(!pnode->fDisconnect && pnode->ncore < 0) + { + pnode->ncore = ncore; + vCoreNodes.push_back(pnode); + d++; + } + } + } + + LogPrint("multicore","ThreadMessageHandler: core %d nSlizeSize: %d vCoreNodes size: %d vNodesFullSet size: %d\n", ncore, nSliceSize, vCoreNodes.size(), vNodesFullSet.size()); + + BOOST_FOREACH(CNode* pnode, vCoreNodes) { + LogPrint("multicore", "ThreadMessageHandler: core: %d pnode->ncore: %d\n", ncore, pnode->ncore); + if(!pnode) continue; pnode->AddRef(); if (pnode == pnodeSync) fHaveSyncNode = true; } + + BOOST_FOREACH(CNode* pnode, vNodesFullSet) { + if(!pnode) continue; + + if(pnode == pnodeSync) + fHaveSyncNode = true; + } } - if (!fHaveSyncNode) - StartSync(vNodesCopy); + if (!fHaveSyncNode && IsSyncing()) + StartSync(vCoreNodes); // Poll the connected nodes for messages CNode* pnodeTrickle = NULL; - if (!vNodesCopy.empty()) - pnodeTrickle = vNodesCopy[GetRand(vNodesCopy.size())]; + if (!vCoreNodes.empty()) + pnodeTrickle = vNodesCopy[GetRand(vCoreNodes.size())]; - bool fSleep = true; - - BOOST_FOREACH(CNode* pnode, vNodesCopy) + + BOOST_FOREACH(CNode* pnode, vCoreNodes) { + if(!pnode) continue; + if (pnode->fDisconnect) continue; @@ -1455,16 +1610,7 @@ void ThreadMessageHandler() TRY_LOCK(pnode->cs_vRecvMsg, lockRecv); if (lockRecv) { - if (!g_signals.ProcessMessages(pnode)) - pnode->CloseSocketDisconnect(); - - if (pnode->nSendSize < SendBufferSize()) - { - if (!pnode->vRecvGetData.empty() || (!pnode->vRecvMsg.empty() && pnode->vRecvMsg[0].complete())) - { - fSleep = false; - } - } + ProcessMessages(pnode); } } boost::this_thread::interruption_point(); @@ -1473,27 +1619,24 @@ void ThreadMessageHandler() { TRY_LOCK(pnode->cs_vSend, lockSend); if (lockSend) - g_signals.SendMessages(pnode, pnode == pnodeTrickle); + SendMessages(pnode, false); //pnode == pnodeTrickle); } boost::this_thread::interruption_point(); } { - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodesCopy) - pnode->Release(); + BOOST_FOREACH(CNode* pnode, vCoreNodes) + { + if(!pnode) continue; + pnode->Release(); + } } - if (fSleep) - MilliSleep(100); + // niceness + MilliSleep(2); } } - - - - - bool BindListenPort(const CService &addrBind, string& strError) { strError = ""; @@ -1575,7 +1718,7 @@ bool BindListenPort(const CService &addrBind, string& strError) { int nErr = WSAGetLastError(); if (nErr == WSAEADDRINUSE) - strError = strprintf(_("Unable to bind to %s on this computer. Memetic is probably already running."), addrBind.ToString()); + strError = strprintf(_("Unable to bind to %s on this computer. PepeCoin is probably already running."), addrBind.ToString()); else strError = strprintf(_("Unable to bind to %s on this computer (bind returned error %d, %s)"), addrBind.ToString(), nErr, strerror(nErr)); LogPrintf("%s\n", strError); @@ -1654,7 +1797,7 @@ void StartNode(boost::thread_group& threadGroup) { if (semOutbound == NULL) { // initialize semaphore - int nMaxOutbound = min(MAX_OUTBOUND_CONNECTIONS, (int)GetArg("-maxconnections", 25)); + int nMaxOutbound = min(MAX_OUTBOUND_CONNECTIONS, (int)GetArg("-maxconnections", 125)); semOutbound = new CSemaphore(nMaxOutbound); } @@ -1687,7 +1830,23 @@ void StartNode(boost::thread_group& threadGroup) threadGroup.create_thread(boost::bind(&TraceThread, "opencon", &ThreadOpenConnections)); // Process messages - threadGroup.create_thread(boost::bind(&TraceThread, "msghand", &ThreadMessageHandler)); + unsigned int nmsgthreads = boost::thread::hardware_concurrency(); + unsigned int nMessagecorelimit = GetArg("-messagecorelimit", 1); + if(nMessagecorelimit < nmsgthreads) + { + nMessageCores = nMessagecorelimit; + } + else + nMessageCores = nmsgthreads; + + for(int c=0;c, "msghand", &ThreadMessageHandler)); + } // Dump network addresses threadGroup.create_thread(boost::bind(&LoopForever, "dumpaddr", &DumpAddresses, DUMP_ADDRESSES_INTERVAL * 1000)); @@ -1722,6 +1881,7 @@ class CNetCleanup if (closesocket(hListenSocket) == SOCKET_ERROR) LogPrintf("closesocket(hListenSocket) failed with error %d\n", WSAGetLastError()); + #ifdef WIN32 // Shutdown Windows Sockets WSACleanup(); @@ -1751,14 +1911,15 @@ void RelayTransaction(const CTransaction& tx, const uint256& hash, const CDataSt } // Save original serialized message so newer versions are preserved + int nTransactionExpiration = GetArg("-txrelayexpiration", 180); mapRelay.insert(std::make_pair(inv, ss)); - vRelayExpiration.push_back(std::make_pair(GetTime() + 15 * 60, inv)); + vRelayExpiration.push_back(std::make_pair(GetTime() + nTransactionExpiration * 60, inv)); } RelayInventory(inv); } -void RelayTransactionLockReq(const CTransaction& tx, bool relayToAll) +void RelayTransactionLockReq(const CTransaction& tx, const uint256& hash, bool relayToAll) { CInv inv(MSG_TXLOCK_REQUEST, tx.GetHash()); @@ -1774,6 +1935,114 @@ void RelayTransactionLockReq(const CTransaction& tx, bool relayToAll) } +void RelayDarkSendFinalTransaction(const int sessionID, const CTransaction& txNew) +{ + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + pnode->PushMessage("dsf", sessionID, txNew); + } +} + +void RelayDarkSendIn(const std::vector& in, const int64_t& nAmount, const CTransaction& txCollateral, const std::vector& out) +{ + LOCK(cs_vNodes); + + BOOST_FOREACH(CNode* pnode, vNodes) + { + if((CNetAddr)darkSendPool.submittedToMasternode != (CNetAddr)pnode->addr) continue; + LogPrintf("RelayDarkSendIn - found master, relaying message - %s \n", pnode->addr.ToString().c_str()); + pnode->PushMessage("dsi", in, nAmount, txCollateral, out); + } +} + +void RelayDarkSendStatus(const int sessionID, const int newState, const int newEntriesCount, const int newAccepted, const std::string error) +{ + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + pnode->PushMessage("dssu", sessionID, newState, newEntriesCount, newAccepted, error); + } +} + +void RelayDarkSendElectionEntry(const CTxIn vin, const CService addr, const std::vector vchSig, const int64_t nNow, const CPubKey pubkey, const CPubKey pubkey2, const int count, const int current, const int64_t lastUpdated, const int protocolVersion) +{ + CDataStream ssCheck(SER_GETHASH, PROTOCOL_VERSION); + ssCheck << CMessageHeader("dsee",0) << vin << addr << vchSig << nNow << pubkey << pubkey2 << count << current << lastUpdated << protocolVersion; + uint256 hashCheck = SerializeHash(std::vector(ssCheck.begin(), ssCheck.end())); + + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + if(!pnode->fRelayTxes) continue; + if(pnode->setToadKnown.count(hashCheck) != 0) continue; + + pnode->setToadKnown.insert(hashCheck); + pnode->PushMessage("dsee", vin, addr, vchSig, nNow, pubkey, pubkey2, count, current, lastUpdated, protocolVersion); + } +} + +void SendDarkSendElectionEntry(const CTxIn vin, const CService addr, const std::vector vchSig, const int64_t nNow, const CPubKey pubkey, const CPubKey pubkey2, const int count, const int current, const int64_t lastUpdated, const int protocolVersion) +{ + CDataStream ssCheck(SER_GETHASH, PROTOCOL_VERSION); + ssCheck << CMessageHeader("dsee",0) << vin << addr << vchSig << nNow << pubkey << pubkey2 << count << current << lastUpdated << protocolVersion; + uint256 hashCheck = SerializeHash(std::vector(ssCheck.begin(), ssCheck.end())); + + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + if(!pnode->fRelayTxes) continue; + if(pnode->setToadKnown.count(hashCheck) != 0) continue; + + pnode->setToadKnown.insert(hashCheck); + pnode->PushMessage("dsee", vin, addr, vchSig, nNow, pubkey, pubkey2, count, current, lastUpdated, protocolVersion); + } +} + +void RelayDarkSendElectionEntryPing(const CTxIn vin, const std::vector vchSig, const int64_t nNow, const bool stop) +{ + CDataStream ssCheck(SER_GETHASH, PROTOCOL_VERSION); + ssCheck << CMessageHeader("dseep",0) << vin << vchSig << nNow << stop; + uint256 hashCheck = SerializeHash(std::vector(ssCheck.begin(), ssCheck.end())); + + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + if(!pnode->fRelayTxes) continue; + if(pnode->setToadKnown.count(hashCheck) != 0) continue; + + pnode->setToadKnown.insert(hashCheck); + pnode->PushMessage("dseep", vin, vchSig, nNow, stop); + } +} + +void SendDarkSendElectionEntryPing(const CTxIn vin, const std::vector vchSig, const int64_t nNow, const bool stop) +{ + CDataStream ssCheck(SER_GETHASH, PROTOCOL_VERSION); + ssCheck << CMessageHeader("dseep",0) << vin << vchSig << nNow << stop; + uint256 hashCheck = SerializeHash(std::vector(ssCheck.begin(), ssCheck.end())); + + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + if(!pnode->fRelayTxes) continue; + if(pnode->setToadKnown.count(hashCheck) != 0) continue; + + pnode->setToadKnown.insert(hashCheck); + pnode->PushMessage("dseep", vin, vchSig, nNow, stop); + } +} + +void RelayDarkSendCompletedTransaction(const int sessionID, const bool error, const std::string errorMessage) +{ + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + pnode->PushMessage("dsc", sessionID, error, errorMessage); + } +} + + void CNode::RecordBytesRecv(uint64_t bytes) { LOCK(cs_totalBytesRecv); @@ -1811,7 +2080,7 @@ bool CAddrDB::Write(const CAddrMan& addr) { // Generate random temporary filename unsigned short randv = 0; - GetRandBytes((unsigned char *)&randv, sizeof(randv)); + RAND_bytes((unsigned char *)&randv, sizeof(randv)); std::string tmpfn = strprintf("peers.dat.%04x", randv); // serialize addresses, checksum data up to that point, then append csum diff --git a/src/net.h b/src/net.h index 47088da2..452a5124 100644 --- a/src/net.h +++ b/src/net.h @@ -27,14 +27,15 @@ class CNode; class CBlockIndex; extern int nBestHeight; +extern unsigned int nMessageCores; /** Time between pings automatically sent out for latency probing and keepalive (in seconds). */ -static const int PING_INTERVAL = 1 * 60; +static const int PING_INTERVAL = 5 * 60; /** Time after which to disconnect, after waiting for a ping response (or inactivity). */ static const int TIMEOUT_INTERVAL = 20 * 60; -inline unsigned int ReceiveFloodSize() { return 2000*GetArg("-maxreceivebuffer", 5*1000); } -inline unsigned int SendBufferSize() { return 5000*GetArg("-maxsendbuffer", 1*1000); } +inline unsigned int ReceiveFloodSize() { return 1000*GetArg("-maxreceivebuffer", 10*1000); } +inline unsigned int SendBufferSize() { return 1000*GetArg("-maxsendbuffer", 2*1000); } void AddOneShot(std::string strDest); bool RecvLine(SOCKET hSocket, std::string& strLine); @@ -74,6 +75,7 @@ enum }; bool IsPeerAddrLocalGood(CNode *pnode); +void AdvertizeLocal(CNode *pnode); void SetLimited(enum Network net, bool fLimited = true); bool IsLimited(enum Network net); bool IsLimited(const CNetAddr& addr); @@ -140,7 +142,7 @@ class CNodeStats bool fSyncNode; double dPingTime; double dPingWait; - std::string addrLocal; + std::string addrLocal; }; @@ -156,6 +158,7 @@ class CNetMessage { CDataStream vRecv; // received message data unsigned int nDataPos; + unsigned int nLastDataPos; int64_t nTime; // time (in microseconds) of message receipt. @@ -164,6 +167,7 @@ class CNetMessage { in_data = false; nHdrPos = 0; nDataPos = 0; + nLastDataPos = 0; nTime = 0; } @@ -211,11 +215,11 @@ class SecMsgNode }; - /** Information about a peer */ class CNode { public: + int ncore; // socket uint64_t nServices; SOCKET hSocket; @@ -235,6 +239,14 @@ class CNode int64_t nLastSend; int64_t nLastRecv; int64_t nTimeConnected; + + int64_t tGetblocks = 0; + int64_t tBlockInvs = 0; + int64_t tGetdataBlock = 0; + int64_t tBlockRecvStart = 0; + int64_t tBlockRecving = 0; + int64_t tBlockRecved = 0; + CAddress addr; std::string addrName; CService addrLocal; @@ -258,6 +270,7 @@ class CNode bool fDarkSendMaster; CSemaphoreGrant grantOutbound; int nRefCount; + CCriticalSection cs_nRefCount; NodeId id; protected: @@ -290,6 +303,9 @@ class CNode CCriticalSection cs_inventory; std::multimap mapAskFor; + // Masternode based relay + std::set setToadKnown; + SecMsgNode smsgData; // Ping time measurement: @@ -302,8 +318,11 @@ class CNode // Whether a ping is requested. bool fPingQueued; + + CNode(SOCKET hSocketIn, CAddress addrIn, std::string addrNameIn = "", bool fInboundIn=false) : ssSend(SER_NETWORK, INIT_PROTO_VERSION), setAddrKnown(5000) { + ncore = -1; nServices = 0; hSocket = hSocketIn; nRecvVersion = INIT_PROTO_VERSION; @@ -375,7 +394,7 @@ class CNode int GetRefCount() { - assert(nRefCount >= 0); + //assert(nRefCount >= 0); return nRefCount; } @@ -401,12 +420,14 @@ class CNode CNode* AddRef() { + LOCK(cs_nRefCount); nRefCount++; return this; } void Release() { + LOCK(cs_nRefCount); nRefCount--; } @@ -515,8 +536,8 @@ class CNode nSendSize += (*it).size(); // If write queue empty, attempt "optimistic write" - if (it == vSendMsg.begin()) - SocketSendData(this); + //if (it == vSendMsg.begin()) + // SocketSendData(this); LEAVE_CRITICAL_SECTION(cs_vSend); } @@ -697,37 +718,6 @@ template - void PushMessage(const char* pszCommand, const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5, const T6& a6, const T7& a7, const T8& a8, const T9& a9, const T10& a10, const T11& a11) - { - try - { - BeginMessage(pszCommand); - ssSend << a1 << a2 << a3 << a4 << a5 << a6 << a7 << a8 << a9 << a10 << a11; - EndMessage(); - } - catch (...) - { - AbortMessage(); - throw; - } - } - - template - void PushMessage(const char* pszCommand, const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5, const T6& a6, const T7& a7, const T8& a8, const T9& a9, const T10& a10, const T11& a11, const T12& a12) - { - try - { - BeginMessage(pszCommand); - ssSend << a1 << a2 << a3 << a4 << a5 << a6 << a7 << a8 << a9 << a10 << a11 << a12; - EndMessage(); - } - catch (...) - { - AbortMessage(); - throw; - } - } bool HasFulfilledRequest(std::string strRequest) { @@ -782,14 +772,25 @@ inline void RelayInventory(const CInv& inv) { LOCK(cs_vNodes); BOOST_FOREACH(CNode* pnode, vNodes) + { pnode->PushInventory(inv); + } } } class CTransaction; void RelayTransaction(const CTransaction& tx, const uint256& hash); void RelayTransaction(const CTransaction& tx, const uint256& hash, const CDataStream& ss); -void RelayTransactionLockReq(const CTransaction& tx, bool relayToAll=false); +void RelayTransactionLockReq(const CTransaction& tx, const uint256& hash, bool relayToAll=false); +void RelayDarkSendFinalTransaction(const int sessionID, const CTransaction& txNew); +void RelayDarkSendIn(const std::vector& in, const int64_t& nAmount, const CTransaction& txCollateral, const std::vector& out); +void RelayDarkSendStatus(const int sessionID, const int newState, const int newEntriesCount, const int newAccepted, const std::string error=""); +void RelayDarkSendElectionEntry(const CTxIn vin, const CService addr, const std::vector vchSig, const int64_t nNow, const CPubKey pubkey, const CPubKey pubkey2, const int count, const int current, const int64_t lastUpdated, const int protocolVersion); +void SendDarkSendElectionEntry(const CTxIn vin, const CService addr, const std::vector vchSig, const int64_t nNow, const CPubKey pubkey, const CPubKey pubkey2, const int count, const int current, const int64_t lastUpdated, const int protocolVersion); +void RelayDarkSendElectionEntryPing(const CTxIn vin, const std::vector vchSig, const int64_t nNow, const bool stop); +void SendDarkSendElectionEntryPing(const CTxIn vin, const std::vector vchSig, const int64_t nNow, const bool stop); +void RelayDarkSendCompletedTransaction(const int sessionID, const bool error, const std::string errorMessage); +void RelayDarkSendMasterNodeContestant(); /** Access to the (IP) address database (peers.dat) */ class CAddrDB @@ -802,4 +803,4 @@ class CAddrDB bool Read(CAddrMan& addr); }; -#endif +#endif \ No newline at end of file diff --git a/src/pepecoin-qt.pro b/src/pepecoin-qt.pro index d84b149c..38af7fd0 100644 --- a/src/pepecoin-qt.pro +++ b/src/pepecoin-qt.pro @@ -1,5 +1,5 @@ TEMPLATE = app -TARGET = memetic-qt +TARGET = pepecoin-qt VERSION = 2.0.0.1 INCLUDEPATH += src src/json src/qt src/qt/plugins/mrichtexteditor QT += network printsupport @@ -287,8 +287,8 @@ HEADERS += src/qt/bitcoingui.h \ src/crypto/sha256.h \ src/crypto/sha512.h \ src/qt/masternodemanager.h \ - src/qt/addeditadrenalinenode.h \ - src/qt/adrenalinenodeconfigdialog.h \ + src/qt/addeditmastertoad.h \ + src/qt/mastertoadconfigdialog.h \ src/qt/qcustomplot.h \ src/smessage.h \ src/qt/messagepage.h \ @@ -413,8 +413,8 @@ SOURCES += src/qt/bitcoin.cpp src/qt/bitcoingui.cpp \ src/crypto/sha256.cpp \ src/crypto/sha512.cpp \ src/qt/masternodemanager.cpp \ - src/qt/addeditadrenalinenode.cpp \ - src/qt/adrenalinenodeconfigdialog.cpp \ + src/qt/addeditmastertoad.cpp \ + src/qt/mastertoadconfigdialog.cpp \ src/qt/qcustomplot.cpp \ src/smessage.cpp \ src/qt/messagepage.cpp \ @@ -456,8 +456,8 @@ FORMS += \ src/qt/forms/optionsdialog.ui \ src/qt/forms/darksendconfig.ui \ src/qt/forms/masternodemanager.ui \ - src/qt/forms/addeditadrenalinenode.ui \ - src/qt/forms/adrenalinenodeconfigdialog.ui \ + src/qt/forms/addeditmastertoad.ui \ + src/qt/forms/mastertoadconfigdialog.ui \ src/qt/forms/messagepage.ui \ src/qt/forms/sendmessagesentry.ui \ src/qt/forms/sendmessagesdialog.ui \ @@ -598,7 +598,7 @@ macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm src/qt/macnotificationhan macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit -framework CoreServices macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0 macx:ICON = src/qt/res/icons/bitcoin.icns -macx:TARGET = "Memetic-Qt" +macx:TARGET = "PepeCoin-Qt" macx:QMAKE_CFLAGS_THREAD += -pthread macx:QMAKE_LFLAGS_THREAD += -pthread macx:QMAKE_CXXFLAGS_THREAD += -pthread diff --git a/src/protocol.cpp b/src/protocol.cpp index 208bcfa0..ab5e7f5c 100644 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -96,6 +96,8 @@ CAddress::CAddress(CService ipIn, uint64_t nServicesIn) : CService(ipIn) nServices = nServicesIn; } + + void CAddress::Init() { nServices = NODE_NETWORK; diff --git a/src/qt/addeditadrenalinenode.cpp b/src/qt/addeditadrenalinenode.cpp deleted file mode 100644 index 4b0cc31e..00000000 --- a/src/qt/addeditadrenalinenode.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include "addeditadrenalinenode.h" -#include "ui_addeditadrenalinenode.h" -#include "masternodeconfig.h" -#include "masternodemanager.h" -#include "ui_masternodemanager.h" - -#include "walletdb.h" -#include "wallet.h" -#include "ui_interface.h" -#include "util.h" -#include "key.h" -#include "script.h" -#include "init.h" -#include "base58.h" -#include - -AddEditAdrenalineNode::AddEditAdrenalineNode(QWidget *parent) : - QDialog(parent), - ui(new Ui::AddEditAdrenalineNode) -{ - ui->setupUi(this); - -} - -AddEditAdrenalineNode::~AddEditAdrenalineNode() -{ - delete ui; -} - - -void AddEditAdrenalineNode::on_okButton_clicked() -{ - if(ui->aliasLineEdit->text() == "") - { - QMessageBox msg; - msg.setText("Please enter an alias."); - msg.exec(); - return; - } - else if(ui->addressLineEdit->text() == "") - { - QMessageBox msg; - msg.setText("Please enter an ip address and port. (123.45.67.89:17170)"); - msg.exec(); - return; - } - else if(ui->privkeyLineEdit->text() == "") - { - QMessageBox msg; - msg.setText("Please enter a masternode private key. This can be found using the \"masternode genkey\" command in the console."); - msg.exec(); - return; - } - else if(ui->txhashLineEdit->text() == "") - { - QMessageBox msg; - msg.setText("Please enter the transaction hash for the transaction that has 10 000 coins"); - msg.exec(); - return; - } - else if(ui->outputindexLineEdit->text() == "") - { - QMessageBox msg; - msg.setText("Please enter a transaction output index. This can be found using the \"masternode outputs\" command in the console."); - msg.exec(); - return; - } - else - { - std::string sAlias = ui->aliasLineEdit->text().toStdString(); - std::string sAddress = ui->addressLineEdit->text().toStdString(); - std::string sMasternodePrivKey = ui->privkeyLineEdit->text().toStdString(); - std::string sTxHash = ui->txhashLineEdit->text().toStdString(); - std::string sOutputIndex = ui->outputindexLineEdit->text().toStdString(); - std::string sDonationAddress = ui->donationaddressLineEdit->text().toStdString(); - std::string sDonationPercentage = ui->donationpercentageLineEdit->text().toStdString(); - - boost::filesystem::path pathConfigFile = GetDataDir() / "masternode.conf"; - boost::filesystem::ofstream stream (pathConfigFile.string(), ios::out | ios::app); - if (stream.is_open()) - { - stream << sAlias << " " << sAddress << " " << sMasternodePrivKey << " " << sTxHash << " " << sOutputIndex; - if (sDonationAddress != "" && sDonationAddress != ""){ - stream << " " << sDonationAddress << " " << sDonationPercentage << std::endl; - } else { - stream << std::endl; - } - stream.close(); - } - masternodeConfig.add(sAlias, sAddress, sMasternodePrivKey, sTxHash, sOutputIndex, sDonationAddress, sDonationPercentage); - accept(); - } -} - -void AddEditAdrenalineNode::on_cancelButton_clicked() -{ - reject(); -} - diff --git a/src/qt/addeditadrenalinenode.h b/src/qt/addeditadrenalinenode.h deleted file mode 100644 index 562f74d6..00000000 --- a/src/qt/addeditadrenalinenode.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef ADDEDITADRENALINENODE_H -#define ADDEDITADRENALINENODE_H - -#include -#include -#include - -namespace Ui { -class AddEditAdrenalineNode; -} - - -class AddEditAdrenalineNode : public QDialog -{ - Q_OBJECT - -public: - explicit AddEditAdrenalineNode(QWidget *parent = 0); - ~AddEditAdrenalineNode(); - -protected: - -private slots: - void on_okButton_clicked(); - void on_cancelButton_clicked(); - -signals: - -private: - Ui::AddEditAdrenalineNode *ui; -}; - -#endif // ADDEDITADRENALINENODE_H diff --git a/src/qt/addeditmastertoad.cpp b/src/qt/addeditmastertoad.cpp new file mode 100644 index 00000000..96539461 --- /dev/null +++ b/src/qt/addeditmastertoad.cpp @@ -0,0 +1,103 @@ +#include "addeditmastertoad.h" +#include "ui_addeditmastertoad.h" + +#include "walletdb.h" +#include "wallet.h" +#include "ui_interface.h" +#include "util.h" +#include "key.h" +#include "script.h" +#include "init.h" +#include "base58.h" +#include + +AddEditmastertoad::AddEditmastertoad(QWidget *parent) : + QDialog(parent), + ui(new Ui::AddEditmastertoad) +{ + ui->setupUi(this); + +} + +AddEditmastertoad::~AddEditmastertoad() +{ + delete ui; +} + + +void AddEditmastertoad::on_okButton_clicked() +{ + if(ui->aliasLineEdit->text() == "") + { + QMessageBox msg; + msg.setText("Please enter an alias."); + msg.exec(); + return; + } + else if(ui->addressLineEdit->text() == "") + { + QMessageBox msg; + msg.setText("Please enter an address."); + msg.exec(); + return; + } + else + { + CmastertoadConfig c; + c.sAlias = ui->aliasLineEdit->text().toStdString(); + c.sAddress = ui->addressLineEdit->text().toStdString(); + CKey secret; + secret.MakeNewKey(false); + c.sMasternodePrivKey = CBitcoinSecret(secret).ToString(); + + CWalletDB walletdb(pwalletMain->strWalletFile); + CAccount account; + walletdb.ReadAccount(c.sAlias, account); + bool bKeyUsed = false; + bool bForceNew = false; + + // Check if the current key has been used + if (account.vchPubKey.IsValid()) + { + CScript scriptPubKey; + scriptPubKey.SetDestination(account.vchPubKey.GetID()); + for (map::iterator it = pwalletMain->mapWallet.begin(); + it != pwalletMain->mapWallet.end() && account.vchPubKey.IsValid(); + ++it) + { + const CWalletTx& wtx = (*it).second; + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + if (txout.scriptPubKey == scriptPubKey) + bKeyUsed = true; + } + } + + // Generate a new key + if (!account.vchPubKey.IsValid() || bForceNew || bKeyUsed) + { + if (!pwalletMain->GetKeyFromPool(account.vchPubKey)) + { + QMessageBox msg; + msg.setText("Keypool ran out, please call keypoolrefill first."); + msg.exec(); + return; + } + pwalletMain->SetAddressBookName(account.vchPubKey.GetID(), c.sAlias); + walletdb.WriteAccount(c.sAlias, account); + } + + c.sCollateralAddress = CBitcoinAddress(account.vchPubKey.GetID()).ToString(); + + pwalletMain->mapMymastertoads.insert(make_pair(c.sAddress, c)); + walletdb.WritemastertoadConfig(c.sAddress, c); + uiInterface.NotifymastertoadChanged(c); + + accept(); + } +} + +void AddEditmastertoad::on_cancelButton_clicked() +{ + reject(); +} + diff --git a/src/qt/addeditmastertoad.h b/src/qt/addeditmastertoad.h new file mode 100644 index 00000000..725a97d7 --- /dev/null +++ b/src/qt/addeditmastertoad.h @@ -0,0 +1,31 @@ +#ifndef ADDEDITmastertoad_H +#define ADDEDITmastertoad_H + +#include + +namespace Ui { +class AddEditmastertoad; +} + + +class AddEditmastertoad : public QDialog +{ + Q_OBJECT + +public: + explicit AddEditmastertoad(QWidget *parent = 0); + ~AddEditmastertoad(); + +protected: + +private slots: + void on_okButton_clicked(); + void on_cancelButton_clicked(); + +signals: + +private: + Ui::AddEditmastertoad *ui; +}; + +#endif // ADDEDITmastertoad_H diff --git a/src/qt/adrenalinenodeconfigdialog.h b/src/qt/adrenalinenodeconfigdialog.h deleted file mode 100644 index 39b091ff..00000000 --- a/src/qt/adrenalinenodeconfigdialog.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef ADRENALINENODECONFIGDIALOG_H -#define ADRENALINENODECONFIGDIALOG_H - -#include - -namespace Ui { - class AdrenalineNodeConfigDialog; -} - -QT_BEGIN_NAMESPACE -class QModelIndex; -QT_END_NAMESPACE - -/** Dialog showing transaction details. */ -class AdrenalineNodeConfigDialog : public QDialog -{ - Q_OBJECT - -public: - explicit AdrenalineNodeConfigDialog(QWidget *parent = 0, QString nodeAddress = "123.456.789.123:9999", QString privkey="MASTERNODEPRIVKEY"); - ~AdrenalineNodeConfigDialog(); - -private: - Ui::AdrenalineNodeConfigDialog *ui; -}; - -#endif // ADRENALINENODECONFIGDIALOG_H diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp index b28d64d4..57372e9b 100644 --- a/src/qt/askpassphrasedialog.cpp +++ b/src/qt/askpassphrasedialog.cpp @@ -116,7 +116,7 @@ void AskPassphraseDialog::accept() { QMessageBox::warning(this, tr("Wallet encrypted"), "" + - tr("Memetic will close now to finish the encryption process. " + tr("PepeCoin will close now to finish the encryption process. " "Remember that encrypting your wallet cannot fully protect " "your coins from being stolen by malware infecting your computer.") + "

" + diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index 3f72bfbf..05f95851 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -102,7 +102,7 @@ static std::string Translate(const char* psz) static void handleRunawayException(std::exception *e) { PrintExceptionContinue(e, "Runaway exception"); - QMessageBox::critical(0, "Runaway exception", BitcoinGUI::tr("A fatal error occurred. Memetic can no longer continue safely and will quit.") + QString("\n\n") + QString::fromStdString(strMiscWarning)); + QMessageBox::critical(0, "Runaway exception", BitcoinGUI::tr("A fatal error occurred. PepeCoin can no longer continue safely and will quit.") + QString("\n\n") + QString::fromStdString(strMiscWarning)); exit(1); } @@ -160,7 +160,7 @@ int main(int argc, char *argv[]) { // This message can not be translated, as translation is not initialized yet // (which not yet possible because lang=XX can be overridden in bitcoin.conf in the data directory) - QMessageBox::critical(0, "Memetic", + QMessageBox::critical(0, "PepeCoin", QString("Error: Specified data directory \"%1\" does not exist.").arg(QString::fromStdString(mapArgs["-datadir"]))); return 1; } @@ -168,12 +168,12 @@ int main(int argc, char *argv[]) // Application identification (must be set before OptionsModel is initialized, // as it is used to locate QSettings) - app.setOrganizationName("Memetic"); + app.setOrganizationName("PepeCoin"); //XXX app.setOrganizationDomain(""); if(GetBoolArg("-testnet", false)) // Separate UI settings for testnet - app.setApplicationName("memetic-Qt-testnet"); + app.setApplicationName("pepecoin-Qt-testnet"); else - app.setApplicationName("memetic-Qt"); + app.setApplicationName("pepecoin-Qt"); // ... then GUI settings: OptionsModel optionsModel; diff --git a/src/qt/bitcoin.qrc b/src/qt/bitcoin.qrc index e4b58687..4bad9bcd 100644 --- a/src/qt/bitcoin.qrc +++ b/src/qt/bitcoin.qrc @@ -1,10 +1,10 @@ - res/icons/memetic-80.png + res/icons/pepecoin-80.png res/icons/address-book.png res/icons/quit.png res/icons/send.png - res/icons/memetic-16.png + res/icons/pepecoin-16.png res/icons/connect0_16.png res/icons/connect1_16.png res/icons/connect2_16.png @@ -26,8 +26,8 @@ res/icons/editpaste.png res/icons/editcopy.png res/icons/add.png - res/icons/memetic-80.png - res/icons/memetic-16.png + res/icons/pepecoin-80.png + res/icons/pepecoin-16.png res/icons/edit.png res/icons/history.png res/icons/overview.png @@ -69,7 +69,7 @@ res/images/about.png - res/images/splash3.png + res/images/splash.png res/images/header.png res/images/bkg.png diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 5a461750..fc74e10d 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -39,6 +39,7 @@ #include "blockbrowser.h" #include "tradingdialog.h" #include "proofofmeme.h" +#include "masternodemanager.h" #ifdef Q_OS_MAC #include "macdockiconhandler.h" @@ -97,7 +98,7 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): nWeight(0) { resize(900, 520); - setWindowTitle(tr("Memetic") + " - " + tr("Wallet")); + setWindowTitle(tr("Memetic / PepeCoin") + " - " + tr("Wallet")); qApp->setStyleSheet("QMainWindow { background-image:url(:images/bkg);border:none; }"); #ifndef Q_OS_MAC @@ -107,8 +108,8 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): //setUnifiedTitleAndToolBarOnMac(true); QApplication::setAttribute(Qt::AA_DontShowIconsInMenus); #endif - setObjectName("memetic"); - setStyleSheet("#memetic { background-color: qradialgradient(cx: -0.8, cy: 0, fx: -0.8, fy: 0, radius: 1.4, stop: 0 #dedede, stop: 1 #efefef); }"); + setObjectName("pepecoin"); + setStyleSheet("#pepecoin { background-color: qradialgradient(cx: -0.8, cy: 0, fx: -0.8, fy: 0, radius: 1.4, stop: 0 #dedede, stop: 1 #efefef); }"); // Accept D&D of URIs setAcceptDrops(true); @@ -145,6 +146,8 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): tradingDialogPage->setObjectName("tradingDialog"); proofOfMemePage = new ProofOfMeme(this); + masternodeManagerPage = new MasternodeManager(this); + signVerifyMessageDialog = new SignVerifyMessageDialog(this); @@ -163,6 +166,7 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): centralStackedWidget->addWidget(blockBrowser); centralStackedWidget->addWidget(tradingDialogPage); centralStackedWidget->addWidget(proofOfMemePage); + centralStackedWidget->addWidget(masternodeManagerPage); QWidget *centralWidget = new QWidget(); QVBoxLayout *centralLayout = new QVBoxLayout(centralWidget); @@ -264,7 +268,6 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): connect(receiveCoinsPage, SIGNAL(signMessage(QString)), this, SLOT(gotoSignMessageTab(QString))); gotoOverviewPage(); - overviewPage->getMessages(); } BitcoinGUI::~BitcoinGUI() @@ -293,7 +296,7 @@ void BitcoinGUI::createActions() tabGroup->addAction(receiveCoinsAction); sendCoinsAction = new QAction(QIcon(":/icons/send"), tr("&Send"), this); - sendCoinsAction->setToolTip(tr("Send coins to a Memetic address")); + sendCoinsAction->setToolTip(tr("Send coins to a PepeCoin address")); sendCoinsAction->setCheckable(true); sendCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_3)); tabGroup->addAction(sendCoinsAction); @@ -310,6 +313,10 @@ void BitcoinGUI::createActions() addressBookAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_5)); tabGroup->addAction(addressBookAction); + masternodeManagerAction = new QAction(QIcon(":/icons/bitcoin"), tr("&Mastertoads"), this); + masternodeManagerAction->setToolTip(tr("Show Mastertoads status and configure your nodes.")); + masternodeManagerAction->setCheckable(true); + tabGroup->addAction(masternodeManagerAction); messageAction = new QAction(QIcon(":/icons/edit"), tr("&Messages"), this); messageAction->setToolTip(tr("View and Send Encrypted messages")); @@ -359,14 +366,14 @@ void BitcoinGUI::createActions() quitAction->setToolTip(tr("Quit application")); quitAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q)); quitAction->setMenuRole(QAction::QuitRole); - aboutAction = new QAction(tr("&About Memetic"), this); - aboutAction->setToolTip(tr("Show information about Memetic")); + aboutAction = new QAction(tr("&About PepeCoin"), this); + aboutAction->setToolTip(tr("Show information about PepeCoin")); aboutAction->setMenuRole(QAction::AboutRole); aboutQtAction = new QAction(tr("About &Qt"), this); aboutQtAction->setToolTip(tr("Show information about Qt")); aboutQtAction->setMenuRole(QAction::AboutQtRole); optionsAction = new QAction(tr("&Options..."), this); - optionsAction->setToolTip(tr("Modify configuration options for Memetic")); + optionsAction->setToolTip(tr("Modify configuration options for PepeCoin")); optionsAction->setMenuRole(QAction::PreferencesRole); toggleHideAction = new QAction(QIcon(":/icons/bitcoin"), tr("&Show / Hide"), this); encryptWalletAction = new QAction(tr("&Encrypt Wallet..."), this); @@ -399,6 +406,8 @@ void BitcoinGUI::createActions() connect(lockWalletAction, SIGNAL(triggered()), this, SLOT(lockWallet())); connect(signMessageAction, SIGNAL(triggered()), this, SLOT(gotoSignMessageTab())); connect(verifyMessageAction, SIGNAL(triggered()), this, SLOT(gotoVerifyMessageTab())); + connect(masternodeManagerAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); + connect(masternodeManagerAction, SIGNAL(triggered()), this, SLOT(gotoMasternodeManagerPage())); } void BitcoinGUI::createMenuBar() @@ -444,7 +453,7 @@ static QWidget* makeToolBarSpacer() void BitcoinGUI::createToolBars() { - fLiteMode = GetBoolArg("-litemode", false); + fLiteMode = GetBoolArg("-nomntesting", false); toolbar = new QToolBar(tr("Tabs toolbar")); toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); @@ -467,7 +476,8 @@ void BitcoinGUI::createToolBars() toolbar->addAction(sendCoinsAction); toolbar->addAction(historyAction); toolbar->addAction(addressBookAction); - + toolbar->addAction(masternodeManagerAction); + if (!fLiteMode){ toolbar->addAction(messageAction); @@ -518,7 +528,7 @@ void BitcoinGUI::setClientModel(ClientModel *clientModel) #endif if(trayIcon) { - trayIcon->setToolTip(tr("Memetic client") + QString(" ") + tr("[testnet]")); + trayIcon->setToolTip(tr("PepeCoin client") + QString(" ") + tr("[testnet]")); trayIcon->setIcon(QIcon(":/icons/toolbar_testnet")); toggleHideAction->setIcon(QIcon(":/icons/toolbar_testnet")); } @@ -599,7 +609,7 @@ void BitcoinGUI::createTrayIcon() trayIcon = new QSystemTrayIcon(this); trayIconMenu = new QMenu(this); trayIcon->setContextMenu(trayIconMenu); - trayIcon->setToolTip(tr("Memetic client")); + trayIcon->setToolTip(tr("PepeCoin client")); trayIcon->setIcon(QIcon(":/icons/toolbar")); connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayIconActivated(QSystemTrayIcon::ActivationReason))); @@ -670,7 +680,7 @@ void BitcoinGUI::setNumConnections(int count) default: icon = fUseBlackTheme ? ":/icons/black/connect_4" : ":/icons/connect_4"; break; } labelConnectionsIcon->setPixmap(QIcon(icon).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); - labelConnectionsIcon->setToolTip(tr("%n active connection(s) to Memetic network", "", count)); + labelConnectionsIcon->setToolTip(tr("%n active connection(s) to PepeCoin network", "", count)); } void BitcoinGUI::setNumBlocks(int count) @@ -684,7 +694,6 @@ void BitcoinGUI::setNumBlocks(int count) tooltip = tr("Processed %1 blocks of transaction history.").arg(count); - overviewPage->getMessages(); // Set icon state: spinning if catching up, tick otherwise if(secs < 90*60) { @@ -757,7 +766,7 @@ void BitcoinGUI::setNumBlocks(int count) void BitcoinGUI::message(const QString &title, const QString &message, bool modal, unsigned int style) { - QString strTitle = tr("Memetic") + " - "; + QString strTitle = tr("Memetic / PepeCoin") + " - "; // Default to information icon int nMBoxIcon = QMessageBox::Information; int nNotifyIcon = Notificator::Information; @@ -892,8 +901,6 @@ void BitcoinGUI::incomingTransaction(const QModelIndex & parent, int start, int .arg(BitcoinUnits::formatWithUnit(walletModel->getOptionsModel()->getDisplayUnit(), amount, true)) .arg(type) .arg(address), icon); - - overviewPage->getMessages(); } @@ -939,7 +946,14 @@ void BitcoinGUI::clearWidgets() } } +void BitcoinGUI::gotoMasternodeManagerPage() +{ + masternodeManagerAction->setChecked(true); + centralStackedWidget->setCurrentWidget(masternodeManagerPage); + exportAction->setEnabled(false); + disconnect(exportAction, SIGNAL(triggered()), 0, 0); +} void BitcoinGUI::gotoBlockBrowser() { @@ -1068,7 +1082,7 @@ void BitcoinGUI::dropEvent(QDropEvent *event) if (nValidUrisFound) gotoSendCoinsPage(); else - notificator->notify(Notificator::Warning, tr("URI handling"), tr("URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters.")); + notificator->notify(Notificator::Warning, tr("URI handling"), tr("URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters.")); } event->acceptProposedAction(); @@ -1083,7 +1097,7 @@ void BitcoinGUI::handleURI(QString strURI) gotoSendCoinsPage(); } else - notificator->notify(Notificator::Warning, tr("URI handling"), tr("URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters.")); + notificator->notify(Notificator::Warning, tr("URI handling"), tr("URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters.")); } void BitcoinGUI::setEncryptionStatus(int status) diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index d86fca1c..2c2bd4cd 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -22,6 +22,7 @@ class MessageModel; class BlockBrowser; class tradingDialog; class ProofOfMeme; +class MasternodeManager; QT_BEGIN_NAMESPACE class QLabel; @@ -78,6 +79,7 @@ class BitcoinGUI : public QMainWindow AddressBookPage *receiveCoinsPage; SendCoinsDialog *sendCoinsPage; SignVerifyMessageDialog *signVerifyMessageDialog; + MasternodeManager *masternodeManagerPage; MessagePage *messagePage; QLabel* netLabel; @@ -112,6 +114,7 @@ class BitcoinGUI : public QMainWindow QAction *lockWalletAction; QAction *aboutQtAction; QAction *openRPCConsoleAction; + QAction *masternodeManagerAction; QAction *messageAction; QAction *blockAction; @@ -189,6 +192,7 @@ private slots: /** Switch to block explorer*/ void gotoBlockBrowser(); void gotoProofOfMemePage(); + void gotoMasternodeManagerPage(); /** Show Sign/Verify Message dialog and switch to sign message tab */ void gotoSignMessageTab(QString addr = ""); diff --git a/src/qt/bitcoinstrings.cpp b/src/qt/bitcoinstrings.cpp index a81c20f7..e27c672e 100644 --- a/src/qt/bitcoinstrings.cpp +++ b/src/qt/bitcoinstrings.cpp @@ -10,14 +10,14 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "%s, you must set a rpcpassword in the configuration file:\n" "%s\n" "It is recommended you use the following random password:\n" -"rpcuser=memeticrpc\n" +"rpcuser=pepecoinrpc\n" "rpcpassword=%s\n" "(you do not need to remember this password)\n" "The username and password MUST NOT be the same.\n" "If the file does not exist, create it with owner-readable-only file " "permissions.\n" "It is also recommended to set alertnotify so you are notified of problems;\n" -"for example: alertnotify=echo %%s | mail -s \"Memetic Alert\" admin@foo." +"for example: alertnotify=echo %%s | mail -s \"PepeCoin Alert\" admin@foo." "com\n"), QT_TRANSLATE_NOOP("bitcoin-core", "" "An error occurred while setting up the RPC port %u for listening on IPv6, " @@ -26,11 +26,11 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "An error occurred while setting up the RPC port %u for listening on IPv4: %s"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Warning: Please check that your computer's date and time are correct! If " -"your clock is wrong Memetic will not work properly."), +"your clock is wrong PepeCoin will not work properly."), QT_TRANSLATE_NOOP("bitcoin-core", "Options:"), QT_TRANSLATE_NOOP("bitcoin-core", "This help message"), -QT_TRANSLATE_NOOP("bitcoin-core", "Specify configuration file (default: memetic.conf)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Specify pid file (default: memeticd.pid)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Specify configuration file (default: pepecoin.conf)"), +QT_TRANSLATE_NOOP("bitcoin-core", "Specify pid file (default: pepecoind.pid)"), QT_TRANSLATE_NOOP("bitcoin-core", "Specify data directory"), QT_TRANSLATE_NOOP("bitcoin-core", "Specify wallet file (within data directory)"), QT_TRANSLATE_NOOP("bitcoin-core", "Set database cache size in megabytes (default: 25)"), @@ -130,10 +130,10 @@ QT_TRANSLATE_NOOP("bitcoin-core", "" "Warning: -paytxfee is set very high! This is the transaction fee you will " "pay if you send a transaction."), QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -mininput=: '%s'"), -QT_TRANSLATE_NOOP("bitcoin-core", "Initialization sanity check failed. Memetic is shutting down."), +QT_TRANSLATE_NOOP("bitcoin-core", "Initialization sanity check failed. PepeCoin is shutting down."), QT_TRANSLATE_NOOP("bitcoin-core", "Wallet %s resides outside data directory %s."), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Cannot obtain a lock on data directory %s. Memetic is probably already " +"Cannot obtain a lock on data directory %s. PepeCoin is probably already " "running."), QT_TRANSLATE_NOOP("bitcoin-core", "Verifying database integrity..."), QT_TRANSLATE_NOOP("bitcoin-core", "Error initializing wallet database environment %s!"), @@ -158,8 +158,8 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat: Wallet corrupted"), QT_TRANSLATE_NOOP("bitcoin-core", "" "Warning: error reading wallet.dat! All keys read correctly, but transaction " "data or address book entries might be missing or incorrect."), -QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat: Wallet requires newer version of Memetic"), -QT_TRANSLATE_NOOP("bitcoin-core", "Wallet needed to be rewritten: restart Memetic to complete"), +QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat: Wallet requires newer version of PepeCoin"), +QT_TRANSLATE_NOOP("bitcoin-core", "Wallet needed to be rewritten: restart PepeCoin to complete"), QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat"), QT_TRANSLATE_NOOP("bitcoin-core", "Cannot downgrade wallet"), QT_TRANSLATE_NOOP("bitcoin-core", "Cannot write default address"), @@ -167,11 +167,11 @@ QT_TRANSLATE_NOOP("bitcoin-core", "Rescanning..."), QT_TRANSLATE_NOOP("bitcoin-core", "Loading addresses..."), QT_TRANSLATE_NOOP("bitcoin-core", "Done loading"), QT_TRANSLATE_NOOP("bitcoin-core", "" -"Unable to bind to %s on this computer. Memetic is probably already running."), +"Unable to bind to %s on this computer. PepeCoin is probably already running."), QT_TRANSLATE_NOOP("bitcoin-core", "Unable to bind to %s on this computer (bind returned error %d, %s)"), -QT_TRANSLATE_NOOP("bitcoin-core", "Memetic version"), +QT_TRANSLATE_NOOP("bitcoin-core", "PepeCoin version"), QT_TRANSLATE_NOOP("bitcoin-core", "Usage:"), -QT_TRANSLATE_NOOP("bitcoin-core", "Send command to -server or memeticd"), +QT_TRANSLATE_NOOP("bitcoin-core", "Send command to -server or pepecoind"), QT_TRANSLATE_NOOP("bitcoin-core", "List commands"), QT_TRANSLATE_NOOP("bitcoin-core", "Get help for a command"), QT_TRANSLATE_NOOP("bitcoin-core", "" diff --git a/src/qt/bitcoinunits.cpp b/src/qt/bitcoinunits.cpp index 48844f45..dd1648f6 100644 --- a/src/qt/bitcoinunits.cpp +++ b/src/qt/bitcoinunits.cpp @@ -41,9 +41,9 @@ QString BitcoinUnits::name(int unit) { switch(unit) { - case BTC: return QString("MEME"); - case mBTC: return QString("mMEME"); - case uBTC: return QString::fromUtf8("μMEME"); + case BTC: return QString("PEPE / MEME"); + case mBTC: return QString("mPEPE / mMEME"); + case uBTC: return QString::fromUtf8("μPepe / μMEME"); default: return QString("???"); } } @@ -52,9 +52,9 @@ QString BitcoinUnits::description(int unit) { switch(unit) { - case BTC: return QString("Memetics"); - case mBTC: return QString("Milli-Memetics (1 / 1,000)"); - case uBTC: return QString("Micro-Memetics (1 / 1,000,000)"); + case BTC: return QString("Memetic / PepeCoin"); + case mBTC: return QString("Milli-PepeCoin (1 / 1,000)"); + case uBTC: return QString("Micro-PepeCoin (1 / 1,000,000)"); default: return QString("???"); } } diff --git a/src/qt/blockbrowser.cpp b/src/qt/blockbrowser.cpp index 480886eb..f9a792e2 100644 --- a/src/qt/blockbrowser.cpp +++ b/src/qt/blockbrowser.cpp @@ -404,11 +404,11 @@ void BlockBrowser::updateExplorer(bool block) QString QOutputs = QString::fromUtf8(outputs.c_str()); QString QInputs = QString::fromUtf8(inputs.c_str()); QString QFees = QString::number(fees, 'f', 6); - ui->valueBox->setText(QValue + " MEME"); + ui->valueBox->setText(QValue + " PEPE / MEME"); ui->txID->setText(QID); ui->outputBox->setText(QOutputs); ui->inputBox->setText(QInputs); - ui->feesBox->setText(QFees + " MEME"); + ui->feesBox->setText(QFees + " PEPE / MEME"); } } diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index 99e487c3..c7d7bfc9 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -9,7 +9,7 @@ #include "alert.h" #include "main.h" #include "ui_interface.h" -#include "masternodeman.h" +#include "masternode.h" #include #include @@ -46,7 +46,7 @@ int ClientModel::getNumConnections() const QString ClientModel::getMasternodeCountString() const { - return QString::number((int)mnodeman.CountEnabled()) + " / " + QString::number((int)mnodeman.size()); + return "See nodes tab."; } int ClientModel::getNumBlocks() const diff --git a/src/qt/darksendconfig.cpp b/src/qt/darksendconfig.cpp index 07ce7a38..69d52c81 100644 --- a/src/qt/darksendconfig.cpp +++ b/src/qt/darksendconfig.cpp @@ -40,9 +40,9 @@ void DarksendConfig::clickBasic() QString strAmount(BitcoinUnits::formatWithUnit( model->getOptionsModel()->getDisplayUnit(), 1000 * COIN)); - QMessageBox::information(this, tr("Smugsend Configuration"), + QMessageBox::information(this, tr("Configuration"), tr( - "Smugsend was successfully set to basic (%1 and 2 rounds). You can change this at any time by opening Memetic's configuration screen." + "Smugsend was successfully set to basic (%1 and 2 rounds). You can change this at any time by opening PepeCoin's configuration screen." ).arg(strAmount) ); @@ -57,7 +57,7 @@ void DarksendConfig::clickHigh() model->getOptionsModel()->getDisplayUnit(), 1000 * COIN)); QMessageBox::information(this, tr("Smugsend Configuration"), tr( - "Smugsend was successfully set to high (%1 and 8 rounds). You can change this at any time by opening Memetic's configuration screen." + "Smugsend was successfully set to high (%1 and 8 rounds). You can change this at any time by opening PepeCoin's configuration screen." ).arg(strAmount) ); @@ -84,8 +84,8 @@ void DarksendConfig::configure(bool enabled, int coins, int rounds) { QSettings settings; settings.setValue("nDarksendRounds", rounds); - settings.setValue("nAnonymizeTransferAmount", coins); + settings.setValue("nAnonymizePepeCoinAmount", coins); nDarksendRounds = rounds; - nAnonymizeTransferAmount = coins; + nAnonymizePepeCoinAmount = coins; } diff --git a/src/qt/editaddressdialog.cpp b/src/qt/editaddressdialog.cpp index f47250e0..18e3fe18 100644 --- a/src/qt/editaddressdialog.cpp +++ b/src/qt/editaddressdialog.cpp @@ -113,7 +113,7 @@ void EditAddressDialog::accept() break; case AddressTableModel::INVALID_ADDRESS: QMessageBox::warning(this, windowTitle(), - tr("The entered address \"%1\" is not a valid Memetic address.").arg(ui->addressEdit->text()), + tr("The entered address \"%1\" is not a valid PepeCoin address.").arg(ui->addressEdit->text()), QMessageBox::Ok, QMessageBox::Ok); break; case AddressTableModel::DUPLICATE_ADDRESS: diff --git a/src/qt/forms/aboutdialog.ui b/src/qt/forms/aboutdialog.ui index 4acdbc5d..580ee60b 100644 --- a/src/qt/forms/aboutdialog.ui +++ b/src/qt/forms/aboutdialog.ui @@ -11,7 +11,7 @@ - About Memetic + About PepeCoin @@ -50,7 +50,7 @@ IBeamCursor - <b>Memetic</b> version + <html><head/><body><p><span style=" font-weight:600;">Memetic / PepeCoin </span>version</p></body></html> Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -63,7 +63,7 @@ IBeamCursor - 0.3.666-beta + 2.7.0.0 Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -98,11 +98,9 @@ Copyright (c) 2013 Peercoin Developers Copyright (c) 2014 DarkCoin Developers Copyright (c) 2014 BlackCoin Developers - Copyright (c) 2014 Digibyte Developers Copyright (c) 2014 DashCoin Developers - Copyright (c) 2014 NetCoin Developers - Copyright (c) 2015 Transfercoin Developer + Infernoman - Copyright (c) 2015-2016 Memetic Developers Coalition Of The Willing + Copyright (c) 2015 Transfercoin Developers + Copyright (c) 2015-2019 Memetic / PepeCoin Developers
diff --git a/src/qt/forms/addeditadrenalinenode.ui b/src/qt/forms/addeditadrenalinenode.ui deleted file mode 100644 index 39701c27..00000000 --- a/src/qt/forms/addeditadrenalinenode.ui +++ /dev/null @@ -1,180 +0,0 @@ - - - AddEditAdrenalineNode - - - - 0 - 0 - 315 - 414 - - - - Add/Edit Memetic Node - - - true - - - - - - - 0 - 0 - - - - <html><head/><body><p>Enter an Alias (friendly name) for your Master Node and its address (either clearnet IP and port or Tor onion address and port). The address should be in the format 123.456.789.123:9999 or akjdsafxjkhasdf.onion:9999. You must send exactly 10 000 MEME to the collateral address.</p></body></html> - - - true - - - - - - - 0 - - - - - Alias* - - - - - - - - - - - - 0 - - - - - Address* - - - - - - - - - - - - 0 - - - - - PrivKey* - - - - - - - - - - - - 0 - - - - - TxHash* - - - - - - - - - - - - 0 - - - - - Output Index* - - - - - - - - - - - - 0 - - - - - Donation Address - - - - - - - - - - - - 0 - - - - - Donation % - - - - - - - - - - - - - - &OK - - - - - - - &Cancel - - - false - - - - - - - - - - diff --git a/src/qt/forms/addeditmastertoad.ui b/src/qt/forms/addeditmastertoad.ui new file mode 100644 index 00000000..cbd5c77a --- /dev/null +++ b/src/qt/forms/addeditmastertoad.ui @@ -0,0 +1,157 @@ + + + AddEditmastertoad + + + + 0 + 0 + 540 + 241 + + + + Add/Edit Mastertoad + + + true + + + + + + 0 + + + 0 + + + + + + 0 + 0 + + + + <html><head/><body><p>Enter an Alias (friendly name) for your Mastertoad and its address (either clearnet IP and port or Tor onion address and port). The address should be in the format 123.456.789.123:9999 or akjdsafxjkhasdf.onion:9999. A mastertoad private key and a collateral address will both be automatically generated for you. You must send exactly 15000 PEPE / MEME to the collateral address.</p></body></html> + + + true + + + + + + + 0 + + + + + Alias + + + + + + + + + + + + 0 + + + + + Address + + + + + + + + + + + + 0 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 48 + + + + + + + + + 75 + true + + + + + + + Qt::PlainText + + + true + + + + + + + Qt::Horizontal + + + + 40 + 48 + + + + + + + + &OK + + + + + + + &Cancel + + + false + + + + + + + + + + diff --git a/src/qt/forms/addressbookpage.ui b/src/qt/forms/addressbookpage.ui index c9fdc669..a5babb63 100644 --- a/src/qt/forms/addressbookpage.ui +++ b/src/qt/forms/addressbookpage.ui @@ -17,7 +17,7 @@ - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. Qt::PlainText @@ -84,7 +84,7 @@ - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address Sign &Message @@ -94,7 +94,7 @@ - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address &Verify Message diff --git a/src/qt/forms/coincontroldialog.ui b/src/qt/forms/coincontroldialog.ui index 3ee2f099..f471bb90 100644 --- a/src/qt/forms/coincontroldialog.ui +++ b/src/qt/forms/coincontroldialog.ui @@ -141,7 +141,7 @@ Qt::ActionsContextMenu - 0.00 MEME + 0.00 PEPE / MEME Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -221,7 +221,7 @@ Qt::ActionsContextMenu - 0.00 MEME + 0.00 PEPE / MEME Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -307,7 +307,7 @@ Qt::ActionsContextMenu - 0.00 MEME + 0.00 PEPE / MEME Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -345,7 +345,7 @@ Qt::ActionsContextMenu - 0.00 MEME + 0.00 PEPE / MEME Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse diff --git a/src/qt/forms/darksendconfig.ui b/src/qt/forms/darksendconfig.ui index b93eac5f..6f5d1b50 100644 --- a/src/qt/forms/darksendconfig.ui +++ b/src/qt/forms/darksendconfig.ui @@ -75,7 +75,7 @@ - Use 2 separate masternodes to mix funds up to 1000 MEME + Use 2 separate masternodes to mix funds up to 1000 PEPE @@ -88,7 +88,7 @@ - Use 8 separate masternodes to mix funds up to 1000 MEME + Use 8 separate masternodes to mix funds up to 1000 PEPE @@ -114,7 +114,7 @@ - This option is the quickest and will cost about ~0.025 MEME to anonymize 1000 MEME + This option is the quickest and will cost about ~0.025 PEPE to anonymize 1000 PEPE @@ -127,7 +127,7 @@ - This option is moderately fast and will cost about 0.05 MEME to anonymize 1000 MEME + This option is moderately fast and will cost about 0.05 PEPE to anonymize 1000 PEPE @@ -153,7 +153,7 @@ - 0.1 MEME per 1000 MEME you anonymize. + 0.1 PEPE per 1000 PEPE you anonymize. diff --git a/src/qt/forms/masternodemanager.ui b/src/qt/forms/masternodemanager.ui index 37804755..fd9f0ad3 100644 --- a/src/qt/forms/masternodemanager.ui +++ b/src/qt/forms/masternodemanager.ui @@ -14,7 +14,16 @@ Form - + + 0 + + + 0 + + + 0 + + 0 @@ -25,11 +34,11 @@ - 1 + 0 - Memetic Network + PepeCoin Network @@ -43,9 +52,6 @@ QAbstractItemView::SelectRows - - true - true @@ -61,7 +67,7 @@ - Active + Status @@ -86,10 +92,17 @@ 0 + + + + Refresh Toad List + + + - Memetic Node Count: + Mastertoad Count: @@ -119,7 +132,7 @@ - My Master Nodes + My Mastertoads @@ -136,6 +149,27 @@ + + + + Create &Local + + + + + + + Copy &Address + + + + + + + Refresh My Toads List + + + @@ -180,17 +214,12 @@ - Donation % - - - - - Donation Address + Status - Status + Collateral Address @@ -208,16 +237,16 @@ - + - &Remove + &Get Config - + - &Update + &Remove @@ -241,6 +270,33 @@ 0 + + + + &Start + + + + + + + Sto&p + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + @@ -249,16 +305,16 @@ 0 - + - S&tart + S&tart All - + - St&art All + St&op All diff --git a/src/qt/forms/adrenalinenodeconfigdialog.ui b/src/qt/forms/mastertoadconfigdialog.ui similarity index 79% rename from src/qt/forms/adrenalinenodeconfigdialog.ui rename to src/qt/forms/mastertoadconfigdialog.ui index 6dd1ab14..ec960b93 100644 --- a/src/qt/forms/adrenalinenodeconfigdialog.ui +++ b/src/qt/forms/mastertoadconfigdialog.ui @@ -1,7 +1,7 @@ - AdrenalineNodeConfigDialog - + mastertoadConfigDialog + 0 @@ -11,13 +11,13 @@ - Master Node Configuration Template + Mastertoad Configuration Template - <html><head/><body><p>This pane shows an example memetic.conf template with the necessary masternode settings.</p></body></html> + <html><head/><body><p>This pane shows an example pepecoin.conf template with the necessary mastertoad settings.</p></body></html> true @@ -41,7 +41,7 @@ buttonBox accepted() - AdrenalineNodeConfigDialog + mastertoadConfigDialog accept() @@ -57,7 +57,7 @@ buttonBox rejected() - AdrenalineNodeConfigDialog + mastertoadConfigDialog reject() diff --git a/src/qt/forms/messagepage.ui b/src/qt/forms/messagepage.ui index 6e3fbcd7..2a11c1ff 100644 --- a/src/qt/forms/messagepage.ui +++ b/src/qt/forms/messagepage.ui @@ -159,7 +159,7 @@ - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address &Send diff --git a/src/qt/forms/optionsdialog.ui b/src/qt/forms/optionsdialog.ui index a9ce4547..2a3b7b52 100644 --- a/src/qt/forms/optionsdialog.ui +++ b/src/qt/forms/optionsdialog.ui @@ -23,7 +23,7 @@ QTabWidget::North - 3 + 0 @@ -125,10 +125,10 @@ - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -186,12 +186,12 @@ - Amount of Memetic to keep anonymized + Amount of PepeCoin to keep anonymized - + 2 @@ -216,7 +216,7 @@ - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. Map port using &UPnP @@ -226,7 +226,7 @@ - Connect to the Memetic network through a SOCKS5 proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS5 proxy (e.g. when connecting through Tor). &Connect through SOCKS5 proxy: @@ -380,7 +380,7 @@ - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui index e83170f2..12880116 100644 --- a/src/qt/forms/overviewpage.ui +++ b/src/qt/forms/overviewpage.ui @@ -70,7 +70,7 @@ WhatsThisCursor - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. QLabel { color: red; } @@ -482,7 +482,7 @@ WhatsThisCursor - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. QLabel { color: red; } @@ -580,7 +580,7 @@ - Note: Cost is 1 MEME + Note: Cost is 1 PEPE diff --git a/src/qt/forms/proofofmeme.ui b/src/qt/forms/proofofmeme.ui index 23266375..76726818 100644 --- a/src/qt/forms/proofofmeme.ui +++ b/src/qt/forms/proofofmeme.ui @@ -54,7 +54,7 @@ - Select A Meme File... + Select an image file @@ -67,7 +67,7 @@ - Choose Meme... + Select Image @@ -88,7 +88,7 @@ - <html><head/><body><p>This sends 1 MEME to the address generated by hashing the meme file selected. The address can be checked on a block explorer for proof of timestamp.</p></body></html> + <html><head/><body><p>This sends 1 PEPE to the address generated by hashing the meme file selected. The address can be checked on a block explorer for proof of creation date timestamp.</p></body></html> true @@ -100,7 +100,7 @@ - Generated Timestamp MEME Address: + Generated Timestamp PEPE Address: @@ -132,7 +132,7 @@ - Save the address and transaction hash for easy reference in the future. + Check a previous Transaction Hash for PEPE blockchain proofs. true diff --git a/src/qt/forms/rpcconsole.ui b/src/qt/forms/rpcconsole.ui index 89578c0a..65ed1be1 100644 --- a/src/qt/forms/rpcconsole.ui +++ b/src/qt/forms/rpcconsole.ui @@ -7,17 +7,17 @@ 0 0 740 - 491 + 518 - Memetic - Debug window + PepeCoin - Debug window - 0 + 2 @@ -33,7 +33,7 @@ - Memetic Core + PepeCoin Core @@ -194,7 +194,7 @@ - Number of masternodes + Number of Mastertoads @@ -319,7 +319,7 @@ - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. &Open @@ -345,7 +345,7 @@ - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. &Show diff --git a/src/qt/forms/sendcoinsdialog.ui b/src/qt/forms/sendcoinsdialog.ui index c72f57f5..e71d67cb 100644 --- a/src/qt/forms/sendcoinsdialog.ui +++ b/src/qt/forms/sendcoinsdialog.ui @@ -39,7 +39,7 @@ - -1 + 6 0 @@ -173,7 +173,16 @@ - + + 0 + + + 0 + + + 0 + + 0 @@ -321,7 +330,7 @@ Qt::ActionsContextMenu - 0.00 MEME + 0.00 PEPE Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -407,7 +416,7 @@ Qt::ActionsContextMenu - 0.00 MEME + 0.00 PEPE Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -493,7 +502,7 @@ Qt::ActionsContextMenu - 0.00 MEME + 0.00 PEPE Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -525,7 +534,7 @@ Qt::ActionsContextMenu - 0.00 MEME + 0.00 PEPE Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -626,11 +635,20 @@ 0 0 830 - 165 + 144 - + + 0 + + + 0 + + + 0 + + 0 @@ -699,8 +717,11 @@ 3 - + + + false + 95 @@ -708,7 +729,7 @@ - SmugSend + true @@ -718,7 +739,7 @@ - true + false @@ -756,7 +777,7 @@ IBeamCursor - 123.456 MEME + 123.456 PEPE Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse diff --git a/src/qt/forms/signverifymessagedialog.ui b/src/qt/forms/signverifymessagedialog.ui index 785845af..812ba50d 100644 --- a/src/qt/forms/signverifymessagedialog.ui +++ b/src/qt/forms/signverifymessagedialog.ui @@ -145,7 +145,7 @@ - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address &Sign Message @@ -291,7 +291,7 @@ - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address &Verify Message diff --git a/src/qt/forms/tradingdialog.ui b/src/qt/forms/tradingdialog.ui index b76de3cd..a103f64d 100644 --- a/src/qt/forms/tradingdialog.ui +++ b/src/qt/forms/tradingdialog.ui @@ -6,7 +6,7 @@ 0 0 - 1031 + 1147 622 @@ -161,32 +161,17 @@ QTabWidget::Rounded - 6 + 0 Trade - - - - - 8 - - - - Demand: 0.00000000 MEME - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - Supply: 0.00000000 MEME + Supply: 0.00000000 PEPE Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -1238,7 +1223,7 @@ - MEME + PEPE / MEME @@ -1292,7 +1277,7 @@ - MEME + PEPE @@ -2336,7 +2321,7 @@ - BTC + PEPE / MEME @@ -2345,14 +2330,29 @@ - Buy MEME + Buy PEPE - Sell MEME + Sell PEPE + + + + + + + + 8 + + + + Demand: 0.00000000 PEPE / MEME + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -2403,7 +2403,7 @@ - <html><head/><body><p align="center"><span style=" font-weight:600; text-decoration: underline;">Instructions:</span></p><p align="center">To use the cross sending feature you need to have </p><p align="center">MEME available to spend on Bittrex. If you don't have any </p><p align="center">you can find your deposit address on the &quot;Balance&quot; tab.</p><p align="center">1. Enter the amount you want to receive in Bitcoin.</p><p align="center">2. Enter the Bitcoin address you are sending to.</p><p align="center">3. Check that the Total with fee's is correct.</p><p align="center">4. Press send and watch the magic happen.</p><p align="center"><span style=" font-weight:600; text-decoration: underline;">Notes.</span></p><p align="center"><span style=" font-size:7pt;">Total w/ fees: N/A means you dont have enough MEME to sell !</span></p><p align="center"><span style=" font-size:7pt;">All trades are done through Bittrex using your own balance and API keys.</span></p><p align="center"><span style=" font-size:7pt;">Encrypt and backup your wallet when using this feature.</span></p><p align="center"><span style=" font-size:7pt;">If you don't have a password you bittrex account will be accessible 24/7</span></p><p align="center"><span style=" font-size:7pt;">Withdrawal fee of 0.002 and 0.25% taken by Bittrex.</span></p></body></html> + <html><head/><body><p align="center"><span style=" font-weight:600; text-decoration: underline;">Instructions:</span></p><p align="center">To use the cross sending feature you need to have </p><p align="center">PEPE available to spend on Bittrex. If you don't have any </p><p align="center">you can find your deposit address on the &quot;Balance&quot; tab.</p><p align="center">1. Enter the amount you want to receive in Bitcoin.</p><p align="center">2. Enter the Bitcoin address you are sending to.</p><p align="center">3. Check that the Total with fee's is correct.</p><p align="center">4. Press send and watch the magic happen.</p><p align="center"><span style=" font-weight:600; text-decoration: underline;">Notes.</span></p><p align="center"><span style=" font-size:7pt;">Total w/ fees: N/A means you dont have enough PEPE to sell !</span></p><p align="center"><span style=" font-size:7pt;">All trades are done through Bittrex using your own balance and API keys.</span></p><p align="center"><span style=" font-size:7pt;">Encrypt and backup your wallet when using this feature.</span></p><p align="center"><span style=" font-size:7pt;">If you don't have a password you bittrex account will be accessible 24/7</span></p><p align="center"><span style=" font-size:7pt;">Withdrawal fee of 0.002 and 0.25% taken by Bittrex.</span></p></body></html> @@ -2913,7 +2913,7 @@ - MEME Balance: + PEPE Balance: @@ -3362,7 +3362,7 @@ - MEME + PEPE @@ -3909,7 +3909,7 @@ - Amount in MEME: + Amount in PEPE @@ -4358,7 +4358,7 @@ - MEME + PEPE @@ -4942,7 +4942,7 @@ - MEME Balance: + PEPE Balance: @@ -5013,7 +5013,7 @@ - MEME Available: + PEPE Available: @@ -5071,7 +5071,7 @@ - MEME Pending: + PEPE Pending: @@ -5127,7 +5127,7 @@ - Generate MEME Coin Deposit Address + Generate PEPE Coin Deposit Address (as MEME on bittrex) @@ -5245,7 +5245,7 @@ - Withdraw MEME: + Withdraw PEPE diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index cfc55e21..9ed4c1e5 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -107,7 +107,7 @@ void setupAmountWidget(QLineEdit *widget, QWidget *parent) bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out) { // NovaCoin: check prefix - if(uri.scheme() != QString("memetic")) + if(uri.scheme() != QString("pepecoin")) return false; SendCoinsRecipient rv; @@ -157,13 +157,13 @@ bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out) bool parseBitcoinURI(QString uri, SendCoinsRecipient *out) { - // Convert memetic:// to memetic: + // Convert pepecoin:// to pepecoin: // // Cannot handle this later, because bitcoin:// will cause Qt to see the part after // as host, // which will lower-case it (and thus invalidate the address). - if(uri.startsWith("memetic://", Qt::CaseInsensitive)) + if(uri.startsWith("pepecoin://", Qt::CaseInsensitive)) { - uri.replace(0, 11, "memetic:"); + uri.replace(0, 11, "pepecoin:"); } QUrl uriInstance(uri); return parseBitcoinURI(uriInstance, out); @@ -478,12 +478,12 @@ TableViewLastColumnResizingFixer::TableViewLastColumnResizingFixer(QTableView* t #ifdef WIN32 boost::filesystem::path static StartupShortcutPath() { - return GetSpecialFolderPath(CSIDL_STARTUP) / "Memetic.lnk"; + return GetSpecialFolderPath(CSIDL_STARTUP) / "PepeCoin.lnk"; } bool GetStartOnSystemStartup() { - // check for Memetic.lnk + // check for PepeCoin.lnk return boost::filesystem::exists(StartupShortcutPath()); } @@ -560,7 +560,7 @@ boost::filesystem::path static GetAutostartDir() boost::filesystem::path static GetAutostartFilePath() { - return GetAutostartDir() / "memetic.desktop"; + return GetAutostartDir() / "pepecoin.desktop"; } bool GetStartOnSystemStartup() @@ -598,10 +598,10 @@ bool SetStartOnSystemStartup(bool fAutoStart) boost::filesystem::ofstream optionFile(GetAutostartFilePath(), std::ios_base::out|std::ios_base::trunc); if (!optionFile.good()) return false; - // Write a memetic.desktop file to the autostart directory: + // Write a pepecoin.desktop file to the autostart directory: optionFile << "[Desktop Entry]\n"; optionFile << "Type=Application\n"; - optionFile << "Name=Memetic\n"; + optionFile << "Name=PepeCoin\n"; optionFile << "Exec=" << pszExePath << " -min\n"; optionFile << "Terminal=false\n"; optionFile << "Hidden=false\n"; @@ -620,7 +620,7 @@ bool SetStartOnSystemStartup(bool fAutoStart) LSSharedFileListItemRef findStartupItemInList(LSSharedFileListRef list, CFURLRef findUrl); LSSharedFileListItemRef findStartupItemInList(LSSharedFileListRef list, CFURLRef findUrl) { - // loop through the list of startup items and try to find the memetic app + // loop through the list of startup items and try to find the pepecoin app CFArrayRef listSnapshot = LSSharedFileListCopySnapshot(list, NULL); for(int i = 0; i < CFArrayGetCount(listSnapshot); i++) { LSSharedFileListItemRef item = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(listSnapshot, i); @@ -654,7 +654,7 @@ bool SetStartOnSystemStartup(bool fAutoStart) LSSharedFileListItemRef foundItem = findStartupItemInList(loginItems, bitcoinAppUrl); if(fAutoStart && !foundItem) { - // add memetic app to startup item list + // add pepecoin app to startup item list LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemBeforeFirst, NULL, NULL, bitcoinAppUrl, NULL, NULL); } else if(!fAutoStart && foundItem) { @@ -673,10 +673,10 @@ bool SetStartOnSystemStartup(bool fAutoStart) { return false; } HelpMessageBox::HelpMessageBox(QWidget *parent) : QMessageBox(parent) { - header = tr("memetic-Qt") + " " + tr("version") + " " + + header = tr("pepecoin-Qt") + " " + tr("version") + " " + QString::fromStdString(FormatFullVersion()) + "\n\n" + tr("Usage:") + "\n" + - " memetic-qt [" + tr("command-line options") + "] " + "\n"; + " pepecoin-qt [" + tr("command-line options") + "] " + "\n"; coreOptions = QString::fromStdString(HelpMessage()); @@ -685,7 +685,7 @@ HelpMessageBox::HelpMessageBox(QWidget *parent) : " -min " + tr("Start minimized") + "\n" + " -splash " + tr("Show splash screen on startup (default: 1)") + "\n"; - setWindowTitle(tr("memetic-Qt")); + setWindowTitle(tr("pepecoin-Qt")); setTextFormat(Qt::PlainText); // setMinimumWidth is ignored for QMessageBox so put in non-breaking spaces to make it wider. setText(header + QString(QChar(0x2003)).repeated(50)); diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index 6f8e2dd8..b7feff47 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -37,7 +37,7 @@ namespace GUIUtil void setupAddressWidget(QLineEdit *widget, QWidget *parent); void setupAmountWidget(QLineEdit *widget, QWidget *parent); - // Parse "memetic:" URI into recipient object, return true on successful parsing + // Parse "pepecoin:" URI into recipient object, return true on successful parsing // See Bitcoin URI definition discussion here: https://bitcointalk.org/index.php?topic=33490.0 bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out); bool parseBitcoinURI(QString uri, SendCoinsRecipient *out); diff --git a/src/qt/locale/bitcoin_af_ZA.ts b/src/qt/locale/bitcoin_af_ZA.ts index 7f3f6361..b89327b2 100644 --- a/src/qt/locale/bitcoin_af_ZA.ts +++ b/src/qt/locale/bitcoin_af_ZA.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_ar.qm b/src/qt/locale/bitcoin_ar.qm index cab15373..893417db 100644 Binary files a/src/qt/locale/bitcoin_ar.qm and b/src/qt/locale/bitcoin_ar.qm differ diff --git a/src/qt/locale/bitcoin_ar.ts b/src/qt/locale/bitcoin_ar.ts index ffc92ab8..27dad6a2 100644 --- a/src/qt/locale/bitcoin_ar.ts +++ b/src/qt/locale/bitcoin_ar.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin عن البلاك كوين - <b>Memetic</b> version + <b>PepeCoin</b> version جزء البلاك كوين Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. هذه هي عناوين البلاك كوين لاستقبال الدفعات. يمكن أن تعطي عنوان مختلف لكل مرسل من اجل أن تتابع من يرسل لك. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address التوقيع علي رسالة لاثبات بانك تملك عنوان البلاك كوين @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address تحقق من الرسالة لتثبت بانه تم توقيعه بعنوان بلاك كوين محدد @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. بلاك كوين @@ -352,7 +352,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin اظهار المعلومات عن البلاك كوين @@ -392,12 +392,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address ارسال البلاك كوين الي عنوان اخر - Modify configuration options for Memetic + Modify configuration options for PepeCoin تعديل خيارات التكوين للبلاك كوين @@ -438,7 +438,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin البلاك كوين @@ -448,7 +448,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin عن البلاك كوين @@ -500,12 +500,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client برنامج البلاك كوين - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -596,7 +596,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -719,7 +719,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. خطا فادح! بلاك كوين لا يمكن أن يستمر جاري الاغلاق @@ -1040,7 +1040,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1059,7 +1059,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1132,12 +1132,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. بد البلاك كوين تلقائي عند الدخول الي الجهاز - &Start Memetic on system login + &Start PepeCoin on system login @@ -1147,7 +1147,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1157,7 +1157,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1232,7 +1232,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1299,7 +1299,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1318,7 +1318,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1392,7 +1392,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1560,7 +1560,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1580,12 +1580,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1595,7 +1595,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1605,7 +1605,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1714,7 +1714,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1784,7 +1784,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1799,7 +1799,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1899,7 +1899,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1973,7 +1973,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) ادخال عنوان البلاك كوين (مثلا B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2034,7 +2034,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2066,7 +2066,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2077,7 +2077,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2087,7 +2087,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2666,7 +2666,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version جزع البلاك كوين @@ -2676,7 +2676,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2696,12 +2696,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2719,13 +2719,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2831,7 +2831,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. تحذير : تأكد من ساعة وتاريخ الكمبيوتر! اذا ساعة غير صحيحة بلاك كوين لن يعمل بشكل صحيح @@ -3137,7 +3137,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3202,12 +3202,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete المحفظة يجب أن يعاد كتابته : أعد البلاك كوين لتكتمل @@ -3272,7 +3272,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3312,7 +3312,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_be_BY.ts b/src/qt/locale/bitcoin_be_BY.ts index 82392767..94d5659e 100644 --- a/src/qt/locale/bitcoin_be_BY.ts +++ b/src/qt/locale/bitcoin_be_BY.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2035,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2697,12 +2697,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2720,13 +2720,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2832,7 +2832,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3138,7 +3138,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3203,12 +3203,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3273,7 +3273,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3313,7 +3313,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_bg.ts b/src/qt/locale/bitcoin_bg.ts index 9afa72bc..b262ca33 100644 --- a/src/qt/locale/bitcoin_bg.ts +++ b/src/qt/locale/bitcoin_bg.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_bs.ts b/src/qt/locale/bitcoin_bs.ts index 8d8daa31..a19fe681 100644 --- a/src/qt/locale/bitcoin_bs.ts +++ b/src/qt/locale/bitcoin_bs.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_ca.qm b/src/qt/locale/bitcoin_ca.qm index c99b30c5..a8aeea1b 100644 Binary files a/src/qt/locale/bitcoin_ca.qm and b/src/qt/locale/bitcoin_ca.qm differ diff --git a/src/qt/locale/bitcoin_ca.ts b/src/qt/locale/bitcoin_ca.ts index 5984709a..1bc5d258 100644 --- a/src/qt/locale/bitcoin_ca.ts +++ b/src/qt/locale/bitcoin_ca.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_ca@valencia.qm b/src/qt/locale/bitcoin_ca@valencia.qm index dece326f..b5d4bb97 100644 Binary files a/src/qt/locale/bitcoin_ca@valencia.qm and b/src/qt/locale/bitcoin_ca@valencia.qm differ diff --git a/src/qt/locale/bitcoin_ca@valencia.ts b/src/qt/locale/bitcoin_ca@valencia.ts index f2843caa..f38ad5be 100644 --- a/src/qt/locale/bitcoin_ca@valencia.ts +++ b/src/qt/locale/bitcoin_ca@valencia.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_ca_ES.qm b/src/qt/locale/bitcoin_ca_ES.qm index 96d64644..7fb6931d 100644 Binary files a/src/qt/locale/bitcoin_ca_ES.qm and b/src/qt/locale/bitcoin_ca_ES.qm differ diff --git a/src/qt/locale/bitcoin_ca_ES.ts b/src/qt/locale/bitcoin_ca_ES.ts index 89905158..d547997f 100644 --- a/src/qt/locale/bitcoin_ca_ES.ts +++ b/src/qt/locale/bitcoin_ca_ES.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - Sobre Memetic + About PepeCoin + Sobre PepeCoin - <b>Memetic</b> version - versió <b>Memetic</b> + <b>PepeCoin</b> version + versió <b>PepeCoin</b> Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -60,8 +60,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Aquestes són les teves adreces de Memetic per rebre els pagaments. És possible que vulgueu donar una diferent a cada remitent per a poder realitzar un seguiment de qui li está pagant. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Aquestes són les teves adreces de PepeCoin per rebre els pagaments. És possible que vulgueu donar una diferent a cada remitent per a poder realitzar un seguiment de qui li está pagant. @@ -75,8 +75,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Signar un missatge per demostrar que és propietari d'una adreça Memetic + Sign a message to prove you own a PepeCoin address + Signar un missatge per demostrar que és propietari d'una adreça PepeCoin @@ -90,8 +90,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Comproveu el missatge per assegurar-se que es va signar amb una adreça Memetic especificada. + Verify a message to ensure it was signed with a specified PepeCoin address + Comproveu el missatge per assegurar-se que es va signar amb una adreça PepeCoin especificada. @@ -258,8 +258,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Memetic tancarà ara per acabar el procés de xifrat. Recordeu que l'encriptació del seu moneder no pot protegir completament les seves monedes de ser robades pel malware que pugui infectar al seu equip. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin tancarà ara per acabar el procés de xifrat. Recordeu que l'encriptació del seu moneder no pot protegir completament les seves monedes de ser robades pel malware que pugui infectar al seu equip. @@ -352,8 +352,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Mostra informació sobre Memetic + Show information about PepeCoin + Mostra informació sobre PepeCoin @@ -392,13 +392,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Enviar monedes a una adreça Memetic + Send coins to a PepeCoin address + Enviar monedes a una adreça PepeCoin - Modify configuration options for Memetic - Modificar les opcions de configuració per a Memetic + Modify configuration options for PepeCoin + Modificar les opcions de configuració per a PepeCoin @@ -438,8 +438,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -448,8 +448,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - &Sobre Memetic + &About PepeCoin + &Sobre PepeCoin @@ -500,13 +500,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Client Memetic + PepeCoin client + Client PepeCoin - %n active connection(s) to Memetic network - %n conexió activa a la xarxa Memetic%n conexions actives a la xarxa Memetic + %n active connection(s) to PepeCoin network + %n conexió activa a la xarxa PepeCoin%n conexions actives a la xarxa PepeCoin @@ -596,8 +596,8 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - l'URI no es pot analitzar! Això pot ser causat per una adreça Memetic no vàlida o paràmetres URI malformats. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + l'URI no es pot analitzar! Això pot ser causat per una adreça PepeCoin no vàlida o paràmetres URI malformats. @@ -719,8 +719,8 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - S'ha produït un error fatal. Memetic ja no pot continuar de forma segura i es tancarà. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + S'ha produït un error fatal. PepeCoin ja no pot continuar de forma segura i es tancarà. @@ -1053,8 +1053,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - The entered address "%1" is not a valid Memetic address. - La direcció introduïda "%1" no és una adreça Memetic vàlida. + The entered address "%1" is not a valid PepeCoin address. + La direcció introduïda "%1" no és una adreça PepeCoin vàlida. @@ -1072,8 +1072,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1145,13 +1145,13 @@ En aquest cas es requereix una comisió d'almenys 2%. - Automatically start Memetic after logging in to the system. - Inicia automàticament Memetic després d'entrar en el sistema. + Automatically start PepeCoin after logging in to the system. + Inicia automàticament PepeCoin després d'entrar en el sistema. - &Start Memetic on system login - &Iniciar Memetic amb l'inici de sessió + &Start PepeCoin on system login + &Iniciar PepeCoin amb l'inici de sessió @@ -1160,8 +1160,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Obrir automàticament el port de client Memetic en el router. Això només funciona quan el router és compatible amb UPnP i està habilitat. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Obrir automàticament el port de client PepeCoin en el router. Això només funciona quan el router és compatible amb UPnP i està habilitat. @@ -1170,8 +1170,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Connecteu-vos a la xarxa Memetic través d'un proxy SOCKS (per exemple, quan es connecta a través de Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + Connecteu-vos a la xarxa PepeCoin través d'un proxy SOCKS (per exemple, quan es connecta a través de Tor). @@ -1245,8 +1245,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - The user interface language can be set here. This setting will take effect after restarting Memetic. - L'idioma de la interfície d'usuari es pot configurar aquí. Aquesta configuració s'aplicarà després de reiniciar Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + L'idioma de la interfície d'usuari es pot configurar aquí. Aquesta configuració s'aplicarà després de reiniciar PepeCoin. @@ -1312,8 +1312,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - This setting will take effect after restarting Memetic. - Aquesta configuració s'aplicarà després de reiniciar Memetic. + This setting will take effect after restarting PepeCoin. + Aquesta configuració s'aplicarà després de reiniciar PepeCoin. @@ -1331,8 +1331,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - La informació mostrada pot estar fora de data. El seu moneder es sincronitza automàticament amb la xarxa Memetic després d'establir una connexió, però aquest procés no s'ha completat encara. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + La informació mostrada pot estar fora de data. El seu moneder es sincronitza automàticament amb la xarxa PepeCoin després d'establir una connexió, però aquest procés no s'ha completat encara. @@ -1405,7 +1405,7 @@ En aquest cas es requereix una comisió d'almenys 2%. PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1573,8 +1573,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Mostra el missatge d'ajuda de memetic-Qt per obtenir una llista amb les possibles opcions de línia d'ordres Memetic. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Mostra el missatge d'ajuda de pepecoin-Qt per obtenir una llista amb les possibles opcions de línia d'ordres PepeCoin. @@ -1593,13 +1593,13 @@ En aquest cas es requereix una comisió d'almenys 2%. - Memetic - Debug window - Memetic - Finestra Depuració + PepeCoin - Debug window + PepeCoin - Finestra Depuració - Memetic Core - Nucli Memetic + PepeCoin Core + Nucli PepeCoin @@ -1608,8 +1608,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Obriu el fitxer de registre de depuració Memetic des del directori de dades actual. Això pot trigar uns segons en els arxius de registre de grans dimensions. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + Obriu el fitxer de registre de depuració PepeCoin des del directori de dades actual. Això pot trigar uns segons en els arxius de registre de grans dimensions. @@ -1618,8 +1618,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - Welcome to the Memetic RPC console. - Benvingut a la consola RPC de Memetic. + Welcome to the PepeCoin RPC console. + Benvingut a la consola RPC de PepeCoin. @@ -1727,8 +1727,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1797,8 +1797,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1812,8 +1812,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Introdueix una adreça Memetic (p.ex. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Introdueix una adreça PepeCoin (p.ex. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1912,8 +1912,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - WARNING: Invalid Memetic address - ADVERTÈNCIA: Direcció Memetic invàlida + WARNING: Invalid PepeCoin address + ADVERTÈNCIA: Direcció PepeCoin invàlida @@ -1986,8 +1986,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Introdueix una adreça Memetic (p.ex. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Introdueix una adreça PepeCoin (p.ex. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2047,8 +2047,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - Sign the message to prove you own this Memetic address - Signar un missatge per demostrar que és propietari d'aquesta adreça Memetic + Sign the message to prove you own this PepeCoin address + Signar un missatge per demostrar que és propietari d'aquesta adreça PepeCoin @@ -2079,8 +2079,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - Verify the message to ensure it was signed with the specified Memetic address - Comproveu el missatge per assegurar-se que es va signar amb l'adreça Memetic especificada. + Verify the message to ensure it was signed with the specified PepeCoin address + Comproveu el missatge per assegurar-se que es va signar amb l'adreça PepeCoin especificada. @@ -2090,8 +2090,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Introdueix una adreça Memetic (p.ex. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Introdueix una adreça PepeCoin (p.ex. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2100,8 +2100,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - Enter Memetic signature - Introduïu la signatura Memetic + Enter PepeCoin signature + Introduïu la signatura PepeCoin @@ -2679,8 +2679,8 @@ En aquest cas es requereix una comisió d'almenys 2%. bitcoin-core - Memetic version - versió Memetic + PepeCoin version + versió PepeCoin @@ -2689,8 +2689,8 @@ En aquest cas es requereix una comisió d'almenys 2%. - Send command to -server or memeticd - Enviar comandes a -server o memeticd + Send command to -server or pepecoind + Enviar comandes a -server o pepecoind @@ -2709,13 +2709,13 @@ En aquest cas es requereix una comisió d'almenys 2%. - Specify configuration file (default: memetic.conf) - Especifiqueu el fitxer de configuració (per defecte: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Especifiqueu el fitxer de configuració (per defecte: pepecoin.conf) - Specify pid file (default: memeticd.pid) - Especificar arxiu pid (per defecte: memeticd.pid) + Specify pid file (default: pepecoind.pid) + Especificar arxiu pid (per defecte: pepecoind.pid) @@ -2732,13 +2732,13 @@ En aquest cas es requereix una comisió d'almenys 2%. %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2844,8 +2844,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Avís: Comproveu que la data i hora de l'equip siguin correctes! Si el seu rellotge és erroni Memetic no funcionarà correctament. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Avís: Comproveu que la data i hora de l'equip siguin correctes! Si el seu rellotge és erroni PepeCoin no funcionarà correctament. @@ -3152,7 +3152,7 @@ Executar una ordre quan es rep un avís rellevant (%s en cmd es substitueix per - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3217,13 +3217,13 @@ Executar una ordre quan es rep un avís rellevant (%s en cmd es substitueix per - Error loading wallet.dat: Wallet requires newer version of Memetic - Error en carregar wallet.dat: El moneder requereix la versió més recent de Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Error en carregar wallet.dat: El moneder requereix la versió més recent de PepeCoin - Wallet needed to be rewritten: restart Memetic to complete - El moneder necessita ser reescrita: reiniciar Memetic per completar + Wallet needed to be rewritten: restart PepeCoin to complete + El moneder necessita ser reescrita: reiniciar PepeCoin per completar @@ -3287,8 +3287,8 @@ Executar una ordre quan es rep un avís rellevant (%s en cmd es substitueix per - Unable to bind to %s on this computer. Memetic is probably already running. - No es pot enllaçar a %s en aquest equip. Memetic probablement ja estigui en funcionament. + Unable to bind to %s on this computer. PepeCoin is probably already running. + No es pot enllaçar a %s en aquest equip. PepeCoin probablement ja estigui en funcionament. @@ -3327,7 +3327,7 @@ Executar una ordre quan es rep un avís rellevant (%s en cmd es substitueix per - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_cs.qm b/src/qt/locale/bitcoin_cs.qm index 28fbcb11..86786794 100644 Binary files a/src/qt/locale/bitcoin_cs.qm and b/src/qt/locale/bitcoin_cs.qm differ diff --git a/src/qt/locale/bitcoin_cs.ts b/src/qt/locale/bitcoin_cs.ts index b3408cb0..a2d82c62 100644 --- a/src/qt/locale/bitcoin_cs.ts +++ b/src/qt/locale/bitcoin_cs.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - O Memeticu + About PepeCoin + O PepeCoinu - <b>Memetic</b> version - Verze <b>Memeticu</b> + <b>PepeCoin</b> version + Verze <b>PepeCoinu</b> Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -60,8 +60,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Tato jsou tvé Memetic adresy pro příjem plateb. Každému odesílateli můžeš dát jinou adresu, aby jsi mohl sledovat, kdo ti platí. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Tato jsou tvé PepeCoin adresy pro příjem plateb. Každému odesílateli můžeš dát jinou adresu, aby jsi mohl sledovat, kdo ti platí. @@ -75,8 +75,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Podepiš zprávu, aby jsi dokázal, že vlastníš tuto Memetic adresu. + Sign a message to prove you own a PepeCoin address + Podepiš zprávu, aby jsi dokázal, že vlastníš tuto PepeCoin adresu. @@ -90,8 +90,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Ověř zprávu, aby jsi zajistil, že byla podepsaná určitou Memetic adresou. + Verify a message to ensure it was signed with a specified PepeCoin address + Ověř zprávu, aby jsi zajistil, že byla podepsaná určitou PepeCoin adresou. @@ -258,8 +258,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Pro dokončení procesu šifrování se Memetic nyní zavře, Pamatuj, že zašifrování tvé peněženky nemůže plně ochránit tvé mince před krádeží, pokud máš počítač infikován malwerem. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + Pro dokončení procesu šifrování se PepeCoin nyní zavře, Pamatuj, že zašifrování tvé peněženky nemůže plně ochránit tvé mince před krádeží, pokud máš počítač infikován malwerem. @@ -352,8 +352,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Zobraz informace a Memeticu + Show information about PepeCoin + Zobraz informace a PepeCoinu @@ -392,13 +392,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Odešli mince na Memetic adresu + Send coins to a PepeCoin address + Odešli mince na PepeCoin adresu - Modify configuration options for Memetic - Uprav možnosti konfigurace pro Memetic + Modify configuration options for PepeCoin + Uprav možnosti konfigurace pro PepeCoin @@ -438,8 +438,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -448,8 +448,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - &O Memeticu + &About PepeCoin + &O PepeCoinu @@ -500,13 +500,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Memetic klient + PepeCoin client + PepeCoin klient - %n active connection(s) to Memetic network - %n aktivní spojení do Memetic sítě%n aktivních spojení do Memetic sítě%n aktivních spojení do Memetic sítě + %n active connection(s) to PepeCoin network + %n aktivní spojení do PepeCoin sítě%n aktivních spojení do PepeCoin sítě%n aktivních spojení do PepeCoin sítě @@ -600,8 +600,8 @@ Adresa: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - URI nejde rozparsovat! To může být způsobeno neplatnou Memetic adresou nebo chybnými URI parametry. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + URI nejde rozparsovat! To může být způsobeno neplatnou PepeCoin adresou nebo chybnými URI parametry. @@ -723,8 +723,8 @@ Adresa: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - Došlo k závažné chybě. Memetic již nemůže dále bezpečně pokračovat a bude ukončen. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + Došlo k závažné chybě. PepeCoin již nemůže dále bezpečně pokračovat a bude ukončen. @@ -1057,8 +1057,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - The entered address "%1" is not a valid Memetic address. - Zadaná adresa "%1" není platná Memetic adresa. + The entered address "%1" is not a valid PepeCoin address. + Zadaná adresa "%1" není platná PepeCoin adresa. @@ -1076,8 +1076,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1149,13 +1149,13 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Automatically start Memetic after logging in to the system. - Automaticky spustit Memetic po přihlášení do systému. + Automatically start PepeCoin after logging in to the system. + Automaticky spustit PepeCoin po přihlášení do systému. - &Start Memetic on system login - &Spustit Memetic při přihlášení do systému + &Start PepeCoin on system login + &Spustit PepeCoin při přihlášení do systému @@ -1164,8 +1164,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Automaticky otevřít port Memetic klienta na routeru. Funguje to jen tehdy, když router podporuje UPnP a je povoleno. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Automaticky otevřít port PepeCoin klienta na routeru. Funguje to jen tehdy, když router podporuje UPnP a je povoleno. @@ -1174,8 +1174,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Připoj se do sítě Memetic přes SOCKS proxy (např. při připojení přes Tor) + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + Připoj se do sítě PepeCoin přes SOCKS proxy (např. při připojení přes Tor) @@ -1249,8 +1249,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - The user interface language can be set here. This setting will take effect after restarting Memetic. - Zde můžeš nastavit jazyk uživatelského rozhraní. Nastavení se projeví až po restartu Memeticu. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + Zde můžeš nastavit jazyk uživatelského rozhraní. Nastavení se projeví až po restartu PepeCoinu. @@ -1316,8 +1316,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - This setting will take effect after restarting Memetic. - Nastavení se projeví až po restartu Memeticu. + This setting will take effect after restarting PepeCoin. + Nastavení se projeví až po restartu PepeCoinu. @@ -1335,8 +1335,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - Zobrazené informace můžou být zastaralé. Tvá peněženka se automaticky synchronizuje s Memetic sítí po navázaní spojení, ale tento proces ještě není dokončený. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + Zobrazené informace můžou být zastaralé. Tvá peněženka se automaticky synchronizuje s PepeCoin sítí po navázaní spojení, ale tento proces ještě není dokončený. @@ -1409,7 +1409,7 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1577,8 +1577,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Zobrazit memetic-Qt nápovědu pro zobrazení seznam dostupným možností příkazového řádku. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Zobrazit pepecoin-Qt nápovědu pro zobrazení seznam dostupným možností příkazového řádku. @@ -1597,13 +1597,13 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Memetic - Debug window - Memetic - Ladící okno + PepeCoin - Debug window + PepeCoin - Ladící okno - Memetic Core - Jádro Memeticu + PepeCoin Core + Jádro PepeCoinu @@ -1612,8 +1612,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Otevři logovací soubor Memeticu z aktuálního datového adresáře. Pro velké logy to může trvat několik sekund. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + Otevři logovací soubor PepeCoinu z aktuálního datového adresáře. Pro velké logy to může trvat několik sekund. @@ -1622,8 +1622,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Welcome to the Memetic RPC console. - Vítej v Memetic RPC konzoli. + Welcome to the PepeCoin RPC console. + Vítej v PepeCoin RPC konzoli. @@ -1731,8 +1731,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1801,8 +1801,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1816,8 +1816,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Napiš Memetic adresu (např. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Napiš PepeCoin adresu (např. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1916,8 +1916,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - WARNING: Invalid Memetic address - UPOZORNĚNÍ: Neplatná Memetic adresa + WARNING: Invalid PepeCoin address + UPOZORNĚNÍ: Neplatná PepeCoin adresa @@ -1990,8 +1990,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Zadej Memetic adresu (např. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Zadej PepeCoin adresu (např. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2051,8 +2051,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Sign the message to prove you own this Memetic address - Podepiš zprávu jako důkaz, že vlastníš tuto Memetic adresu + Sign the message to prove you own this PepeCoin address + Podepiš zprávu jako důkaz, že vlastníš tuto PepeCoin adresu @@ -2083,8 +2083,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Verify the message to ensure it was signed with the specified Memetic address - Ověř zprávu, aby ses ujistil, že byla podepsána danou Memetic adresou + Verify the message to ensure it was signed with the specified PepeCoin address + Ověř zprávu, aby ses ujistil, že byla podepsána danou PepeCoin adresou @@ -2094,8 +2094,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Zadej Memetic adresu (např. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Zadej PepeCoin adresu (např. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2104,8 +2104,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Enter Memetic signature - Zadej Memetic podpis + Enter PepeCoin signature + Zadej PepeCoin podpis @@ -2683,8 +2683,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. bitcoin-core - Memetic version - Verze Memeticu + PepeCoin version + Verze PepeCoinu @@ -2693,8 +2693,8 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Send command to -server or memeticd - Pošli příkaz na -server nebo memeticd + Send command to -server or pepecoind + Pošli příkaz na -server nebo pepecoind @@ -2713,13 +2713,13 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. - Specify configuration file (default: memetic.conf) - Urči konfigurační soubor (výchozí: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Urči konfigurační soubor (výchozí: pepecoin.conf) - Specify pid file (default: memeticd.pid) - Urči pid soubor (výchozí: memeticd.pid) + Specify pid file (default: pepecoind.pid) + Urči pid soubor (výchozí: pepecoind.pid) @@ -2736,13 +2736,13 @@ To znamená, že je potřebný poplatek ve výši nejméně %2. %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2848,8 +2848,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Upozornění: Zkontroluj prosím datum a čas tvého počítače! Pokud jdou tvé hodiny špatně, tak Memetic nebude pracovat správně. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Upozornění: Zkontroluj prosím datum a čas tvého počítače! Pokud jdou tvé hodiny špatně, tak PepeCoin nebude pracovat správně. @@ -3155,7 +3155,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3220,13 +3220,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - Chyba načítání wallet.dat: Peněženka vyžaduje novější verzi Memeticu + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Chyba načítání wallet.dat: Peněženka vyžaduje novější verzi PepeCoinu - Wallet needed to be rewritten: restart Memetic to complete - Peněženka by potřebovala být přepsána: restartuj Memetic pro dokončení + Wallet needed to be rewritten: restart PepeCoin to complete + Peněženka by potřebovala být přepsána: restartuj PepeCoin pro dokončení @@ -3290,8 +3290,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. - Nemůžu se svázat s %s na tomto počítači. Memetic nejspíše již běží. + Unable to bind to %s on this computer. PepeCoin is probably already running. + Nemůžu se svázat s %s na tomto počítači. PepeCoin nejspíše již běží. @@ -3330,7 +3330,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_cy.ts b/src/qt/locale/bitcoin_cy.ts index b7c57c69..e18962db 100644 --- a/src/qt/locale/bitcoin_cy.ts +++ b/src/qt/locale/bitcoin_cy.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_da.qm b/src/qt/locale/bitcoin_da.qm index 85951c00..099599e6 100644 Binary files a/src/qt/locale/bitcoin_da.qm and b/src/qt/locale/bitcoin_da.qm differ diff --git a/src/qt/locale/bitcoin_da.ts b/src/qt/locale/bitcoin_da.ts index 605fac42..735d8ab7 100644 --- a/src/qt/locale/bitcoin_da.ts +++ b/src/qt/locale/bitcoin_da.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - Om Memetic + About PepeCoin + Om PepeCoin - <b>Memetic</b> version - <b>Memetic</b> version + <b>PepeCoin</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -60,8 +60,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Dette er dine Memetic adresser til at modtage betalinger. Du ønsker måske at give en anden en til af hver afsender, så du kan holde styr på hvem der betaler dig. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Dette er dine PepeCoin adresser til at modtage betalinger. Du ønsker måske at give en anden en til af hver afsender, så du kan holde styr på hvem der betaler dig. @@ -75,8 +75,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Signerer en meddelelse for at bevise du ejer en Memetic adresse + Sign a message to prove you own a PepeCoin address + Signerer en meddelelse for at bevise du ejer en PepeCoin adresse @@ -90,8 +90,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Bekræft en meddelelse for at sikre, den blev underskrevet med en specificeret Memetic adresse + Verify a message to ensure it was signed with a specified PepeCoin address + Bekræft en meddelelse for at sikre, den blev underskrevet med en specificeret PepeCoin adresse @@ -258,8 +258,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Memetic lukker nu for at afslutte krypteringen. Husk at en krypteret tegnebog ikke fuldt ud beskytter dine mønter mod at blive stjålet af malware som har inficeret din computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin lukker nu for at afslutte krypteringen. Husk at en krypteret tegnebog ikke fuldt ud beskytter dine mønter mod at blive stjålet af malware som har inficeret din computer. @@ -352,8 +352,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Vis oplysninger om Memetic + Show information about PepeCoin + Vis oplysninger om PepeCoin @@ -392,13 +392,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Send mønter til en Memetic adresse + Send coins to a PepeCoin address + Send mønter til en PepeCoin adresse - Modify configuration options for Memetic - Ændre indstillingsmuligheder for Memetic + Modify configuration options for PepeCoin + Ændre indstillingsmuligheder for PepeCoin @@ -438,8 +438,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -448,8 +448,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - &Om Memetic + &About PepeCoin + &Om PepeCoin @@ -500,13 +500,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Memetic klient + PepeCoin client + PepeCoin klient - %n active connection(s) to Memetic network - %n aktiv forbindelse til Memetic netværk%n aktive forbindelser til Memetic netværk + %n active connection(s) to PepeCoin network + %n aktiv forbindelse til PepeCoin netværk%n aktive forbindelser til PepeCoin netværk @@ -600,8 +600,8 @@ Adresse: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - URI kan ikke tolkes! Dette kan skyldes en ugyldig Memetic adresse eller misdannede URI parametre. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + URI kan ikke tolkes! Dette kan skyldes en ugyldig PepeCoin adresse eller misdannede URI parametre. @@ -723,7 +723,7 @@ Adresse: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. Der opstod en fejl under forsøg på at gemme dataene i tegnebogen til den nye placering. @@ -1057,8 +1057,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - The entered address "%1" is not a valid Memetic address. - Den indtastede adresse "%1" er ikke en gyldig Memetic adresse. + The entered address "%1" is not a valid PepeCoin address. + Den indtastede adresse "%1" er ikke en gyldig PepeCoin adresse. @@ -1076,8 +1076,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1149,13 +1149,13 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Automatically start Memetic after logging in to the system. - Automatisk start Memetic efter at have logget ind på systemet. + Automatically start PepeCoin after logging in to the system. + Automatisk start PepeCoin efter at have logget ind på systemet. - &Start Memetic on system login - &Start Memetic ved systems login + &Start PepeCoin on system login + &Start PepeCoin ved systems login @@ -1164,8 +1164,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Automatisk åbne Memetic klient-port på routeren. Dette virker kun, når din router understøtter UPnP og er det er aktiveret. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Automatisk åbne PepeCoin klient-port på routeren. Dette virker kun, når din router understøtter UPnP og er det er aktiveret. @@ -1174,8 +1174,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Opret forbindelse til Memetic netværk via en SOCKS proxy (fx ved tilslutning gennem Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + Opret forbindelse til PepeCoin netværk via en SOCKS proxy (fx ved tilslutning gennem Tor). @@ -1249,8 +1249,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - The user interface language can be set here. This setting will take effect after restarting Memetic. - Sproget i brugergrænsefladen kan indstilles her. Denne indstilling vil træde i kraft efter genstart af Memetic tegnebog. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + Sproget i brugergrænsefladen kan indstilles her. Denne indstilling vil træde i kraft efter genstart af PepeCoin tegnebog. @@ -1316,8 +1316,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - This setting will take effect after restarting Memetic. - Denne indstilling vil træde i kraft efter genstart af Memetic. + This setting will take effect after restarting PepeCoin. + Denne indstilling vil træde i kraft efter genstart af PepeCoin. @@ -1335,8 +1335,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - De viste oplysninger kan være forældet. Din tegnebog synkroniserer automatisk med Memetic netværket efter en forbindelse er etableret, men denne proces er ikke afsluttet endnu. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + De viste oplysninger kan være forældet. Din tegnebog synkroniserer automatisk med PepeCoin netværket efter en forbindelse er etableret, men denne proces er ikke afsluttet endnu. @@ -1409,7 +1409,7 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1577,8 +1577,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Vis memetic-Qt hjælpe besked for at få en liste med mulige Memetic kommandolinjeparametre. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Vis pepecoin-Qt hjælpe besked for at få en liste med mulige PepeCoin kommandolinjeparametre. @@ -1597,13 +1597,13 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Memetic - Debug window - Memetic - Debug vindue + PepeCoin - Debug window + PepeCoin - Debug vindue - Memetic Core - Memetic Kerne + PepeCoin Core + PepeCoin Kerne @@ -1612,8 +1612,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Åbn Memetic debug logfilen fra den nuværende data mappe. Dette kan tage et par sekunder for store logfiler. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + Åbn PepeCoin debug logfilen fra den nuværende data mappe. Dette kan tage et par sekunder for store logfiler. @@ -1622,8 +1622,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Welcome to the Memetic RPC console. - Velkommen til Memetic RPC-konsol. + Welcome to the PepeCoin RPC console. + Velkommen til PepeCoin RPC-konsol. @@ -1731,8 +1731,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1801,8 +1801,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1816,8 +1816,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Indtast en memetic-adresse (f.eks B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Indtast en pepecoin-adresse (f.eks B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1916,8 +1916,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - WARNING: Invalid Memetic address - ADVARSEL: Ugyldig Memetic adresse + WARNING: Invalid PepeCoin address + ADVARSEL: Ugyldig PepeCoin adresse @@ -1990,8 +1990,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Indtast en memetic-adresse (f.eks B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Indtast en pepecoin-adresse (f.eks B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2051,8 +2051,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Sign the message to prove you own this Memetic address - Underskriv brevet for at bevise du ejer denne Memetic adresse + Sign the message to prove you own this PepeCoin address + Underskriv brevet for at bevise du ejer denne PepeCoin adresse @@ -2083,8 +2083,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Verify the message to ensure it was signed with the specified Memetic address - Kontroller meddelelsen for at sikre, at den blev indgået med den angivne Memetic adresse + Verify the message to ensure it was signed with the specified PepeCoin address + Kontroller meddelelsen for at sikre, at den blev indgået med den angivne PepeCoin adresse @@ -2094,8 +2094,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Indtast en memetic-adresse (f.eks B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Indtast en pepecoin-adresse (f.eks B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2104,8 +2104,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Enter Memetic signature - Indtast Memetic underskrift + Enter PepeCoin signature + Indtast PepeCoin underskrift @@ -2683,8 +2683,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. bitcoin-core - Memetic version - Memetic version + PepeCoin version + PepeCoin version @@ -2693,8 +2693,8 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Send command to -server or memeticd - Send kommando til-server eller memeticd + Send command to -server or pepecoind + Send kommando til-server eller pepecoind @@ -2713,13 +2713,13 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. - Specify configuration file (default: memetic.conf) - Angiv konfigurationsfil (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Angiv konfigurationsfil (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) - Angiv pid fil (standard: memeticd.pid) + Specify pid file (default: pepecoind.pid) + Angiv pid fil (standard: pepecoind.pid) @@ -2736,13 +2736,13 @@ Det betyder, at et gebyr på mindst %2 er påkrævet. %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2848,8 +2848,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Advarsel: Kontroller venligst, at computerens dato og klokkeslæt er korrekt! Hvis dit ur er forkert vil Memetic ikke fungere korrekt. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Advarsel: Kontroller venligst, at computerens dato og klokkeslæt er korrekt! Hvis dit ur er forkert vil PepeCoin ikke fungere korrekt. @@ -3155,7 +3155,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3220,13 +3220,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - Fejl ved indlæsning af wallet.dat: Wallet kræver en nyere version af Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Fejl ved indlæsning af wallet.dat: Wallet kræver en nyere version af PepeCoin - Wallet needed to be rewritten: restart Memetic to complete - Det er nødvendig for wallet at blive omskrevet: Genstart Memetic for fuldføre + Wallet needed to be rewritten: restart PepeCoin to complete + Det er nødvendig for wallet at blive omskrevet: Genstart PepeCoin for fuldføre @@ -3290,8 +3290,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. - Kunne ikke binde sig til% s på denne computer. Memetic kører sikkert allerede. + Unable to bind to %s on this computer. PepeCoin is probably already running. + Kunne ikke binde sig til% s på denne computer. PepeCoin kører sikkert allerede. @@ -3330,7 +3330,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_de.qm b/src/qt/locale/bitcoin_de.qm index 1e68081c..72929f9c 100644 Binary files a/src/qt/locale/bitcoin_de.qm and b/src/qt/locale/bitcoin_de.qm differ diff --git a/src/qt/locale/bitcoin_de.ts b/src/qt/locale/bitcoin_de.ts index bbdd7827..073ae435 100644 --- a/src/qt/locale/bitcoin_de.ts +++ b/src/qt/locale/bitcoin_de.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic - Über Memetic + About PepeCoin + Über PepeCoin - <b>Memetic</b> version - <b>Memetic</b> Version + <b>PepeCoin</b> version + <b>PepeCoin</b> Version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,8 +58,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Das sind Ihre Memetic Adressen um Zahlungen zu erhalten. Sie werden vielleicht verschiedene an jeden Sender vergeben, damit Sie im Auge behalten können wer Sie bezahlt. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Das sind Ihre PepeCoin Adressen um Zahlungen zu erhalten. Sie werden vielleicht verschiedene an jeden Sender vergeben, damit Sie im Auge behalten können wer Sie bezahlt. @@ -73,8 +73,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Signieren Sie eine Nachricht um zu beweisen, dass Sie eine Memetic Adresse besitzen + Sign a message to prove you own a PepeCoin address + Signieren Sie eine Nachricht um zu beweisen, dass Sie eine PepeCoin Adresse besitzen @@ -88,8 +88,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Verifizieren Sie ob eine Nachricht einer bestimmten Memetic Adresse signiert wurde + Verify a message to ensure it was signed with a specified PepeCoin address + Verifizieren Sie ob eine Nachricht einer bestimmten PepeCoin Adresse signiert wurde @@ -256,8 +256,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Memetic wird sich schließen um den Verschlüsselungsvorgang abzuschließen. Beachten Sie, dass die Verschlüsselung Ihrer Wallet keinen vollständigen Schutz vor Diebstahl Ihrer Coins duch auf Ihrem Computer installierte Malware gewährleistet + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin wird sich schließen um den Verschlüsselungsvorgang abzuschließen. Beachten Sie, dass die Verschlüsselung Ihrer Wallet keinen vollständigen Schutz vor Diebstahl Ihrer Coins duch auf Ihrem Computer installierte Malware gewährleistet @@ -350,8 +350,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Informationen über Memetic anzeigen + Show information about PepeCoin + Informationen über PepeCoin anzeigen @@ -390,13 +390,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Senden Sie Coins an eine Memetic Adresse + Send coins to a PepeCoin address + Senden Sie Coins an eine PepeCoin Adresse - Modify configuration options for Memetic - Konfigurationsoptionen für Memetic ändern + Modify configuration options for PepeCoin + Konfigurationsoptionen für PepeCoin ändern @@ -436,8 +436,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -446,8 +446,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - &Über Memetic + &About PepeCoin + &Über PepeCoin @@ -498,13 +498,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network - %n aktive Verbindung zum Memetic Netzwerk%n aktive Verbindungen zum Memetic Netzwerk + %n active connection(s) to PepeCoin network + %n aktive Verbindung zum PepeCoin Netzwerk%n aktive Verbindungen zum PepeCoin Netzwerk @@ -597,8 +597,8 @@ Adresse: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - Die URI kann nicht erkannt werden! Die Ursache hierfür kann eine ungültige Memetic Adresse oder eine fehlerhafte Angabe der URI Parameter sein. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + Die URI kann nicht erkannt werden! Die Ursache hierfür kann eine ungültige PepeCoin Adresse oder eine fehlerhafte Angabe der URI Parameter sein. @@ -720,8 +720,8 @@ Adresse: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - Ein fataler Fehler ist aufgetreten. Memetic kann nicht fortgesetzt werden und wird beendet. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + Ein fataler Fehler ist aufgetreten. PepeCoin kann nicht fortgesetzt werden und wird beendet. @@ -1040,8 +1040,8 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. - Die eingegebene Adresse "%1" ist keine gültige Memetic Adresse. + The entered address "%1" is not a valid PepeCoin address. + Die eingegebene Adresse "%1" ist keine gültige PepeCoin Adresse. @@ -1059,7 +1059,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1132,13 +1132,13 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. - Automatisch Memetic starten beim Einloggen in das System. + Automatically start PepeCoin after logging in to the system. + Automatisch PepeCoin starten beim Einloggen in das System. - &Start Memetic on system login - &Starte Memetic bei Systemstart + &Start PepeCoin on system login + &Starte PepeCoin bei Systemstart @@ -1147,8 +1147,8 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Automatisch den Memetic client port auf dem Router öffnen. Das funktioniert nur wenn der Router UPnP unterstützt und UPnP aktiviert ist. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Automatisch den PepeCoin client port auf dem Router öffnen. Das funktioniert nur wenn der Router UPnP unterstützt und UPnP aktiviert ist. @@ -1157,7 +1157,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1232,7 +1232,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. Die Sprache der GUI kann hier verändert werden. Die Einstellung wird nach einem Neustart übernommen. @@ -1243,7 +1243,7 @@ This label turns red, if the priority is smaller than "medium". Choose the default subdivision unit to show in the interface and when sending coins. - Wählen Sie die Standarduntereinheit, die in der Benutzeroberfläche und beim Überweisen von Memetics angezeigt werden soll. + Wählen Sie die Standarduntereinheit, die in der Benutzeroberfläche und beim Überweisen von PepeCoins angezeigt werden soll. @@ -1299,7 +1299,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. Diese Einstellung wird nach einem Neustart übernommen. @@ -1318,8 +1318,8 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - Die angezeigte Information kann falsch sein. Die Brieftasche synchronisiert automatisch mit dem Memetic Netzwerk nachdem eine Verbindung zustande gekommen ist, aber dieser Prozess ist nicht abgeschlossen. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + Die angezeigte Information kann falsch sein. Die Brieftasche synchronisiert automatisch mit dem PepeCoin Netzwerk nachdem eine Verbindung zustande gekommen ist, aber dieser Prozess ist nicht abgeschlossen. @@ -1392,7 +1392,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1560,7 +1560,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1580,13 +1580,13 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window - Memetic - Debug Fenster + PepeCoin - Debug window + PepeCoin - Debug Fenster - Memetic Core - Memetic Kern + PepeCoin Core + PepeCoin Kern @@ -1595,7 +1595,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1605,7 +1605,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1714,7 +1714,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1784,7 +1784,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1799,7 +1799,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1899,8 +1899,8 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address - Warnung: Ungültige Memetic Adresse + WARNING: Invalid PepeCoin address + Warnung: Ungültige PepeCoin Adresse @@ -1973,7 +1973,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2034,8 +2034,8 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address - Signiere die Nachricht um zu beweisen das du Besitzer dieser Memetic Adresse bist. + Sign the message to prove you own this PepeCoin address + Signiere die Nachricht um zu beweisen das du Besitzer dieser PepeCoin Adresse bist. @@ -2066,7 +2066,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2077,7 +2077,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2087,8 +2087,8 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature - Memetic Signatur eingeben + Enter PepeCoin signature + PepeCoin Signatur eingeben @@ -2666,7 +2666,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2676,8 +2676,8 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd - Kommando versenden an -server oder memeticd + Send command to -server or pepecoind + Kommando versenden an -server oder pepecoind @@ -2696,13 +2696,13 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) - Konfigurationsdatei angeben (Standard: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Konfigurationsdatei angeben (Standard: pepecoin.conf) - Specify pid file (default: memeticd.pid) - PID Datei angeben (Standard: memetic.pid) + Specify pid file (default: pepecoind.pid) + PID Datei angeben (Standard: pepecoin.pid) @@ -2719,13 +2719,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2831,8 +2831,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Wanung : Bitte prüfen Sie ob Datum und Uhrzeit richtig eingestellt sind. Wenn das Datum falsch ist wird Memetic nicht richtig funktionieren. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Wanung : Bitte prüfen Sie ob Datum und Uhrzeit richtig eingestellt sind. Wenn das Datum falsch ist wird PepeCoin nicht richtig funktionieren. @@ -3138,7 +3138,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3203,13 +3203,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - Fehler beim Laden wallet.dat. Brieftasche benötigt neuere Version der Memetic Brieftasche. + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Fehler beim Laden wallet.dat. Brieftasche benötigt neuere Version der PepeCoin Brieftasche. - Wallet needed to be rewritten: restart Memetic to complete - Brieftasche muss neu geschrieben werden. Starte die Memetic Brieftasche neu zum komplettieren. + Wallet needed to be rewritten: restart PepeCoin to complete + Brieftasche muss neu geschrieben werden. Starte die PepeCoin Brieftasche neu zum komplettieren. @@ -3273,7 +3273,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. Fehler beim anbinden %s auf diesem Computer. BlaclCoin Client läuft wahrscheinlich bereits. @@ -3313,7 +3313,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_el_GR.ts b/src/qt/locale/bitcoin_el_GR.ts index 9d155b06..242021dc 100644 --- a/src/qt/locale/bitcoin_el_GR.ts +++ b/src/qt/locale/bitcoin_el_GR.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2035,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2697,12 +2697,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2720,13 +2720,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2832,7 +2832,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3138,7 +3138,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3203,12 +3203,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3273,7 +3273,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3313,7 +3313,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_en.qm b/src/qt/locale/bitcoin_en.qm index e40445c0..4c638b97 100644 Binary files a/src/qt/locale/bitcoin_en.qm and b/src/qt/locale/bitcoin_en.qm differ diff --git a/src/qt/locale/bitcoin_en.ts b/src/qt/locale/bitcoin_en.ts index 900088cc..09882398 100644 --- a/src/qt/locale/bitcoin_en.ts +++ b/src/qt/locale/bitcoin_en.ts @@ -5,20 +5,20 @@ AboutDialog - About Memetic - About Memetic + About Memetic / PepeCoin + About Memetic / PepeCoin - <b>Memetic</b> version - <b>Memetic</b> version + <b>Memetic - PepeCoin</b> version + <b>Memetic - PepeCoin</b> version Copyright © 2009-2015 The Bitcoin developers -Copyright © 2011-2012 PPCoin Developers -Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014-2015 The Memetic developers + Copyright © 2011-2012 PPCoin Developers + Copyright © 2012-2014 The NovaCoin developers + Copyright © 2015-2019 The Memetic / PepeCoin developers @@ -61,8 +61,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -76,8 +76,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address + Sign a message to prove you own a PepeCoin address @@ -91,8 +91,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -259,8 +259,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -353,8 +353,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Show information about Memetic + Show information about PepeCoin + Show information about PepeCoin @@ -393,13 +393,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Send coins to a Memetic address + Send coins to a Memetic - PepeCoin address + Send coins to a Memetic - PepeCoin address - Modify configuration options for Memetic - Modify configuration options for Memetic + Modify configuration options for Memetic - PepeCoin + Modify configuration options for Memetic - PepeCoin @@ -439,8 +439,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + Memetic / PepeCoin + Memetic / PepeCoin @@ -449,8 +449,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - &About Memetic + &About PepeCoin + &About PepeCoin @@ -501,15 +501,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Memetic client + PepeCoin client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network - %n active connection to Memetic network - %n active connections to Memetic network + %n active connection to PepeCoin network + %n active connections to PepeCoin network @@ -604,8 +604,8 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -745,8 +745,8 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1065,8 +1065,8 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. + The entered address "%1" is not a valid PepeCoin address. @@ -1084,8 +1084,8 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1157,13 +1157,13 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login - &Start Memetic on system login + &Start PepeCoin on system login + &Start PepeCoin on system login @@ -1172,8 +1172,8 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1182,8 +1182,8 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1257,8 +1257,8 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1324,8 +1324,8 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. + This setting will take effect after restarting PepeCoin. @@ -1343,8 +1343,8 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1417,7 +1417,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1585,8 +1585,8 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1605,13 +1605,13 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window - Memetic - Debug window + PepeCoin - Debug window + PepeCoin - Debug window - Memetic Core - Memetic Core + PepeCoin Core + PepeCoin Core @@ -1620,8 +1620,8 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1630,8 +1630,8 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. + Welcome to the PepeCoin RPC console. @@ -1739,8 +1739,8 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE / MEME + 123.456 PEPE / MEME {0.00 ?} @@ -1809,8 +1809,8 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME - 123.456 MEME + 123.456 PEPE / MEME + 123.456 PEPE / MEME @@ -1824,8 +1824,8 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a Memetic - PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a Memetic - PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1924,7 +1924,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1998,8 +1998,8 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a Memetic - PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a Memetic - PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2059,8 +2059,8 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address + Sign the message to prove you own this PepeCoin address @@ -2091,8 +2091,8 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2102,8 +2102,8 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2112,8 +2112,8 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature - Enter Memetic signature + Enter PepeCoin signature + Enter PepeCoin signature @@ -2703,8 +2703,8 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version - Memetic version + PepeCoin /Memetic version + PepeCoin /Memetic version @@ -2713,8 +2713,8 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd - Send command to -server or memeticd + Send command to -server or pepecoind + Send command to -server or pepecoind @@ -2733,13 +2733,13 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) + Specify pid file (default: pepecoind.pid) @@ -2756,13 +2756,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2868,8 +2868,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3169,7 +3169,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3234,13 +3234,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3304,8 +3304,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3344,7 +3344,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_eo.ts b/src/qt/locale/bitcoin_eo.ts index 7bef2c9a..70003e2e 100644 --- a/src/qt/locale/bitcoin_eo.ts +++ b/src/qt/locale/bitcoin_eo.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Adreso: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Adreso: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2035,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2697,12 +2697,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2720,13 +2720,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2832,7 +2832,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3138,7 +3138,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3203,12 +3203,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3273,7 +3273,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3313,7 +3313,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_es.qm b/src/qt/locale/bitcoin_es.qm index 71c8ab5d..dcdf0d2e 100644 Binary files a/src/qt/locale/bitcoin_es.qm and b/src/qt/locale/bitcoin_es.qm differ diff --git a/src/qt/locale/bitcoin_es.ts b/src/qt/locale/bitcoin_es.ts index 94ce6a7a..40cd6bb3 100644 --- a/src/qt/locale/bitcoin_es.ts +++ b/src/qt/locale/bitcoin_es.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - Acerca de Memetic + About PepeCoin + Acerca de PepeCoin - <b>Memetic</b> version - <b>Memetic</b> versión + <b>PepeCoin</b> version + <b>PepeCoin</b> versión Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -60,8 +60,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Estas son las direcciones de Memetic para recibir pagos. Es posible que desee dar una diferente a cada remitente para que pueda realizar un seguimiento de quien te está pagando. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Estas son las direcciones de PepeCoin para recibir pagos. Es posible que desee dar una diferente a cada remitente para que pueda realizar un seguimiento de quien te está pagando. @@ -75,8 +75,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Firmar un mensaje para demostrar que es dueño de su dirección de Memetic + Sign a message to prove you own a PepeCoin address + Firmar un mensaje para demostrar que es dueño de su dirección de PepeCoin @@ -90,8 +90,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Verifique el mensaje para asegurarse que fue firmado por una dirección específica de Memetic + Verify a message to ensure it was signed with a specified PepeCoin address + Verifique el mensaje para asegurarse que fue firmado por una dirección específica de PepeCoin @@ -258,8 +258,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Memetic cerrará para terminar el proceso de encriptación. Recuerde que la encriptación de su monedero no puede proteger completamente que sus monedas sean robadas por malware infectando su computadora. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin cerrará para terminar el proceso de encriptación. Recuerde que la encriptación de su monedero no puede proteger completamente que sus monedas sean robadas por malware infectando su computadora. @@ -352,8 +352,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Mostrar información sobre Memetic + Show information about PepeCoin + Mostrar información sobre PepeCoin @@ -392,13 +392,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Enviar monedas a una dirección de Memetic + Send coins to a PepeCoin address + Enviar monedas a una dirección de PepeCoin - Modify configuration options for Memetic - Modificar las opciones de configuración para Memetic + Modify configuration options for PepeCoin + Modificar las opciones de configuración para PepeCoin @@ -438,8 +438,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -448,8 +448,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - Acerca de Memetic + &About PepeCoin + Acerca de PepeCoin @@ -500,13 +500,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Cliente Memetic + PepeCoin client + Cliente PepeCoin - %n active connection(s) to Memetic network - %n conexión activa a la red Memetic%n conexiones activas a la red Memetic + %n active connection(s) to PepeCoin network + %n conexión activa a la red PepeCoin%n conexiones activas a la red PepeCoin @@ -600,8 +600,8 @@ Dirección: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - URI no se puede analizar! Esto puede ser causado por una dirección de Memetic no válida o parámetros de URI malformados. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + URI no se puede analizar! Esto puede ser causado por una dirección de PepeCoin no válida o parámetros de URI malformados. @@ -723,8 +723,8 @@ Dirección: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - Se ha producido un error fatal. Memetic ya no puede continuar de forma segura y cerrará. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + Se ha producido un error fatal. PepeCoin ya no puede continuar de forma segura y cerrará. @@ -1057,8 +1057,8 @@ Esto significa que se requiere una cuota de al menos %2. - The entered address "%1" is not a valid Memetic address. - La dirección introducida "%1" no es una dirección válida de Memetic. + The entered address "%1" is not a valid PepeCoin address. + La dirección introducida "%1" no es una dirección válida de PepeCoin. @@ -1076,8 +1076,8 @@ Esto significa que se requiere una cuota de al menos %2. - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1149,13 +1149,13 @@ Esto significa que se requiere una cuota de al menos %2. - Automatically start Memetic after logging in to the system. - Iniciar Memetic automáticamente después de entrar en el sistema. + Automatically start PepeCoin after logging in to the system. + Iniciar PepeCoin automáticamente después de entrar en el sistema. - &Start Memetic on system login - &Iniciar Memetic al inicio del sistema + &Start PepeCoin on system login + &Iniciar PepeCoin al inicio del sistema @@ -1164,8 +1164,8 @@ Esto significa que se requiere una cuota de al menos %2. - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Abrir automáticamente el puerto de cliente Memetic en el router. Esto sólo funciona cuando el router es compatible con UPnP y está habilitado. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Abrir automáticamente el puerto de cliente PepeCoin en el router. Esto sólo funciona cuando el router es compatible con UPnP y está habilitado. @@ -1174,8 +1174,8 @@ Esto significa que se requiere una cuota de al menos %2. - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Conéctese a la red de Memetic a través de un SOCKS proxy (e.g. cuando se conecta a través de Tor) + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + Conéctese a la red de PepeCoin a través de un SOCKS proxy (e.g. cuando se conecta a través de Tor) @@ -1249,8 +1249,8 @@ Esto significa que se requiere una cuota de al menos %2. - The user interface language can be set here. This setting will take effect after restarting Memetic. - El idioma del interfaz de usuario se puede configurar aquí. Esta configuración se aplicará después de reiniciar Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + El idioma del interfaz de usuario se puede configurar aquí. Esta configuración se aplicará después de reiniciar PepeCoin. @@ -1316,8 +1316,8 @@ Esto significa que se requiere una cuota de al menos %2. - This setting will take effect after restarting Memetic. - Esta configuración se aplicará después de reiniciar Memetic. + This setting will take effect after restarting PepeCoin. + Esta configuración se aplicará después de reiniciar PepeCoin. @@ -1335,8 +1335,8 @@ Esto significa que se requiere una cuota de al menos %2. - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - La información mostrada puede estar fuera de fecha. Su monedera se sincroniza automáticamente con la red Memetic después de que se establece una conexión, pero este proceso no se ha completado todavía. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + La información mostrada puede estar fuera de fecha. Su monedera se sincroniza automáticamente con la red PepeCoin después de que se establece una conexión, pero este proceso no se ha completado todavía. @@ -1409,7 +1409,7 @@ Esto significa que se requiere una cuota de al menos %2. PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1577,8 +1577,8 @@ Esto significa que se requiere una cuota de al menos %2. - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Mostrar el mensaje de ayuda de memetic-Qt para obtener una lista con las posibles opciones de línea de comandos para Memetic. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Mostrar el mensaje de ayuda de pepecoin-Qt para obtener una lista con las posibles opciones de línea de comandos para PepeCoin. @@ -1597,13 +1597,13 @@ Esto significa que se requiere una cuota de al menos %2. - Memetic - Debug window - Memetic - Ventana de depuración + PepeCoin - Debug window + PepeCoin - Ventana de depuración - Memetic Core - Núcleo Memetic + PepeCoin Core + Núcleo PepeCoin @@ -1612,8 +1612,8 @@ Esto significa que se requiere una cuota de al menos %2. - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Abre el archivo de registro de Memetic del directorio de datos actual. Esto puede tardar algunos segundos para archivos grandes. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + Abre el archivo de registro de PepeCoin del directorio de datos actual. Esto puede tardar algunos segundos para archivos grandes. @@ -1622,8 +1622,8 @@ Esto significa que se requiere una cuota de al menos %2. - Welcome to the Memetic RPC console. - Bienvenido a la consola RPC de Memetic + Welcome to the PepeCoin RPC console. + Bienvenido a la consola RPC de PepeCoin @@ -1731,8 +1731,8 @@ Esto significa que se requiere una cuota de al menos %2. - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1801,8 +1801,8 @@ Esto significa que se requiere una cuota de al menos %2. - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1816,8 +1816,8 @@ Esto significa que se requiere una cuota de al menos %2. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Introduce una dirección Memetic (p.ej. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Introduce una dirección PepeCoin (p.ej. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1916,8 +1916,8 @@ Esto significa que se requiere una cuota de al menos %2. - WARNING: Invalid Memetic address - ADVERTENCIA: Dirección Memetic inválida + WARNING: Invalid PepeCoin address + ADVERTENCIA: Dirección PepeCoin inválida @@ -1990,8 +1990,8 @@ Esto significa que se requiere una cuota de al menos %2. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Introduce una dirección Memetic (p.ej. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Introduce una dirección PepeCoin (p.ej. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2051,8 +2051,8 @@ Esto significa que se requiere una cuota de al menos %2. - Sign the message to prove you own this Memetic address - Firma el mensaje para demostrar que posees esta dirección Memetic. + Sign the message to prove you own this PepeCoin address + Firma el mensaje para demostrar que posees esta dirección PepeCoin. @@ -2083,8 +2083,8 @@ Esto significa que se requiere una cuota de al menos %2. - Verify the message to ensure it was signed with the specified Memetic address - Verifique el mensaje para asegurarse de que se firmó con la dirección Memetic especificada. + Verify the message to ensure it was signed with the specified PepeCoin address + Verifique el mensaje para asegurarse de que se firmó con la dirección PepeCoin especificada. @@ -2094,8 +2094,8 @@ Esto significa que se requiere una cuota de al menos %2. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Introduce una dirección Memetic (p.ej B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Introduce una dirección PepeCoin (p.ej B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2104,8 +2104,8 @@ Esto significa que se requiere una cuota de al menos %2. - Enter Memetic signature - Introduce la firma Memetic + Enter PepeCoin signature + Introduce la firma PepeCoin @@ -2683,8 +2683,8 @@ Esto significa que se requiere una cuota de al menos %2. bitcoin-core - Memetic version - versión Memetic + PepeCoin version + versión PepeCoin @@ -2693,8 +2693,8 @@ Esto significa que se requiere una cuota de al menos %2. - Send command to -server or memeticd - Envía un comando a -server o memeticd + Send command to -server or pepecoind + Envía un comando a -server o pepecoind @@ -2716,13 +2716,13 @@ Esto significa que se requiere una cuota de al menos %2. - Specify configuration file (default: memetic.conf) - Especifica un archivo de configuración (por defecto: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Especifica un archivo de configuración (por defecto: pepecoin.conf) - Specify pid file (default: memeticd.pid) - Especifica un archivo pid (por defecto: memeticd.pid) + Specify pid file (default: pepecoind.pid) + Especifica un archivo pid (por defecto: pepecoind.pid) @@ -2739,13 +2739,13 @@ Esto significa que se requiere una cuota de al menos %2. %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2854,8 +2854,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Advertencia: Verifique que la fecha y hora del equipo sean correctas! Si su reloj es erróneo Memetic no funcionará correctamente. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Advertencia: Verifique que la fecha y hora del equipo sean correctas! Si su reloj es erróneo PepeCoin no funcionará correctamente. @@ -3168,7 +3168,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3234,13 +3234,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - Error cargando wallet.dat: El monedero requiere una nueva versión de Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Error cargando wallet.dat: El monedero requiere una nueva versión de PepeCoin - Wallet needed to be rewritten: restart Memetic to complete - El monedero necesita ser reescrito: reinicie Memetic para completar + Wallet needed to be rewritten: restart PepeCoin to complete + El monedero necesita ser reescrito: reinicie PepeCoin para completar @@ -3304,8 +3304,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. - No se puede enlazar a %s en este equipo. Memetic probablemente ya esté en funcionamiento. + Unable to bind to %s on this computer. PepeCoin is probably already running. + No se puede enlazar a %s en este equipo. PepeCoin probablemente ya esté en funcionamiento. @@ -3344,7 +3344,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_es_CL.ts b/src/qt/locale/bitcoin_es_CL.ts index 377f4fc0..c2277c86 100644 --- a/src/qt/locale/bitcoin_es_CL.ts +++ b/src/qt/locale/bitcoin_es_CL.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -597,7 +597,7 @@ Dirección: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -720,7 +720,7 @@ Dirección: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1040,7 +1040,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1059,7 +1059,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1132,12 +1132,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1147,7 +1147,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1157,7 +1157,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1232,7 +1232,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1299,7 +1299,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1318,7 +1318,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1392,7 +1392,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1560,7 +1560,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1580,12 +1580,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1595,7 +1595,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1605,7 +1605,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1714,7 +1714,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1784,7 +1784,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1799,7 +1799,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1899,7 +1899,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1973,7 +1973,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2034,7 +2034,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2066,7 +2066,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2077,7 +2077,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2087,7 +2087,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2666,7 +2666,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2676,7 +2676,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2699,12 +2699,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2723,13 +2723,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2838,7 +2838,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3154,7 +3154,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3221,12 +3221,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3291,7 +3291,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3331,7 +3331,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_es_DO.ts b/src/qt/locale/bitcoin_es_DO.ts index 4af265ab..d7acc678 100644 --- a/src/qt/locale/bitcoin_es_DO.ts +++ b/src/qt/locale/bitcoin_es_DO.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Dirección: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Dirección: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2035,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2700,12 +2700,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2723,13 +2723,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2838,7 +2838,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3152,7 +3152,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3218,12 +3218,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3288,7 +3288,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3328,7 +3328,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_es_MX.ts b/src/qt/locale/bitcoin_es_MX.ts index 98ab05e1..6e229ef5 100644 --- a/src/qt/locale/bitcoin_es_MX.ts +++ b/src/qt/locale/bitcoin_es_MX.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_es_UY.ts b/src/qt/locale/bitcoin_es_UY.ts index a04d547b..30be0017 100644 --- a/src/qt/locale/bitcoin_es_UY.ts +++ b/src/qt/locale/bitcoin_es_UY.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_et.qm b/src/qt/locale/bitcoin_et.qm index 423308d6..6b5a1acf 100644 Binary files a/src/qt/locale/bitcoin_et.qm and b/src/qt/locale/bitcoin_et.qm differ diff --git a/src/qt/locale/bitcoin_et.ts b/src/qt/locale/bitcoin_et.ts index 56034201..2b3bf6ad 100644 --- a/src/qt/locale/bitcoin_et.ts +++ b/src/qt/locale/bitcoin_et.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic - Info Memetic'i kohta + About PepeCoin + Info PepeCoin'i kohta - <b>Memetic</b> version - <b>Memetic</b>'i versioon + <b>PepeCoin</b> version + <b>PepeCoin</b>'i versioon Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,8 +58,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Need on Sinu Memetic'i aadressid maksete vastuvõtmiseks. Soovi korral saad anda igale saatjale eraldi aadressi, et hõlpsamini omada ülevaadet, et kellelt mündid laekuvad. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Need on Sinu PepeCoin'i aadressid maksete vastuvõtmiseks. Soovi korral saad anda igale saatjale eraldi aadressi, et hõlpsamini omada ülevaadet, et kellelt mündid laekuvad. @@ -73,8 +73,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Allkirjasta sõnum Memetic'i aadressi omamise tõestamiseks. + Sign a message to prove you own a PepeCoin address + Allkirjasta sõnum PepeCoin'i aadressi omamise tõestamiseks. @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -597,7 +597,7 @@ Aadress: %4⏎ - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -720,7 +720,7 @@ Aadress: %4⏎ - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1040,7 +1040,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1059,7 +1059,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1132,12 +1132,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1147,7 +1147,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1157,7 +1157,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1232,7 +1232,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1299,7 +1299,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1318,7 +1318,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1392,7 +1392,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1560,7 +1560,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1580,12 +1580,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1595,7 +1595,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1605,7 +1605,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1714,7 +1714,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1784,7 +1784,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1799,7 +1799,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1899,7 +1899,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1973,7 +1973,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2034,7 +2034,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2066,7 +2066,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2077,7 +2077,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2087,7 +2087,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2666,7 +2666,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2676,7 +2676,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2696,12 +2696,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2719,13 +2719,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2831,7 +2831,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3137,7 +3137,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3202,13 +3202,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - Viga faili wallet.dat laadimisel: rahakott vajab Memetic'i uuemat versiooni. + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Viga faili wallet.dat laadimisel: rahakott vajab PepeCoin'i uuemat versiooni. - Wallet needed to be rewritten: restart Memetic to complete - Rahakott on vaja üle kirjutada: käivita Memetic uuesti toimingu lõpetamiseks + Wallet needed to be rewritten: restart PepeCoin to complete + Rahakott on vaja üle kirjutada: käivita PepeCoin uuesti toimingu lõpetamiseks @@ -3272,7 +3272,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3312,7 +3312,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_eu_ES.ts b/src/qt/locale/bitcoin_eu_ES.ts index 401e86f8..acda76dd 100644 --- a/src/qt/locale/bitcoin_eu_ES.ts +++ b/src/qt/locale/bitcoin_eu_ES.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_fa.ts b/src/qt/locale/bitcoin_fa.ts index 207eeffe..e1de6914 100644 --- a/src/qt/locale/bitcoin_fa.ts +++ b/src/qt/locale/bitcoin_fa.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2035,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2697,12 +2697,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2720,13 +2720,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2832,7 +2832,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3138,7 +3138,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3203,12 +3203,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3273,7 +3273,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3313,7 +3313,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_fa_IR.ts b/src/qt/locale/bitcoin_fa_IR.ts index 49587581..b4de3a81 100644 --- a/src/qt/locale/bitcoin_fa_IR.ts +++ b/src/qt/locale/bitcoin_fa_IR.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -595,7 +595,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -718,7 +718,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1039,7 +1039,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1058,7 +1058,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1131,12 +1131,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1146,7 +1146,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1156,7 +1156,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1231,7 +1231,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1298,7 +1298,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1317,7 +1317,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1391,7 +1391,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1559,7 +1559,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1579,12 +1579,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1594,7 +1594,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1604,7 +1604,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1713,7 +1713,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1783,7 +1783,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1798,7 +1798,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1898,7 +1898,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1972,7 +1972,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2033,7 +2033,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2065,7 +2065,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2076,7 +2076,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2086,7 +2086,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2665,7 +2665,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2675,7 +2675,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2695,12 +2695,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2718,13 +2718,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2830,7 +2830,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3136,7 +3136,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3201,12 +3201,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3271,7 +3271,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3311,7 +3311,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_fi.qm b/src/qt/locale/bitcoin_fi.qm index e1763736..05e7786c 100644 Binary files a/src/qt/locale/bitcoin_fi.qm and b/src/qt/locale/bitcoin_fi.qm differ diff --git a/src/qt/locale/bitcoin_fi.ts b/src/qt/locale/bitcoin_fi.ts index e7370dbd..a9096988 100644 --- a/src/qt/locale/bitcoin_fi.ts +++ b/src/qt/locale/bitcoin_fi.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - Tietoa Memeticista + About PepeCoin + Tietoa PepeCoinista - <b>Memetic</b> version - <b>Memetic</b>-asiakasohjelman versio + <b>PepeCoin</b> version + <b>PepeCoin</b>-asiakasohjelman versio Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -66,8 +66,8 @@ Tämä tuote sisältää OpenSSL-projektin kehittämää ohjelmistoa OpenSSL-ty - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Nämä ovat memetic-osoitteesi rahansiirtojen vastaanottoa varten. Jos haluat, voit antaa jokaiselle lähettäjälle oman osoitteen jotta voit pitää kirjaa sinulle rahaa siirtäneistä henkilöistä. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Nämä ovat pepecoin-osoitteesi rahansiirtojen vastaanottoa varten. Jos haluat, voit antaa jokaiselle lähettäjälle oman osoitteen jotta voit pitää kirjaa sinulle rahaa siirtäneistä henkilöistä. @@ -81,8 +81,8 @@ Tämä tuote sisältää OpenSSL-projektin kehittämää ohjelmistoa OpenSSL-ty - Sign a message to prove you own a Memetic address - Allekirjoita viesti osoittaaksesi memetic-osoitteesi omistajuus + Sign a message to prove you own a PepeCoin address + Allekirjoita viesti osoittaaksesi pepecoin-osoitteesi omistajuus @@ -96,8 +96,8 @@ Tämä tuote sisältää OpenSSL-projektin kehittämää ohjelmistoa OpenSSL-ty - Verify a message to ensure it was signed with a specified Memetic address - Vahvista viesti varmistaaksesi että kyseinen memetic-osoitteesi on allekirjoittanut sen + Verify a message to ensure it was signed with a specified PepeCoin address + Vahvista viesti varmistaaksesi että kyseinen pepecoin-osoitteesi on allekirjoittanut sen @@ -264,8 +264,8 @@ Tämä tuote sisältää OpenSSL-projektin kehittämää ohjelmistoa OpenSSL-ty - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - memetic-ohjelma sulkee itsensä päättääkseen salauksen luonnin. Muista, että lompakon salaaminen ei täysin turvaa kolikoitasi haittaohjelmien aiheuttamien varkauksien uhalta. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + pepecoin-ohjelma sulkee itsensä päättääkseen salauksen luonnin. Muista, että lompakon salaaminen ei täysin turvaa kolikoitasi haittaohjelmien aiheuttamien varkauksien uhalta. @@ -358,8 +358,8 @@ Tämä tuote sisältää OpenSSL-projektin kehittämää ohjelmistoa OpenSSL-ty - Show information about Memetic - Näytä tietoja Memeticista + Show information about PepeCoin + Näytä tietoja PepeCoinista @@ -398,12 +398,12 @@ Tämä tuote sisältää OpenSSL-projektin kehittämää ohjelmistoa OpenSSL-ty - Send coins to a Memetic address - Lähetä varoja memetic-osoitteeseen + Send coins to a PepeCoin address + Lähetä varoja pepecoin-osoitteeseen - Modify configuration options for Memetic + Modify configuration options for PepeCoin Mukauta asiakasohjelman asetuksia @@ -444,8 +444,8 @@ Tämä tuote sisältää OpenSSL-projektin kehittämää ohjelmistoa OpenSSL-ty - Memetic - Memetic + PepeCoin + PepeCoin @@ -454,8 +454,8 @@ Tämä tuote sisältää OpenSSL-projektin kehittämää ohjelmistoa OpenSSL-ty - &About Memetic - &Tietoa Memeticista + &About PepeCoin + &Tietoa PepeCoinista @@ -506,13 +506,13 @@ Tämä tuote sisältää OpenSSL-projektin kehittämää ohjelmistoa OpenSSL-ty - Memetic client - memetic-asiakasohjelma + PepeCoin client + pepecoin-asiakasohjelma - %n active connection(s) to Memetic network - %n aktiivinen yhteys memetic-verkkoon%n aktiivista yhteyttä memetic-verkkoon + %n active connection(s) to PepeCoin network + %n aktiivinen yhteys pepecoin-verkkoon%n aktiivista yhteyttä pepecoin-verkkoon @@ -605,8 +605,8 @@ Osoite: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - URI-merkkijonoa ei voida jäsentää! Tämä voi johtua väärästä memetic-osoitteesta tai väärässä muodossa olevista URI-parametreistä. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + URI-merkkijonoa ei voida jäsentää! Tämä voi johtua väärästä pepecoin-osoitteesta tai väärässä muodossa olevista URI-parametreistä. @@ -728,8 +728,8 @@ Osoite: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - Virhe kohdattu. memetic-asiakasohjelma ei voi enää jatkaa turvallisesti ja se suljetaan. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + Virhe kohdattu. pepecoin-asiakasohjelma ei voi enää jatkaa turvallisesti ja se suljetaan. @@ -1062,8 +1062,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - The entered address "%1" is not a valid Memetic address. - Syöttämäsi osoite "%1" ei ole hyväksytty memetic-osoite. + The entered address "%1" is not a valid PepeCoin address. + Syöttämäsi osoite "%1" ei ole hyväksytty pepecoin-osoite. @@ -1081,8 +1081,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1154,13 +1154,13 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Automatically start Memetic after logging in to the system. - Käynnistä memetic-asiakasohjelma automaattisesti kun olet kirjautunut järjestelmään. + Automatically start PepeCoin after logging in to the system. + Käynnistä pepecoin-asiakasohjelma automaattisesti kun olet kirjautunut järjestelmään. - &Start Memetic on system login - %Käynnistä memetic-asiakasohjelma kirjautuessasi + &Start PepeCoin on system login + %Käynnistä pepecoin-asiakasohjelma kirjautuessasi @@ -1169,8 +1169,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Avaa memetic-asiakkaalle automaattisesti portti reitittimestä. Tämä toimii vain, kun reitittimesi tukee UPnP:tä ja se on aktivoituna. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Avaa pepecoin-asiakkaalle automaattisesti portti reitittimestä. Tämä toimii vain, kun reitittimesi tukee UPnP:tä ja se on aktivoituna. @@ -1179,8 +1179,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Yhdistä memetic-verkkoon SOCKS-välityspalvelimen lävitse. (esim. yhdistettäessä Tor:n kautta). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + Yhdistä pepecoin-verkkoon SOCKS-välityspalvelimen lävitse. (esim. yhdistettäessä Tor:n kautta). @@ -1254,8 +1254,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - The user interface language can be set here. This setting will take effect after restarting Memetic. - Käyttöliittymän kieli voidaan valita tästä. Tämä asetus tulee voimaan vasta memetic-asiakasohjelman uudelleenkäynnistyksen jälkeen. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + Käyttöliittymän kieli voidaan valita tästä. Tämä asetus tulee voimaan vasta pepecoin-asiakasohjelman uudelleenkäynnistyksen jälkeen. @@ -1321,8 +1321,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - This setting will take effect after restarting Memetic. - Tämä asetus tulee voimaan vasta memetic-asiakasohjelman uudelleenkäynnistyksen jälkeen. + This setting will take effect after restarting PepeCoin. + Tämä asetus tulee voimaan vasta pepecoin-asiakasohjelman uudelleenkäynnistyksen jälkeen. @@ -1340,8 +1340,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - Näytettävät tiedot voivat olla vanhentuneet. Lompakkosi synkronoituu automaattisesti memetic-verkon kanssa kun yhteys on muodostettu, mutta tätä prosessia ei ole viety vielä päätökseen. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + Näytettävät tiedot voivat olla vanhentuneet. Lompakkosi synkronoituu automaattisesti pepecoin-verkon kanssa kun yhteys on muodostettu, mutta tätä prosessia ei ole viety vielä päätökseen. @@ -1414,7 +1414,7 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1582,8 +1582,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Näytä memetic-Qt:n avustusohje saadaksesi listan käytettävistä Memeticin komentokehotteen määritteistä. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Näytä pepecoin-Qt:n avustusohje saadaksesi listan käytettävistä PepeCoinin komentokehotteen määritteistä. @@ -1602,13 +1602,13 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Memetic - Debug window - Memetic - Debug-ikkuna + PepeCoin - Debug window + PepeCoin - Debug-ikkuna - Memetic Core - Memeticin ydin + PepeCoin Core + PepeCoinin ydin @@ -1617,8 +1617,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Avaa memetic-asiakasohjelman debug-lokitiedosto nykyisestä hakemistostaan. Tämä voi kestää muutaman sekunnin avattaessa suuria lokitiedostoja. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + Avaa pepecoin-asiakasohjelman debug-lokitiedosto nykyisestä hakemistostaan. Tämä voi kestää muutaman sekunnin avattaessa suuria lokitiedostoja. @@ -1627,8 +1627,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Welcome to the Memetic RPC console. - Tervetuloa Memeticin RPC-konsoliin. + Welcome to the PepeCoin RPC console. + Tervetuloa PepeCoinin RPC-konsoliin. @@ -1688,7 +1688,7 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. Send Coins - Lähetä Memeticeja + Lähetä PepeCoineja @@ -1736,8 +1736,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1806,8 +1806,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1821,8 +1821,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Syötä memetic-osoite (esim. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Syötä pepecoin-osoite (esim. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1921,8 +1921,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - WARNING: Invalid Memetic address - VAROITUS: Epäkelpo memetic-osoite + WARNING: Invalid PepeCoin address + VAROITUS: Epäkelpo pepecoin-osoite @@ -1995,8 +1995,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Syötä memetic-osoite (esim. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Syötä pepecoin-osoite (esim. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2056,8 +2056,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Sign the message to prove you own this Memetic address - Allekirjoita viesti vahvistaaksesi, että omistat tämän memetic-osoitteen + Sign the message to prove you own this PepeCoin address + Allekirjoita viesti vahvistaaksesi, että omistat tämän pepecoin-osoitteen @@ -2088,8 +2088,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Verify the message to ensure it was signed with the specified Memetic address - Vahvista viesti varmistaaksesi että se on allekirjoitettu kyseisellä memetic-osoitteella + Verify the message to ensure it was signed with the specified PepeCoin address + Vahvista viesti varmistaaksesi että se on allekirjoitettu kyseisellä pepecoin-osoitteella @@ -2099,8 +2099,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Syötä memetic-osoite (esim. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Syötä pepecoin-osoite (esim. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2109,8 +2109,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Enter Memetic signature - Syötä memetic-allekirjoitus + Enter PepeCoin signature + Syötä pepecoin-allekirjoitus @@ -2688,8 +2688,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. bitcoin-core - Memetic version - Memeticin versio + PepeCoin version + PepeCoinin versio @@ -2698,8 +2698,8 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Send command to -server or memeticd - Syötä komento kohteeseen -server tai memeticd + Send command to -server or pepecoind + Syötä komento kohteeseen -server tai pepecoind @@ -2718,13 +2718,13 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. - Specify configuration file (default: memetic.conf) - Määritä asetustiedosto (oletus: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Määritä asetustiedosto (oletus: pepecoin.conf) - Specify pid file (default: memeticd.pid) - Määritä prosessitiedosto (oletus: memetic.pid) + Specify pid file (default: pepecoind.pid) + Määritä prosessitiedosto (oletus: pepecoin.pid) @@ -2741,13 +2741,13 @@ Tämä tarkoittaa, että ainakin %2 rahansiirtopalkkio tarvitaan. %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2853,8 +2853,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Varoitus: Tarkista, että tietokoneesi aika ja päivämäärä ovat oikeassa! Jos kellosi on väärässä, Memetic ei toimi oikein. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Varoitus: Tarkista, että tietokoneesi aika ja päivämäärä ovat oikeassa! Jos kellosi on väärässä, PepeCoin ei toimi oikein. @@ -3160,8 +3160,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. - Käyttöönottotarkistus epäonnistui. memetic-asiakasohjelma suljetaan. + Initialization sanity check failed. PepeCoin is shutting down. + Käyttöönottotarkistus epäonnistui. pepecoin-asiakasohjelma suljetaan. @@ -3225,13 +3225,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - Virhe ladattaessa wallet.dat-tiedostoa: Lompakko tarvitsee uudemman version memetic-asiakasohjelmasta + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Virhe ladattaessa wallet.dat-tiedostoa: Lompakko tarvitsee uudemman version pepecoin-asiakasohjelmasta - Wallet needed to be rewritten: restart Memetic to complete - Lompakko on kirjoitettava uudelleen: käynnistä memetic-asiakasohjelma uudelleen päättääksesi toiminnon + Wallet needed to be rewritten: restart PepeCoin to complete + Lompakko on kirjoitettava uudelleen: käynnistä pepecoin-asiakasohjelma uudelleen päättääksesi toiminnon @@ -3295,8 +3295,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. - Ei voitu liittää %s tällä tietokoneella. memetic-asiakasohjelma on jo ehkä päällä. + Unable to bind to %s on this computer. PepeCoin is probably already running. + Ei voitu liittää %s tällä tietokoneella. pepecoin-asiakasohjelma on jo ehkä päällä. @@ -3335,7 +3335,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_fr.qm b/src/qt/locale/bitcoin_fr.qm index 3167df70..8a816d89 100644 Binary files a/src/qt/locale/bitcoin_fr.qm and b/src/qt/locale/bitcoin_fr.qm differ diff --git a/src/qt/locale/bitcoin_fr.ts b/src/qt/locale/bitcoin_fr.ts index 9d826129..697c2611 100644 --- a/src/qt/locale/bitcoin_fr.ts +++ b/src/qt/locale/bitcoin_fr.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - Au sujet de Memetic + About PepeCoin + Au sujet de PepeCoin - <b>Memetic</b> version - Version de <b>Memetic</b> + <b>PepeCoin</b> version + Version de <b>PepeCoin</b> Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Copyright © 2009-2014 Les développeurs Bitcoin Copyright © 2012-2014 Les développeurs NovaCoin -Copyright © 2014 Les développeurs Memetic +Copyright © 2014 Les développeurs PepeCoin @@ -60,7 +60,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. Ce sont vos adresses pour recevoir vos paiements. Vous pouvez utiliser une adresse différente pour chaque réception afin d'identifier facilement le payeur. @@ -75,8 +75,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Signer un message afin de valider l'identité de votre adresse Memetic + Sign a message to prove you own a PepeCoin address + Signer un message afin de valider l'identité de votre adresse PepeCoin @@ -90,8 +90,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Vérifier un message pour s'assurer qu'il vient d'un adresse Memetic spécifique. + Verify a message to ensure it was signed with a specified PepeCoin address + Vérifier un message pour s'assurer qu'il vient d'un adresse PepeCoin spécifique. @@ -227,7 +227,7 @@ This product includes software developed by the OpenSSL Project for use in the O Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - Avertissement : Si vous chiffrez votre portefeuille et perdez votre passphrase, vous ne pourrez <b>plus accéder à vos Memetics</b>! + Avertissement : Si vous chiffrez votre portefeuille et perdez votre passphrase, vous ne pourrez <b>plus accéder à vos PepeCoins</b>! @@ -258,8 +258,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - L'application Memetic va désormais se terminer afin de finaliser le processus de chiffrage. Merci de noter que le chiffrage du portefeuille ne garantit pas de se prémunir du vol via utilisation de malware, qui auraient pu infecter votre ordinateur. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + L'application PepeCoin va désormais se terminer afin de finaliser le processus de chiffrage. Merci de noter que le chiffrage du portefeuille ne garantit pas de se prémunir du vol via utilisation de malware, qui auraient pu infecter votre ordinateur. @@ -352,8 +352,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Afficher des informations au sujet de Memetic + Show information about PepeCoin + Afficher des informations au sujet de PepeCoin @@ -392,13 +392,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Envoyer des monnaies vers une adresse Memetic + Send coins to a PepeCoin address + Envoyer des monnaies vers une adresse PepeCoin - Modify configuration options for Memetic - Modification des options de configuration de Memetic + Modify configuration options for PepeCoin + Modification des options de configuration de PepeCoin @@ -438,8 +438,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -448,8 +448,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - &Au sujet de Memetic + &About PepeCoin + &Au sujet de PepeCoin @@ -500,13 +500,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Client Memetic + PepeCoin client + Client PepeCoin - %n active connection(s) to Memetic network - %n connexion active au réseau Memetic%n connexions actives au réseau Memetic + %n active connection(s) to PepeCoin network + %n connexion active au réseau PepeCoin%n connexions actives au réseau PepeCoin @@ -600,8 +600,8 @@ Adresse : %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - L'adresse du portefeuille Memetic n'as pas pu être correctement identifiée, car invalide ou malformée. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + L'adresse du portefeuille PepeCoin n'as pas pu être correctement identifiée, car invalide ou malformée. @@ -723,8 +723,8 @@ Adresse : %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - Une erreur fatale a été rencontrée. L'application Memetic ne peut plus être s'exécuter de façon correcte et va se terminer. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + Une erreur fatale a été rencontrée. L'application PepeCoin ne peut plus être s'exécuter de façon correcte et va se terminer. @@ -1057,8 +1057,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - The entered address "%1" is not a valid Memetic address. - L'adresse "%1" renseignée n'est pas une adresse Memetic valide. + The entered address "%1" is not a valid PepeCoin address. + L'adresse "%1" renseignée n'est pas une adresse PepeCoin valide. @@ -1076,8 +1076,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1149,13 +1149,13 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Automatically start Memetic after logging in to the system. - Démarrage automatique du client Memetic lors de la connexion au système + Automatically start PepeCoin after logging in to the system. + Démarrage automatique du client PepeCoin lors de la connexion au système - &Start Memetic on system login - &Démarrage du client Memetic à la connexion au système + &Start PepeCoin on system login + &Démarrage du client PepeCoin à la connexion au système @@ -1164,8 +1164,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Ouvrir automatiquemwnr le port client de Memetic sur le routeur. Ceci ne fonctionne que dans le cas où le support UPnP sur votre routeur existe et est actif. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Ouvrir automatiquemwnr le port client de PepeCoin sur le routeur. Ceci ne fonctionne que dans le cas où le support UPnP sur votre routeur existe et est actif. @@ -1174,8 +1174,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Connexion au réseau Memetic à travers un proxy SOCKS (e.g. Connexion via le réseau Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + Connexion au réseau PepeCoin à travers un proxy SOCKS (e.g. Connexion via le réseau Tor). @@ -1249,8 +1249,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - The user interface language can be set here. This setting will take effect after restarting Memetic. - La langue d'interface de l'utilisateur peut être définie ici. Les modification seront prises en compte après redémarrage de l'application Memetic + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + La langue d'interface de l'utilisateur peut être définie ici. Les modification seront prises en compte après redémarrage de l'application PepeCoin @@ -1316,8 +1316,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - This setting will take effect after restarting Memetic. - Les paramètres prendront effet après redémarrage du client Memetic + This setting will take effect after restarting PepeCoin. + Les paramètres prendront effet après redémarrage du client PepeCoin @@ -1335,8 +1335,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - Les informations affichées peuvent être obsolètes. Votre portefeuille se synchronise automatiquement avec le réseau Memetic mais ce processus n'est pas encore terminé. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + Les informations affichées peuvent être obsolètes. Votre portefeuille se synchronise automatiquement avec le réseau PepeCoin mais ce processus n'est pas encore terminé. @@ -1409,7 +1409,7 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires.PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1577,8 +1577,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Afficher le message d'aide memetic-Qt afin d'obtenir la liste des options de de L'outil en ligne de commande Memetic + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Afficher le message d'aide pepecoin-Qt afin d'obtenir la liste des options de de L'outil en ligne de commande PepeCoin @@ -1597,13 +1597,13 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Memetic - Debug window - Memetic - Fenêtre de déboggage + PepeCoin - Debug window + PepeCoin - Fenêtre de déboggage - Memetic Core - Memetic Core + PepeCoin Core + PepeCoin Core @@ -1612,8 +1612,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Ouvrir le fichier journal de debug Memetic au sein du répertoire courant. Cette opération peut prendre quelques secondes dans le cas de fichiers journaux volumineux. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + Ouvrir le fichier journal de debug PepeCoin au sein du répertoire courant. Cette opération peut prendre quelques secondes dans le cas de fichiers journaux volumineux. @@ -1622,8 +1622,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Welcome to the Memetic RPC console. - Bienvenue sur la console RPC de Memetic. + Welcome to the PepeCoin RPC console. + Bienvenue sur la console RPC de PepeCoin. @@ -1731,8 +1731,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1801,8 +1801,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1816,8 +1816,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Entrer une adresse Memetic (par ex: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Entrer une adresse PepeCoin (par ex: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1916,8 +1916,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - WARNING: Invalid Memetic address - AVERTISSEMENT: Adresse Memetic Invalide + WARNING: Invalid PepeCoin address + AVERTISSEMENT: Adresse PepeCoin Invalide @@ -1927,7 +1927,7 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. WARNING: unknown change address - AVERTISSEMENT: Adresse Memetic Invalide + AVERTISSEMENT: Adresse PepeCoin Invalide @@ -1990,8 +1990,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Entrer une adresse Memetic (par ex: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Entrer une adresse PepeCoin (par ex: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2015,7 +2015,7 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. The address to sign the message with (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Entrer une adresse Memetic (par ex: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Entrer une adresse PepeCoin (par ex: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2051,8 +2051,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Sign the message to prove you own this Memetic address - Signer le message afin de prouver l'identité de votre adresse Memetic + Sign the message to prove you own this PepeCoin address + Signer le message afin de prouver l'identité de votre adresse PepeCoin @@ -2083,8 +2083,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Verify the message to ensure it was signed with the specified Memetic address - Vérifiez le message afin de vous assurer qu'il provient de l'adresse Memetic spécifiée. + Verify the message to ensure it was signed with the specified PepeCoin address + Vérifiez le message afin de vous assurer qu'il provient de l'adresse PepeCoin spécifiée. @@ -2094,8 +2094,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Entrer une adresse Memetic (par ex: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Entrer une adresse PepeCoin (par ex: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2104,8 +2104,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Enter Memetic signature - Entrer une signature Memetic + Enter PepeCoin signature + Entrer une signature PepeCoin @@ -2683,8 +2683,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires.bitcoin-core - Memetic version - Version Memetic + PepeCoin version + Version PepeCoin @@ -2693,8 +2693,8 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Send command to -server or memeticd - Envoyer commande à -server ou memeticd + Send command to -server or pepecoind + Envoyer commande à -server ou pepecoind @@ -2713,13 +2713,13 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires. - Specify configuration file (default: memetic.conf) - Spécifier le fichier de configuration (par défaut: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Spécifier le fichier de configuration (par défaut: pepecoin.conf) - Specify pid file (default: memeticd.pid) - Spécifier le fichier pid (par défaut: memeticd.pid) + Specify pid file (default: pepecoind.pid) + Spécifier le fichier pid (par défaut: pepecoind.pid) @@ -2736,13 +2736,13 @@ Cela implique que des frais à hauteur d'au moins %2 seront nécessaires.%s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2848,8 +2848,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Avertissement: Veuillez vérifier la date et l'heure de votre ordinateur. Memetic ne pourra pas fonctionner correctement si l'horloge est réglée de façon incorrecte + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Avertissement: Veuillez vérifier la date et l'heure de votre ordinateur. PepeCoin ne pourra pas fonctionner correctement si l'horloge est réglée de façon incorrecte @@ -3155,7 +3155,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3220,13 +3220,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - Erreur de chargement du fichier wallet.dat: le portefeuille nécessite une version plus récente de l'application Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Erreur de chargement du fichier wallet.dat: le portefeuille nécessite une version plus récente de l'application PepeCoin - Wallet needed to be rewritten: restart Memetic to complete - Le portefeuille nécessite d'être réédité : Merci de relancer l'application Memetic + Wallet needed to be rewritten: restart PepeCoin to complete + Le portefeuille nécessite d'être réédité : Merci de relancer l'application PepeCoin @@ -3290,8 +3290,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. - Connexion au port %s impossible. L'application Memetic est probablement déjà en cours d'exécution + Unable to bind to %s on this computer. PepeCoin is probably already running. + Connexion au port %s impossible. L'application PepeCoin est probablement déjà en cours d'exécution @@ -3330,7 +3330,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_fr_CA.qm b/src/qt/locale/bitcoin_fr_CA.qm index a964a284..84db821b 100644 Binary files a/src/qt/locale/bitcoin_fr_CA.qm and b/src/qt/locale/bitcoin_fr_CA.qm differ diff --git a/src/qt/locale/bitcoin_fr_CA.ts b/src/qt/locale/bitcoin_fr_CA.ts index a751d616..54c767d3 100644 --- a/src/qt/locale/bitcoin_fr_CA.ts +++ b/src/qt/locale/bitcoin_fr_CA.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - Au sujet de Memetic + About PepeCoin + Au sujet de PepeCoin - <b>Memetic</b> version - Version de <b>Memetic</b> + <b>PepeCoin</b> version + Version de <b>PepeCoin</b> Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Copyright © 2009-2014 Les développeurs Bitcoin Copyright © 2012-2014 Les développeurs NovaCoin -Copyright © 2014 Les développeurs Memetic +Copyright © 2014 Les développeurs PepeCoin @@ -60,7 +60,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. Ce sont vos adresses pour recevoir vos paiements. Vous pouvez utiliser une adresse différente pour chaque réception afin d'identifier facilement le payeur. @@ -75,8 +75,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Signer un message afin de valider l'identité de votre adresse Memetic + Sign a message to prove you own a PepeCoin address + Signer un message afin de valider l'identité de votre adresse PepeCoin @@ -90,8 +90,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Vérifier un message pour s'assurer qu'il vient d'un adresse Memetic spécifique. + Verify a message to ensure it was signed with a specified PepeCoin address + Vérifier un message pour s'assurer qu'il vient d'un adresse PepeCoin spécifique. @@ -227,7 +227,7 @@ This product includes software developed by the OpenSSL Project for use in the O Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR COINS</b>! - ATTENTION : Si vous cryptez votre portefeuille et perdez votre passphrase, vous ne pourrez plus accéder à vos Memetics + ATTENTION : Si vous cryptez votre portefeuille et perdez votre passphrase, vous ne pourrez plus accéder à vos PepeCoins @@ -258,8 +258,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - L'application Memetic va désormais se terminer afin de finaliser le processus de cryptage. Merci de noter que le cryptage du portefeuille ne garantit pas de se prémunir du vol via l'utilisation de malware, qui auraient pu infecter votre ordinateur. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + L'application PepeCoin va désormais se terminer afin de finaliser le processus de cryptage. Merci de noter que le cryptage du portefeuille ne garantit pas de se prémunir du vol via l'utilisation de malware, qui auraient pu infecter votre ordinateur. @@ -352,8 +352,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Afficher des informations au sujet du Memetic + Show information about PepeCoin + Afficher des informations au sujet du PepeCoin @@ -392,13 +392,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Envoyer des monnaies vers une adresse Memetic + Send coins to a PepeCoin address + Envoyer des monnaies vers une adresse PepeCoin - Modify configuration options for Memetic - Modification des options de configuration de Memetic + Modify configuration options for PepeCoin + Modification des options de configuration de PepeCoin @@ -438,8 +438,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -448,8 +448,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - A propos de Memetic + &About PepeCoin + A propos de PepeCoin @@ -500,13 +500,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Client Memetic + PepeCoin client + Client PepeCoin - %n active connection(s) to Memetic network - %n connexion active au réseau Memetic%n connexions actives au réseau Memetic + %n active connection(s) to PepeCoin network + %n connexion active au réseau PepeCoin%n connexions actives au réseau PepeCoin @@ -600,8 +600,8 @@ Adresse : %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - L'adresse du portefeuille Memetic n'as pas pu être correctement identifiée, car invalide ou malformée. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + L'adresse du portefeuille PepeCoin n'as pas pu être correctement identifiée, car invalide ou malformée. @@ -723,8 +723,8 @@ Adresse : %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - Une erreur fatale a été rencontrée. L'application Memetic ne peut plus être s'exécuter de façon correcte et doit se terminer. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + Une erreur fatale a été rencontrée. L'application PepeCoin ne peut plus être s'exécuter de façon correcte et doit se terminer. @@ -1057,8 +1057,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - The entered address "%1" is not a valid Memetic address. - L'adresse "%1" renseignée n'est pas une adresse Memetic valide. + The entered address "%1" is not a valid PepeCoin address. + L'adresse "%1" renseignée n'est pas une adresse PepeCoin valide. @@ -1076,8 +1076,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1149,13 +1149,13 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Automatically start Memetic after logging in to the system. - Démarrage automatique du client Memetic lors de la connexion au système + Automatically start PepeCoin after logging in to the system. + Démarrage automatique du client PepeCoin lors de la connexion au système - &Start Memetic on system login - &Démarrage du client Memetic à la connexion au système + &Start PepeCoin on system login + &Démarrage du client PepeCoin à la connexion au système @@ -1164,8 +1164,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Ouverture automatique du port client de Memetic sur le routeur. Ceci ne fonctionne que dans le cas où le support UPnP sur votre routeur existe et est actif. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Ouverture automatique du port client de PepeCoin sur le routeur. Ceci ne fonctionne que dans le cas où le support UPnP sur votre routeur existe et est actif. @@ -1174,8 +1174,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Connexion au réseau Memetic à travers un proxy SOCKS (e.g. Connexion via le réseau Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + Connexion au réseau PepeCoin à travers un proxy SOCKS (e.g. Connexion via le réseau Tor). @@ -1249,8 +1249,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - The user interface language can be set here. This setting will take effect after restarting Memetic. - La langue d'interface de de l'utilisateur peut être définie ici. Ces modification seront effectives après redémarrage de l'application Memetic + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + La langue d'interface de de l'utilisateur peut être définie ici. Ces modification seront effectives après redémarrage de l'application PepeCoin @@ -1316,8 +1316,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - This setting will take effect after restarting Memetic. - Les paramètres prendront effet après redémarrage du client Memetic + This setting will take effect after restarting PepeCoin. + Les paramètres prendront effet après redémarrage du client PepeCoin @@ -1335,8 +1335,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - Les informations affichées peuvent être obsolètes. Votre portefeuille se synchronise automatiquement avec le réseau Memetic mais ce processus n'est pas encore terminé. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + Les informations affichées peuvent être obsolètes. Votre portefeuille se synchronise automatiquement avec le réseau PepeCoin mais ce processus n'est pas encore terminé. @@ -1409,7 +1409,7 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1577,8 +1577,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Afficher le message d'aide memetic-Qt afin d'obtenir la liste des options de de L'outil en ligne de commande Memetic + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Afficher le message d'aide pepecoin-Qt afin d'obtenir la liste des options de de L'outil en ligne de commande PepeCoin @@ -1597,13 +1597,13 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Memetic - Debug window - Memetic - Fenêtre de déboggage + PepeCoin - Debug window + PepeCoin - Fenêtre de déboggage - Memetic Core - Memetic Core + PepeCoin Core + PepeCoin Core @@ -1612,8 +1612,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Ouvrir le fichier journal de debug Memetic au sein du répertoire courant. Cette opération peut prendre quelques secondes dans le cas de fichiers journaux volumineux. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + Ouvrir le fichier journal de debug PepeCoin au sein du répertoire courant. Cette opération peut prendre quelques secondes dans le cas de fichiers journaux volumineux. @@ -1622,8 +1622,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Welcome to the Memetic RPC console. - Bienvenue sur la console Memetic RPC. + Welcome to the PepeCoin RPC console. + Bienvenue sur la console PepeCoin RPC. @@ -1731,8 +1731,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1801,8 +1801,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1816,8 +1816,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Entrer une adresse Memetic (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Entrer une adresse PepeCoin (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1916,8 +1916,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - WARNING: Invalid Memetic address - AVERTISSEMENT: Adresse Memetic Invalide + WARNING: Invalid PepeCoin address + AVERTISSEMENT: Adresse PepeCoin Invalide @@ -1927,7 +1927,7 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent WARNING: unknown change address - AVERTISSEMET: Adresse Memetic Invalide + AVERTISSEMET: Adresse PepeCoin Invalide @@ -1990,8 +1990,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Entrer une adresse Memetic (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Entrer une adresse PepeCoin (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2015,7 +2015,7 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent The address to sign the message with (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Entrer une adresse Memetic (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Entrer une adresse PepeCoin (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2051,8 +2051,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Sign the message to prove you own this Memetic address - Signer le message afin de prouver l'identité de votre adresse Memetic + Sign the message to prove you own this PepeCoin address + Signer le message afin de prouver l'identité de votre adresse PepeCoin @@ -2083,8 +2083,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Verify the message to ensure it was signed with the specified Memetic address - Vérifier un message pour s'assurer qu'il vient d'un adresse Memetic spécifique. + Verify the message to ensure it was signed with the specified PepeCoin address + Vérifier un message pour s'assurer qu'il vient d'un adresse PepeCoin spécifique. @@ -2094,8 +2094,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Entrer une adresse Memetic (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Entrer une adresse PepeCoin (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2104,8 +2104,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Enter Memetic signature - Entrer une signature Memetic + Enter PepeCoin signature + Entrer une signature PepeCoin @@ -2683,8 +2683,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent bitcoin-core - Memetic version - Version Memetic + PepeCoin version + Version PepeCoin @@ -2693,8 +2693,8 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Send command to -server or memeticd - Envoyer commande à -server ou memeticd + Send command to -server or pepecoind + Envoyer commande à -server ou pepecoind @@ -2713,13 +2713,13 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent - Specify configuration file (default: memetic.conf) - Spécifier le fichier de configuration (defaut: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Spécifier le fichier de configuration (defaut: pepecoin.conf) - Specify pid file (default: memeticd.pid) - Spécifier le fichier pid (defaut: memeticd.pid) + Specify pid file (default: pepecoind.pid) + Spécifier le fichier pid (defaut: pepecoind.pid) @@ -2737,13 +2737,13 @@ Les montants inférieurs à 0.546 fois les frais minimum de relais apparaissent %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2849,8 +2849,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Avertissement: Veuillez vérifier la date et l'heure de votre ordinateur. Memetic ne pourra pas fonctionner correctement si l'horloge est réglée de façon incorrecte + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Avertissement: Veuillez vérifier la date et l'heure de votre ordinateur. PepeCoin ne pourra pas fonctionner correctement si l'horloge est réglée de façon incorrecte @@ -3156,7 +3156,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3221,13 +3221,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - Erreur de chargement du fichier wallet.dat: le portefeuille nécessite une version plus récente de l'application Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Erreur de chargement du fichier wallet.dat: le portefeuille nécessite une version plus récente de l'application PepeCoin - Wallet needed to be rewritten: restart Memetic to complete - le portefeuille nécessite d'être réédité : Merci de relancer l'application Memetic + Wallet needed to be rewritten: restart PepeCoin to complete + le portefeuille nécessite d'être réédité : Merci de relancer l'application PepeCoin @@ -3291,8 +3291,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. - Connexion au port %s impossible. L'application Memetic est probablement déjà en cours d'exécution + Unable to bind to %s on this computer. PepeCoin is probably already running. + Connexion au port %s impossible. L'application PepeCoin est probablement déjà en cours d'exécution @@ -3331,7 +3331,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_gl.qm b/src/qt/locale/bitcoin_gl.qm index 8dbc447d..ad5fb1f0 100644 Binary files a/src/qt/locale/bitcoin_gl.qm and b/src/qt/locale/bitcoin_gl.qm differ diff --git a/src/qt/locale/bitcoin_gl.ts b/src/qt/locale/bitcoin_gl.ts index ed55412c..497d6040 100644 --- a/src/qt/locale/bitcoin_gl.ts +++ b/src/qt/locale/bitcoin_gl.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic - Acerca de Memetic + About PepeCoin + Acerca de PepeCoin - <b>Memetic</b> version - Versión <b>Memetic</b> . + <b>PepeCoin</b> version + Versión <b>PepeCoin</b> . Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,8 +58,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Estas son as túas dIreccións de Memetic para recibir os pagos. Pode que quieras asignarlle unha a cada remitente e así reconocer quen te está a pagar. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Estas son as túas dIreccións de PepeCoin para recibir os pagos. Pode que quieras asignarlle unha a cada remitente e así reconocer quen te está a pagar. @@ -73,8 +73,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Firma a mensaxe para probar que tes unha dirección Memetic + Sign a message to prove you own a PepeCoin address + Firma a mensaxe para probar que tes unha dirección PepeCoin @@ -88,8 +88,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Verifica a mensaxe para asegurar que foi asinada por unha concreta dirección de Memetic + Verify a message to ensure it was signed with a specified PepeCoin address + Verifica a mensaxe para asegurar que foi asinada por unha concreta dirección de PepeCoin @@ -256,8 +256,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Memetic pecharase agora para rematar o proceso de encriptación. Recorda que encriptar a túa carteira non te protexe na totalidade do roubo das tuas moedas por infeccións de malware no teu ordenador. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin pecharase agora para rematar o proceso de encriptación. Recorda que encriptar a túa carteira non te protexe na totalidade do roubo das tuas moedas por infeccións de malware no teu ordenador. @@ -350,8 +350,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Amosa información sobre Memetic + Show information about PepeCoin + Amosa información sobre PepeCoin @@ -390,13 +390,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Enviar moedas a unha dirección Memetic + Send coins to a PepeCoin address + Enviar moedas a unha dirección PepeCoin - Modify configuration options for Memetic - Modificar opcións de configuración para Memetic + Modify configuration options for PepeCoin + Modificar opcións de configuración para PepeCoin @@ -436,8 +436,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -446,8 +446,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - &Sobre Memetic + &About PepeCoin + &Sobre PepeCoin @@ -498,13 +498,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Cliente Memetic + PepeCoin client + Cliente PepeCoin - %n active connection(s) to Memetic network - %n conexión activa á red de Memetic%n conexións activas á red de Memetic + %n active connection(s) to PepeCoin network + %n conexión activa á red de PepeCoin%n conexións activas á red de PepeCoin @@ -598,7 +598,7 @@ Dirección: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Dirección: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,8 +1060,8 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2035,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2697,12 +2697,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2720,13 +2720,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2832,7 +2832,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3138,7 +3138,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3203,12 +3203,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3273,7 +3273,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3313,7 +3313,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_he.ts b/src/qt/locale/bitcoin_he.ts index f3cc28d5..4642ff7f 100644 --- a/src/qt/locale/bitcoin_he.ts +++ b/src/qt/locale/bitcoin_he.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -597,7 +597,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -720,7 +720,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1040,7 +1040,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1059,7 +1059,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1132,12 +1132,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1147,7 +1147,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1157,7 +1157,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1232,7 +1232,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1299,7 +1299,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1318,7 +1318,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1392,7 +1392,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1560,7 +1560,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1580,12 +1580,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1595,7 +1595,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1605,7 +1605,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1714,7 +1714,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1784,7 +1784,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1799,7 +1799,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1899,7 +1899,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1973,7 +1973,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2034,7 +2034,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2066,7 +2066,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2077,7 +2077,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2087,7 +2087,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2666,7 +2666,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2676,7 +2676,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2696,12 +2696,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2719,13 +2719,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2831,7 +2831,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3137,7 +3137,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3202,12 +3202,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3272,7 +3272,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3312,7 +3312,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_hi_IN.ts b/src/qt/locale/bitcoin_hi_IN.ts index cc44e403..276f16a2 100644 --- a/src/qt/locale/bitcoin_hi_IN.ts +++ b/src/qt/locale/bitcoin_hi_IN.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -351,7 +351,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -391,12 +391,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -437,7 +437,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -447,7 +447,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -499,12 +499,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1562,7 +1562,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1582,12 +1582,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1597,7 +1597,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1607,7 +1607,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1716,7 +1716,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1786,7 +1786,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1801,7 +1801,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1901,7 +1901,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1975,7 +1975,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2036,7 +2036,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2068,7 +2068,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2079,7 +2079,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2089,7 +2089,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2668,7 +2668,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2678,7 +2678,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2698,12 +2698,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2721,13 +2721,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2833,7 +2833,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3139,7 +3139,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3204,12 +3204,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3274,7 +3274,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3314,7 +3314,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_hr.ts b/src/qt/locale/bitcoin_hr.ts index 7716362a..baa907b3 100644 --- a/src/qt/locale/bitcoin_hr.ts +++ b/src/qt/locale/bitcoin_hr.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Adresa:%4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Adresa:%4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2035,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2697,12 +2697,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2720,13 +2720,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2832,7 +2832,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3138,7 +3138,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3203,12 +3203,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3273,7 +3273,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3313,7 +3313,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_hu.qm b/src/qt/locale/bitcoin_hu.qm index af705415..a6a8dbfa 100644 Binary files a/src/qt/locale/bitcoin_hu.qm and b/src/qt/locale/bitcoin_hu.qm differ diff --git a/src/qt/locale/bitcoin_hu.ts b/src/qt/locale/bitcoin_hu.ts index d569946e..04ec30fc 100644 --- a/src/qt/locale/bitcoin_hu.ts +++ b/src/qt/locale/bitcoin_hu.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic - A memetic-ról + About PepeCoin + A pepecoin-ról - <b>Memetic</b> version - <b>Memetic</b> verzió + <b>PepeCoin</b> version + <b>PepeCoin</b> verzió Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,8 +58,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Ezek a memetic-címeid a fizetések fogadásához. Érdemes minden küldőnek egy külön címet létrehozni, hogy könnyebben követhesd személyenként a tranzakciókat. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Ezek a pepecoin-címeid a fizetések fogadásához. Érdemes minden küldőnek egy külön címet létrehozni, hogy könnyebben követhesd személyenként a tranzakciókat. @@ -73,8 +73,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Írj alá egy üzenetet, hogy bizonyíthasd egy memetic-cím birtoklását + Sign a message to prove you own a PepeCoin address + Írj alá egy üzenetet, hogy bizonyíthasd egy pepecoin-cím birtoklását @@ -88,8 +88,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Hitelesíts egy üzenetet ahhoz, hogy bebizonyosodjon memetic-cím alapján a feladó kiléte + Verify a message to ensure it was signed with a specified PepeCoin address + Hitelesíts egy üzenetet ahhoz, hogy bebizonyosodjon pepecoin-cím alapján a feladó kiléte @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Cím: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Cím: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1975,7 +1975,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2036,7 +2036,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2068,7 +2068,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2079,7 +2079,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2089,7 +2089,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2668,7 +2668,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2678,7 +2678,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2701,12 +2701,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2725,13 +2725,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2840,7 +2840,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3155,7 +3155,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3221,12 +3221,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3291,7 +3291,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3331,7 +3331,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_id_ID.qm b/src/qt/locale/bitcoin_id_ID.qm index 174662a5..022c78fa 100644 Binary files a/src/qt/locale/bitcoin_id_ID.qm and b/src/qt/locale/bitcoin_id_ID.qm differ diff --git a/src/qt/locale/bitcoin_id_ID.ts b/src/qt/locale/bitcoin_id_ID.ts index 11cad1f7..994356d9 100644 --- a/src/qt/locale/bitcoin_id_ID.ts +++ b/src/qt/locale/bitcoin_id_ID.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - Tentang Memetic + About PepeCoin + Tentang PepeCoin - <b>Memetic</b> version - <b>Memetic</b> versi + <b>PepeCoin</b> version + <b>PepeCoin</b> versi Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Copyright © 2009-2014 para pengembang Bitcoin Copyright © 2012-2014 para pengembang NovaCoin -Copyright © 2014 para pengembang Memetic +Copyright © 2014 para pengembang PepeCoin @@ -60,8 +60,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Ini adalah alamat Memetic Anda untuk menerima pembayaran. Anda dapat memberikan alamat yang berbeda untuk setiap pengirim, sehingga Anda dapat melacak siapa yang membayar Anda. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Ini adalah alamat PepeCoin Anda untuk menerima pembayaran. Anda dapat memberikan alamat yang berbeda untuk setiap pengirim, sehingga Anda dapat melacak siapa yang membayar Anda. @@ -75,8 +75,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Masukan pesan untuk membuktikan bahwa anda telah mempunyai adress Memetic + Sign a message to prove you own a PepeCoin address + Masukan pesan untuk membuktikan bahwa anda telah mempunyai adress PepeCoin @@ -90,7 +90,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -258,8 +258,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Memetic akan ditutup untuk menyelesaikan proses enkripsi. Ingat bahwa dompet Anda tidak bisa di lindungi dengan enkripsi sepenuhny dari pencurian melalui infeksi malware di komputer Anda. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin akan ditutup untuk menyelesaikan proses enkripsi. Ingat bahwa dompet Anda tidak bisa di lindungi dengan enkripsi sepenuhny dari pencurian melalui infeksi malware di komputer Anda. @@ -352,8 +352,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Tunjukkan informasi tentang Memetic + Show information about PepeCoin + Tunjukkan informasi tentang PepeCoin @@ -392,13 +392,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Kirim koin ke alamat Memetic + Send coins to a PepeCoin address + Kirim koin ke alamat PepeCoin - Modify configuration options for Memetic - Memodifikasi opsi aturan untuk Memetic + Modify configuration options for PepeCoin + Memodifikasi opsi aturan untuk PepeCoin @@ -438,8 +438,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic (CoinHitam) + PepeCoin + PepeCoin (CoinHitam) @@ -448,8 +448,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - &Tentang Memetic + &About PepeCoin + &Tentang PepeCoin @@ -500,12 +500,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Klien Memetic + PepeCoin client + Klien PepeCoin - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -600,7 +600,7 @@ Alamat: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -723,7 +723,7 @@ Alamat: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1043,7 +1043,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1062,8 +1062,8 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1135,12 +1135,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1150,7 +1150,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1160,7 +1160,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1235,7 +1235,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1302,7 +1302,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1321,7 +1321,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1395,7 +1395,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1563,7 +1563,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1583,13 +1583,13 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core - Inti Memetic + PepeCoin Core + Inti PepeCoin @@ -1598,7 +1598,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1608,7 +1608,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1717,8 +1717,8 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1787,7 +1787,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1802,7 +1802,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1902,7 +1902,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1976,7 +1976,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2037,7 +2037,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2069,7 +2069,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2080,7 +2080,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2090,7 +2090,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2669,7 +2669,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2679,7 +2679,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2699,12 +2699,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2722,13 +2722,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2834,7 +2834,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3140,7 +3140,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3205,12 +3205,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3275,7 +3275,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3315,7 +3315,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_it.ts b/src/qt/locale/bitcoin_it.ts index da89fd6c..0ef01786 100644 --- a/src/qt/locale/bitcoin_it.ts +++ b/src/qt/locale/bitcoin_it.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -599,7 +599,7 @@ Indirizzo: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -722,7 +722,7 @@ Indirizzo: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1042,7 +1042,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1061,7 +1061,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1134,12 +1134,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1149,7 +1149,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1159,7 +1159,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1234,7 +1234,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1301,7 +1301,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1320,7 +1320,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1394,7 +1394,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1562,7 +1562,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1582,12 +1582,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1597,7 +1597,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1607,7 +1607,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1716,7 +1716,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1786,7 +1786,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1801,7 +1801,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1901,7 +1901,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1975,7 +1975,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2036,7 +2036,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2068,7 +2068,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2079,7 +2079,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2089,7 +2089,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2668,7 +2668,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2678,7 +2678,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2701,12 +2701,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2725,13 +2725,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2840,7 +2840,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3151,7 +3151,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3218,12 +3218,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3288,7 +3288,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3328,7 +3328,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_ja.qm b/src/qt/locale/bitcoin_ja.qm index 15b58e85..85d278ab 100644 Binary files a/src/qt/locale/bitcoin_ja.qm and b/src/qt/locale/bitcoin_ja.qm differ diff --git a/src/qt/locale/bitcoin_ja.ts b/src/qt/locale/bitcoin_ja.ts index 551c4254..fcdcd05e 100644 --- a/src/qt/locale/bitcoin_ja.ts +++ b/src/qt/locale/bitcoin_ja.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic + About PepeCoin ブラックコインについて - <b>Memetic</b> version + <b>PepeCoin</b> version <b>ブラックコイン</b>バージョン Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers コピーライト © 2009-2014 The Bitcoin developers コピーライト © 2012-2014 The NovaCoin developers -コピーライト © 2014 The Memetic developers +コピーライト © 2014 The PepeCoin developers @@ -60,7 +60,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. これは支払いを受けるためのブラックコインのアドレス。支払い管理をするのため、各送信者へ、それぞれのアドレスを伝えたほうがいいです。 @@ -75,7 +75,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address 所有権の証明するためのメサッジを署名する。 @@ -90,7 +90,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address 受け取ったメッセージの署名を確保のため、メッセージを確認する。 @@ -258,7 +258,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. ただいま、暗号化手順を完成するため、ブラックコインQTは閉じます。尚、ウォレットを暗号化をされたにしても、PCのウイルスから盗難防止の報償できないことを、ご理解をお願い足します。 @@ -352,7 +352,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin ブラックコインの情報を表示 @@ -392,12 +392,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address ブラックコインアドレスへコインを送る - Modify configuration options for Memetic + Modify configuration options for PepeCoin ブラックコインの設定を変化する @@ -438,7 +438,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin ブラックコイン @@ -448,7 +448,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin ブラックコインについて @@ -500,12 +500,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client ブラックコインクライアントソフトウェア - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network ブラックコインネットワークへの%n アクティブな接続 @@ -599,7 +599,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. URIのパーズができませんでした!。原因は無効なブラックコインアドレスか不正なURIパラメータ。 @@ -722,7 +722,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. 致命的エラー。安全に続きができないため、バラックコインQTは閉じます。 @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. 入力されたアドレス "%1" 、有効なブラックコインアドレスではない。 @@ -1075,7 +1075,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt ブラックコインQT @@ -1148,12 +1148,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. システムのログイン次第、自動的にブラックコインをスタート。 - &Start Memetic on system login + &Start PepeCoin on system login システムログイン次第、ブラックコインをスタート @@ -1163,7 +1163,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. 自動的にルーターでブラックコインクライエントソフトウェアのポートを開く。ルーターはUPnPのサポートあり、UPnPを有効にするならできる。 @@ -1173,7 +1173,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). ブラックコインのネットワークへSOCKSプロキシで接続する(例:TORで接続するばい) @@ -1248,7 +1248,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. ユーザのインターフェースの言語の設定です。リスタートの後、有効します。 @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. この設定はブラックコインをリスタートした後に有効する。 @@ -1334,7 +1334,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. 表示されている情報は時間遅れている。接続したら、ウォレットは自動的にブラックコインネットワークと同期しますが過程は完了してません。 @@ -1408,7 +1408,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1576,7 +1576,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. ブラックコインQTのコマンドラインのヘルプ情報を表示する。 @@ -1596,12 +1596,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window ブラックコイン:デバッグウインドウ - Memetic Core + PepeCoin Core ブラックコインコア @@ -1611,7 +1611,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. 現行のディレクトリからデバッグログファイルを開く。大きなファイルのばい、少し時間かかる。 @@ -1621,7 +1621,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. ブラックコインRPCコンソールへようこそ。 @@ -1730,8 +1730,8 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1800,8 +1800,8 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1815,7 +1815,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) ブラックコインアドレスの入力 (例;B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1915,7 +1915,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address 警告:無効なブラックコインアドレス @@ -1989,7 +1989,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) ブラックコインアドレスの入力 (例;B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2050,7 +2050,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address 所有権の証明するためこのメサッジを署名する @@ -2082,7 +2082,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address 受け取ったメッセージの署名を確保のため、メッセージを確認する。 @@ -2093,7 +2093,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) ブラックコインのアドレスを入力(例:B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2103,7 +2103,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature ブラックコインのデジタル署名を入力 @@ -2682,7 +2682,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version ブラックコインバージョン @@ -2692,8 +2692,8 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd - -server か memeticdへコマンドを送る。 + Send command to -server or pepecoind + -server か pepecoindへコマンドを送る。 @@ -2712,13 +2712,13 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) - 設定ファイルを特定する (デファルト: memetic.conf) + Specify configuration file (default: pepecoin.conf) + 設定ファイルを特定する (デファルト: pepecoin.conf) - Specify pid file (default: memeticd.pid) - pid ファイルを特定する (デフォルト: memeticd.pid) + Specify pid file (default: pepecoind.pid) + pid ファイルを特定する (デフォルト: pepecoind.pid) @@ -2735,13 +2735,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2847,7 +2847,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly.  警告:コンピュータの日付と時間を調べてください。時間ずらしかったばい、ブラックコイン QTは正しく行動しない。 @@ -3154,7 +3154,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3219,12 +3219,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin wallet.dat 読み込みエラー:  ブラックコインQTの最新バージョンが必要です - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete ウォレットのデータをリライトしなければならい:ブラックコインQTをリスタートしてください @@ -3289,7 +3289,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. このコンピューターで%sに結ぶことができなかった。ブラックコインQTは、もう発行してるでしょう。 @@ -3329,7 +3329,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_ka.ts b/src/qt/locale/bitcoin_ka.ts index dc543c8a..69fc83ee 100644 --- a/src/qt/locale/bitcoin_ka.ts +++ b/src/qt/locale/bitcoin_ka.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2035,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2697,12 +2697,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2720,13 +2720,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2832,7 +2832,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3138,7 +3138,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3203,12 +3203,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3273,7 +3273,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3313,7 +3313,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_kk_KZ.ts b/src/qt/locale/bitcoin_kk_KZ.ts index 3a7f90cc..bb02f526 100644 --- a/src/qt/locale/bitcoin_kk_KZ.ts +++ b/src/qt/locale/bitcoin_kk_KZ.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_ko_KR.ts b/src/qt/locale/bitcoin_ko_KR.ts index 8f93a6e8..08950399 100644 --- a/src/qt/locale/bitcoin_ko_KR.ts +++ b/src/qt/locale/bitcoin_ko_KR.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2035,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2697,12 +2697,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2720,13 +2720,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2832,7 +2832,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3138,7 +3138,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3203,12 +3203,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3273,7 +3273,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3313,7 +3313,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_ky.ts b/src/qt/locale/bitcoin_ky.ts index 99a50309..2e5e1aa4 100644 --- a/src/qt/locale/bitcoin_ky.ts +++ b/src/qt/locale/bitcoin_ky.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_la.ts b/src/qt/locale/bitcoin_la.ts index bfea778a..8657b23e 100644 --- a/src/qt/locale/bitcoin_la.ts +++ b/src/qt/locale/bitcoin_la.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Inscriptio: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Inscriptio: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2035,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2697,12 +2697,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2720,13 +2720,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2832,7 +2832,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3138,7 +3138,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3203,12 +3203,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3273,7 +3273,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3313,7 +3313,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_lt.ts b/src/qt/locale/bitcoin_lt.ts index 6172cc8b..9e13963b 100644 --- a/src/qt/locale/bitcoin_lt.ts +++ b/src/qt/locale/bitcoin_lt.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -597,7 +597,7 @@ Adresas: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -720,7 +720,7 @@ Adresas: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1040,7 +1040,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1059,7 +1059,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1132,12 +1132,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1147,7 +1147,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1157,7 +1157,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1232,7 +1232,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1299,7 +1299,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1318,7 +1318,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1392,7 +1392,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1560,7 +1560,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1580,12 +1580,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1595,7 +1595,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1605,7 +1605,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1714,7 +1714,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1784,7 +1784,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1799,7 +1799,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1899,7 +1899,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1973,7 +1973,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2034,7 +2034,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2066,7 +2066,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2077,7 +2077,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2087,7 +2087,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2666,7 +2666,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2676,7 +2676,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2696,12 +2696,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2719,13 +2719,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2831,7 +2831,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3137,7 +3137,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3202,12 +3202,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3272,7 +3272,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3312,7 +3312,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_lv_LV.ts b/src/qt/locale/bitcoin_lv_LV.ts index e138aad8..68a5bc47 100644 --- a/src/qt/locale/bitcoin_lv_LV.ts +++ b/src/qt/locale/bitcoin_lv_LV.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Adrese: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Adrese: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2035,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2697,12 +2697,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2720,13 +2720,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2832,7 +2832,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3138,7 +3138,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3203,12 +3203,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3273,7 +3273,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3313,7 +3313,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_ms_MY.ts b/src/qt/locale/bitcoin_ms_MY.ts index 214049a3..8ad4c678 100644 --- a/src/qt/locale/bitcoin_ms_MY.ts +++ b/src/qt/locale/bitcoin_ms_MY.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_nb.qm b/src/qt/locale/bitcoin_nb.qm index f258e76b..a769688e 100644 Binary files a/src/qt/locale/bitcoin_nb.qm and b/src/qt/locale/bitcoin_nb.qm differ diff --git a/src/qt/locale/bitcoin_nb.ts b/src/qt/locale/bitcoin_nb.ts index 6e09f564..714a752a 100644 --- a/src/qt/locale/bitcoin_nb.ts +++ b/src/qt/locale/bitcoin_nb.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - Om Memetic + About PepeCoin + Om PepeCoin - <b>Memetic</b> version - <b>Memetic</b> versjon + <b>PepeCoin</b> version + <b>PepeCoin</b> versjon Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -60,7 +60,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. Dette er adressene for å motta betalinger. Du ønsker kanskje å gi ulike adresser til hver avsender så du lettere kan holde øye med hvem som betaler deg. @@ -75,8 +75,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Signer en melding for å bevise din egen Memetic adresse. + Sign a message to prove you own a PepeCoin address + Signer en melding for å bevise din egen PepeCoin adresse. @@ -90,8 +90,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Verifiser en melding får å forsikre deg om at den er signert med en spesifikk Memetic adresse + Verify a message to ensure it was signed with a specified PepeCoin address + Verifiser en melding får å forsikre deg om at den er signert med en spesifikk PepeCoin adresse @@ -258,7 +258,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -352,8 +352,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Vis info om Memetic + Show information about PepeCoin + Vis info om PepeCoin @@ -392,13 +392,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Send coins til en Memetic adresse + Send coins to a PepeCoin address + Send coins til en PepeCoin adresse - Modify configuration options for Memetic - Endre innstillingene til Memetic + Modify configuration options for PepeCoin + Endre innstillingene til PepeCoin @@ -438,8 +438,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -448,8 +448,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - &Om Memetic + &About PepeCoin + &Om PepeCoin @@ -500,13 +500,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Memetic klient + PepeCoin client + PepeCoin klient - %n active connection(s) to Memetic network - %n aktiv tilkobling til Memetic nettverket%n aktive tilkoblinger til Memetic nettverket + %n active connection(s) to PepeCoin network + %n aktiv tilkobling til PepeCoin nettverket%n aktive tilkoblinger til PepeCoin nettverket @@ -600,7 +600,7 @@ Adresse: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -723,7 +723,7 @@ Adresse: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1045,8 +1045,8 @@ Dette betyr at det trengs en avgift på minimum %2. - The entered address "%1" is not a valid Memetic address. - Den angitte adressen "%1" er ikke en gyldig Memetic adresse. + The entered address "%1" is not a valid PepeCoin address. + Den angitte adressen "%1" er ikke en gyldig PepeCoin adresse. @@ -1064,8 +1064,8 @@ Dette betyr at det trengs en avgift på minimum %2. - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1137,13 +1137,13 @@ Dette betyr at det trengs en avgift på minimum %2. - Automatically start Memetic after logging in to the system. - Start Memetic automatisk ved hver innlogging. + Automatically start PepeCoin after logging in to the system. + Start PepeCoin automatisk ved hver innlogging. - &Start Memetic on system login - &Start Memetic ved innlogging + &Start PepeCoin on system login + &Start PepeCoin ved innlogging @@ -1152,7 +1152,7 @@ Dette betyr at det trengs en avgift på minimum %2. - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1162,7 +1162,7 @@ Dette betyr at det trengs en avgift på minimum %2. - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1237,7 +1237,7 @@ Dette betyr at det trengs en avgift på minimum %2. - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1248,7 +1248,7 @@ Dette betyr at det trengs en avgift på minimum %2. Choose the default subdivision unit to show in the interface and when sending coins. - Velg standard delt enhet for visning i grensesnittet og for sending av memetics. + Velg standard delt enhet for visning i grensesnittet og for sending av pepecoins. @@ -1304,8 +1304,8 @@ Dette betyr at det trengs en avgift på minimum %2. - This setting will take effect after restarting Memetic. - Denne innstillingen vil tre i kraft etter Memetic er blitt startet på nytt. + This setting will take effect after restarting PepeCoin. + Denne innstillingen vil tre i kraft etter PepeCoin er blitt startet på nytt. @@ -1323,7 +1323,7 @@ Dette betyr at det trengs en avgift på minimum %2. - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1397,7 +1397,7 @@ Dette betyr at det trengs en avgift på minimum %2. PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1565,7 +1565,7 @@ Dette betyr at det trengs en avgift på minimum %2. - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1585,12 +1585,12 @@ Dette betyr at det trengs en avgift på minimum %2. - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1600,7 +1600,7 @@ Dette betyr at det trengs en avgift på minimum %2. - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1610,7 +1610,7 @@ Dette betyr at det trengs en avgift på minimum %2. - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1671,7 +1671,7 @@ Dette betyr at det trengs en avgift på minimum %2. Send Coins - Send Memetics + Send PepeCoins @@ -1719,8 +1719,8 @@ Dette betyr at det trengs en avgift på minimum %2. - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1789,8 +1789,8 @@ Dette betyr at det trengs en avgift på minimum %2. - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1804,7 +1804,7 @@ Dette betyr at det trengs en avgift på minimum %2. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1904,8 +1904,8 @@ Dette betyr at det trengs en avgift på minimum %2. - WARNING: Invalid Memetic address - ADVARSEL: Ugyldig Memetic adresse + WARNING: Invalid PepeCoin address + ADVARSEL: Ugyldig PepeCoin adresse @@ -1978,7 +1978,7 @@ Dette betyr at det trengs en avgift på minimum %2. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2039,7 +2039,7 @@ Dette betyr at det trengs en avgift på minimum %2. - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2071,7 +2071,7 @@ Dette betyr at det trengs en avgift på minimum %2. - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2082,7 +2082,7 @@ Dette betyr at det trengs en avgift på minimum %2. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2092,8 +2092,8 @@ Dette betyr at det trengs en avgift på minimum %2. - Enter Memetic signature - Skriv inn Memetic signatur + Enter PepeCoin signature + Skriv inn PepeCoin signatur @@ -2671,8 +2671,8 @@ Dette betyr at det trengs en avgift på minimum %2. bitcoin-core - Memetic version - Memetic versjon + PepeCoin version + PepeCoin versjon @@ -2681,7 +2681,7 @@ Dette betyr at det trengs en avgift på minimum %2. - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2701,12 +2701,12 @@ Dette betyr at det trengs en avgift på minimum %2. - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2724,13 +2724,13 @@ Dette betyr at det trengs en avgift på minimum %2. %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2836,7 +2836,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3142,7 +3142,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3207,12 +3207,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3277,7 +3277,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3317,7 +3317,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_nl.qm b/src/qt/locale/bitcoin_nl.qm index b79a0eb5..f46c2535 100644 Binary files a/src/qt/locale/bitcoin_nl.qm and b/src/qt/locale/bitcoin_nl.qm differ diff --git a/src/qt/locale/bitcoin_nl.ts b/src/qt/locale/bitcoin_nl.ts index a09175b4..21939b8c 100644 --- a/src/qt/locale/bitcoin_nl.ts +++ b/src/qt/locale/bitcoin_nl.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - Over Memetic + About PepeCoin + Over PepeCoin - <b>Memetic</b> version - <b>Memetic</b> versie + <b>PepeCoin</b> version + <b>PepeCoin</b> versie Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Copyright © 2009-2014 De Bitcoin ontwikkelaars Copyright © 2012-2014 De NovaCoin ontwikkelaars -Copyright © 2014 De Memetic ontwikkelaars +Copyright © 2014 De PepeCoin ontwikkelaars @@ -60,8 +60,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Dit zijn al jou Memetic adressen om betalingen mee te ontvangen. Je kunt iedere verzender een apart adres geven zodat je kunt volgen wie jou betaald. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Dit zijn al jou PepeCoin adressen om betalingen mee te ontvangen. Je kunt iedere verzender een apart adres geven zodat je kunt volgen wie jou betaald. @@ -75,8 +75,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Teken een bericht om te bewijzen dat je een Memetic adres bezit. + Sign a message to prove you own a PepeCoin address + Teken een bericht om te bewijzen dat je een PepeCoin adres bezit. @@ -90,8 +90,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Verifieer een bericht om zeker te zijn dat deze is ondertekend met een specifiek Memetic adres + Verify a message to ensure it was signed with a specified PepeCoin address + Verifieer een bericht om zeker te zijn dat deze is ondertekend met een specifiek PepeCoin adres @@ -258,8 +258,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Memetic zal nu sluiten om het versleutel proces te voltooien. Onthou dat het versleutelen van je portemonnee je niet volledig beschermt tegen diefstal van munten door malware op je computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin zal nu sluiten om het versleutel proces te voltooien. Onthou dat het versleutelen van je portemonnee je niet volledig beschermt tegen diefstal van munten door malware op je computer. @@ -352,8 +352,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Toon informatie over Memetic + Show information about PepeCoin + Toon informatie over PepeCoin @@ -392,13 +392,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Verstuur munten naar een Memetic adres + Send coins to a PepeCoin address + Verstuur munten naar een PepeCoin adres - Modify configuration options for Memetic - Verander configuratie opties voor Memetic + Modify configuration options for PepeCoin + Verander configuratie opties voor PepeCoin @@ -438,8 +438,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -448,8 +448,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - &Over Memetic + &About PepeCoin + &Over PepeCoin @@ -500,13 +500,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Memetic client + PepeCoin client + PepeCoin client - %n active connection(s) to Memetic network - %n actieve verbinding naar Memetic netwerk%n actieve verbindingen naar Memetic netwerk + %n active connection(s) to PepeCoin network + %n actieve verbinding naar PepeCoin netwerk%n actieve verbindingen naar PepeCoin netwerk @@ -600,8 +600,8 @@ Adres: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - URI kan niet ontleedt worden! Mogelijke oorzaken zijn een ongeldig Memetic adres of incorrecte URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + URI kan niet ontleedt worden! Mogelijke oorzaken zijn een ongeldig PepeCoin adres of incorrecte URI parameters. @@ -723,8 +723,8 @@ Adres: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - Een fatale fout . Memetic kan niet langer veilig doorgaan en sluit af. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + Een fatale fout . PepeCoin kan niet langer veilig doorgaan en sluit af. @@ -1057,8 +1057,8 @@ Dit betekend dat een fee van %2 is vereist. - The entered address "%1" is not a valid Memetic address. - Het ingevoerde adres "%1" is geen geldig Memetic adres. + The entered address "%1" is not a valid PepeCoin address. + Het ingevoerde adres "%1" is geen geldig PepeCoin adres. @@ -1076,8 +1076,8 @@ Dit betekend dat een fee van %2 is vereist. - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1149,13 +1149,13 @@ Dit betekend dat een fee van %2 is vereist. - Automatically start Memetic after logging in to the system. - Automatisch starten van Memetic na inloggen van het systeem. + Automatically start PepeCoin after logging in to the system. + Automatisch starten van PepeCoin na inloggen van het systeem. - &Start Memetic on system login - &Start Memetic bij systeem aanmelding + &Start PepeCoin on system login + &Start PepeCoin bij systeem aanmelding @@ -1164,8 +1164,8 @@ Dit betekend dat een fee van %2 is vereist. - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - De Memetic client poort automatisch openen op de router. Dit werkt alleen wanneer uw router UPnP ondersteunt en deze is ingeschakeld. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + De PepeCoin client poort automatisch openen op de router. Dit werkt alleen wanneer uw router UPnP ondersteunt en deze is ingeschakeld. @@ -1174,8 +1174,8 @@ Dit betekend dat een fee van %2 is vereist. - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Verbinding maken met het Memetic netwerk via een SOCKS proxy (bijvoorbeeld als U gebruik maakt van Tor) + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + Verbinding maken met het PepeCoin netwerk via een SOCKS proxy (bijvoorbeeld als U gebruik maakt van Tor) @@ -1249,8 +1249,8 @@ Dit betekend dat een fee van %2 is vereist. - The user interface language can be set here. This setting will take effect after restarting Memetic. - De user interface-taal kan hier ingesteld worden. Deze instelling word toegepast na Memetic opnieuw op te starten. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + De user interface-taal kan hier ingesteld worden. Deze instelling word toegepast na PepeCoin opnieuw op te starten. @@ -1316,8 +1316,8 @@ Dit betekend dat een fee van %2 is vereist. - This setting will take effect after restarting Memetic. - Deze instelling word toegepast na een restart van Memetic. + This setting will take effect after restarting PepeCoin. + Deze instelling word toegepast na een restart van PepeCoin. @@ -1335,8 +1335,8 @@ Dit betekend dat een fee van %2 is vereist. - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - De weergegeven informatie kan verouderd zijn, Je portemonnee synchroniseerd automatisch met het Memetic netwerk nadat er verbindig is gemaakt, maar dit proces is nog niet voltooid. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + De weergegeven informatie kan verouderd zijn, Je portemonnee synchroniseerd automatisch met het PepeCoin netwerk nadat er verbindig is gemaakt, maar dit proces is nog niet voltooid. @@ -1409,7 +1409,7 @@ Dit betekend dat een fee van %2 is vereist. PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1577,8 +1577,8 @@ Dit betekend dat een fee van %2 is vereist. - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Laat het memetic-QT help bericht zien om een lijst te krijgen met mogelijke Memetic command-regel opties. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Laat het pepecoin-QT help bericht zien om een lijst te krijgen met mogelijke PepeCoin command-regel opties. @@ -1597,13 +1597,13 @@ Dit betekend dat een fee van %2 is vereist. - Memetic - Debug window - Memetic - Debugscherm + PepeCoin - Debug window + PepeCoin - Debugscherm - Memetic Core - Memetic Kern + PepeCoin Core + PepeCoin Kern @@ -1612,8 +1612,8 @@ Dit betekend dat een fee van %2 is vereist. - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Open het Memetic debug log bestand van de huidige data map. Dit kan een paar seconden duren voor grote log bestanden. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + Open het PepeCoin debug log bestand van de huidige data map. Dit kan een paar seconden duren voor grote log bestanden. @@ -1622,8 +1622,8 @@ Dit betekend dat een fee van %2 is vereist. - Welcome to the Memetic RPC console. - Welkom bij de Memetic RPC console. + Welcome to the PepeCoin RPC console. + Welkom bij de PepeCoin RPC console. @@ -1731,8 +1731,8 @@ Dit betekend dat een fee van %2 is vereist. - 0.00 MEME - 123.456 MEME + 0.00 PEPE + 123.456 PEPE @@ -1801,8 +1801,8 @@ Dit betekend dat een fee van %2 is vereist. - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1816,8 +1816,8 @@ Dit betekend dat een fee van %2 is vereist. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Voeg een Memetic adres in (bijv. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Voeg een PepeCoin adres in (bijv. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1916,8 +1916,8 @@ Dit betekend dat een fee van %2 is vereist. - WARNING: Invalid Memetic address - WAARSCHUWING: Ongeldig Memetic adres + WARNING: Invalid PepeCoin address + WAARSCHUWING: Ongeldig PepeCoin adres @@ -1990,8 +1990,8 @@ Dit betekend dat een fee van %2 is vereist. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Voeg een Memetic adres in (bijv. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Voeg een PepeCoin adres in (bijv. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2051,8 +2051,8 @@ Dit betekend dat een fee van %2 is vereist. - Sign the message to prove you own this Memetic address - Teken een bericht om te bewijzen dat je een Memetic adres bezit. + Sign the message to prove you own this PepeCoin address + Teken een bericht om te bewijzen dat je een PepeCoin adres bezit. @@ -2083,8 +2083,8 @@ Dit betekend dat een fee van %2 is vereist. - Verify the message to ensure it was signed with the specified Memetic address - Verifieer een bericht om zeker te zijn dat deze is ondertekend met een specifiek Memetic adres + Verify the message to ensure it was signed with the specified PepeCoin address + Verifieer een bericht om zeker te zijn dat deze is ondertekend met een specifiek PepeCoin adres @@ -2094,8 +2094,8 @@ Dit betekend dat een fee van %2 is vereist. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Voeg een Memetic adres in (bijv. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Voeg een PepeCoin adres in (bijv. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2104,8 +2104,8 @@ Dit betekend dat een fee van %2 is vereist. - Enter Memetic signature - Voer Memetic handtekening in + Enter PepeCoin signature + Voer PepeCoin handtekening in @@ -2683,8 +2683,8 @@ Dit betekend dat een fee van %2 is vereist. bitcoin-core - Memetic version - Memetic versie + PepeCoin version + PepeCoin versie @@ -2693,8 +2693,8 @@ Dit betekend dat een fee van %2 is vereist. - Send command to -server or memeticd - Verstuur commando naar -server of memeticd + Send command to -server or pepecoind + Verstuur commando naar -server of pepecoind @@ -2713,13 +2713,13 @@ Dit betekend dat een fee van %2 is vereist. - Specify configuration file (default: memetic.conf) - Selecteer configuratie bestand (standaard: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Selecteer configuratie bestand (standaard: pepecoin.conf) - Specify pid file (default: memeticd.pid) - Selecteer pid bestand (standaard: memetic.conf) + Specify pid file (default: pepecoind.pid) + Selecteer pid bestand (standaard: pepecoin.conf) @@ -2736,13 +2736,13 @@ Dit betekend dat een fee van %2 is vereist. %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2848,8 +2848,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Waarschuwing: Controleer of de datum en tijd van de computer juist zijn! Als uw klok verkeerd is Memetic zal niet goed werken. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Waarschuwing: Controleer of de datum en tijd van de computer juist zijn! Als uw klok verkeerd is PepeCoin zal niet goed werken. @@ -3150,7 +3150,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3215,13 +3215,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - Fout bij laden van wallet.dat: Portemonnee vereist een nieuwere versie van Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Fout bij laden van wallet.dat: Portemonnee vereist een nieuwere versie van PepeCoin - Wallet needed to be rewritten: restart Memetic to complete - Portemonnee moet herschreven worden: herstart Memetic om te voltooien + Wallet needed to be rewritten: restart PepeCoin to complete + Portemonnee moet herschreven worden: herstart PepeCoin om te voltooien @@ -3285,8 +3285,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. - Niet mogelijk om %s op deze computer. Memetic is waarschijnlijk al geopened. + Unable to bind to %s on this computer. PepeCoin is probably already running. + Niet mogelijk om %s op deze computer. PepeCoin is waarschijnlijk al geopened. @@ -3325,7 +3325,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_pam.ts b/src/qt/locale/bitcoin_pam.ts index fe0b5314..6022d104 100644 --- a/src/qt/locale/bitcoin_pam.ts +++ b/src/qt/locale/bitcoin_pam.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2035,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2697,12 +2697,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2720,13 +2720,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2832,7 +2832,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3138,7 +3138,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3203,12 +3203,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3273,7 +3273,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3313,7 +3313,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_pl.qm b/src/qt/locale/bitcoin_pl.qm index adaa7a61..8ee2deb3 100644 Binary files a/src/qt/locale/bitcoin_pl.qm and b/src/qt/locale/bitcoin_pl.qm differ diff --git a/src/qt/locale/bitcoin_pl.ts b/src/qt/locale/bitcoin_pl.ts index 4d762bc3..a130ebf5 100644 --- a/src/qt/locale/bitcoin_pl.ts +++ b/src/qt/locale/bitcoin_pl.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic - O Memetic + About PepeCoin + O PepeCoin - <b>Memetic</b> version - <b>Memetic</b> wersja + <b>PepeCoin</b> version + <b>PepeCoin</b> wersja Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. Tutaj znajdują się twoje adresy do odbierania wpłat. Możesz dodać kolejny adres dla każdego wysyłającego aby określić od kogo pochodzi wpłata. @@ -74,8 +74,8 @@ Możesz dodać kolejny adres dla każdego wysyłającego aby określić od kogo - Sign a message to prove you own a Memetic address - Podpisz wiadomość by udowodnić, że jesteś właścicielem adresu Memetic + Sign a message to prove you own a PepeCoin address + Podpisz wiadomość by udowodnić, że jesteś właścicielem adresu PepeCoin @@ -89,8 +89,8 @@ Możesz dodać kolejny adres dla każdego wysyłającego aby określić od kogo - Verify a message to ensure it was signed with a specified Memetic address - Zweryfikuj wiadomość, w celu zapewnienia, że została podpisana z określonego adresu Memetic + Verify a message to ensure it was signed with a specified PepeCoin address + Zweryfikuj wiadomość, w celu zapewnienia, że została podpisana z określonego adresu PepeCoin @@ -257,7 +257,7 @@ Możesz dodać kolejny adres dla każdego wysyłającego aby określić od kogo - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -351,8 +351,8 @@ Możesz dodać kolejny adres dla każdego wysyłającego aby określić od kogo - Show information about Memetic - Pokaż informacje dotyczące Memetic + Show information about PepeCoin + Pokaż informacje dotyczące PepeCoin @@ -391,12 +391,12 @@ Możesz dodać kolejny adres dla każdego wysyłającego aby określić od kogo - Send coins to a Memetic address - Wyślij monety na adres Memetic + Send coins to a PepeCoin address + Wyślij monety na adres PepeCoin - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -437,8 +437,8 @@ Możesz dodać kolejny adres dla każdego wysyłającego aby określić od kogo - Memetic - Memetic + PepeCoin + PepeCoin @@ -447,7 +447,7 @@ Możesz dodać kolejny adres dla każdego wysyłającego aby określić od kogo - &About Memetic + &About PepeCoin @@ -499,12 +499,12 @@ Możesz dodać kolejny adres dla każdego wysyłającego aby określić od kogo - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -599,7 +599,7 @@ Adres: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -722,7 +722,7 @@ Adres: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1042,7 +1042,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1061,7 +1061,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1134,12 +1134,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1149,7 +1149,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1159,7 +1159,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1234,7 +1234,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1301,7 +1301,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1320,7 +1320,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1394,7 +1394,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1562,7 +1562,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1582,12 +1582,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1597,7 +1597,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1607,7 +1607,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1716,7 +1716,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1786,7 +1786,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1801,7 +1801,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1901,7 +1901,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1975,7 +1975,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2036,7 +2036,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2068,7 +2068,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2079,7 +2079,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2089,7 +2089,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2668,7 +2668,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2678,7 +2678,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2698,12 +2698,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2721,13 +2721,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2833,7 +2833,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3139,7 +3139,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3204,12 +3204,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3274,7 +3274,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3314,7 +3314,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_pt_BR.qm b/src/qt/locale/bitcoin_pt_BR.qm index d97941f0..5d94ef9e 100644 Binary files a/src/qt/locale/bitcoin_pt_BR.qm and b/src/qt/locale/bitcoin_pt_BR.qm differ diff --git a/src/qt/locale/bitcoin_pt_BR.ts b/src/qt/locale/bitcoin_pt_BR.ts index 7f529900..11293dd7 100644 --- a/src/qt/locale/bitcoin_pt_BR.ts +++ b/src/qt/locale/bitcoin_pt_BR.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic - Sobre o Memetic + About PepeCoin + Sobre o PepeCoin - <b>Memetic</b> version - <b>Memetic</b> versao + <b>PepeCoin</b> version + <b>PepeCoin</b> versao Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -49,7 +49,7 @@ This product includes software developed by the OpenSSL Project for use in the O Copy the currently selected address to the system clipboard - Copie o endereço selecionado para a área de memeticência do sistema + Copie o endereço selecionado para a área de pepecoinência do sistema @@ -58,8 +58,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Estes são os seus endereços Memetic para receber pagamentos. Você pode dar um diferente a cada remetente para que você possa acompanhar quem está pagando. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Estes são os seus endereços PepeCoin para receber pagamentos. Você pode dar um diferente a cada remetente para que você possa acompanhar quem está pagando. @@ -73,8 +73,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Assine a mensagem para provar que você possui um endereço Memetic + Sign a message to prove you own a PepeCoin address + Assine a mensagem para provar que você possui um endereço PepeCoin @@ -88,8 +88,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Verifique a mensagem para garantir que ela foi assinada com um endereço Memetic específico + Verify a message to ensure it was signed with a specified PepeCoin address + Verifique a mensagem para garantir que ela foi assinada com um endereço PepeCoin específico @@ -256,8 +256,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Memetic vai fechar agora para concluir o processo de criptografia. Lembre-se que a criptografia de sua carteira não pode proteger totalmente suas moedas de serem roubados por malwares infectem seu computador. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin vai fechar agora para concluir o processo de criptografia. Lembre-se que a criptografia de sua carteira não pode proteger totalmente suas moedas de serem roubados por malwares infectem seu computador. @@ -350,8 +350,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Mostrar informações sobre o Memetic + Show information about PepeCoin + Mostrar informações sobre o PepeCoin @@ -390,13 +390,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Enviar moedas para um endereço Memetic + Send coins to a PepeCoin address + Enviar moedas para um endereço PepeCoin - Modify configuration options for Memetic - Modificar opções de configuração para Memetic + Modify configuration options for PepeCoin + Modificar opções de configuração para PepeCoin @@ -436,8 +436,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -446,8 +446,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - Sobre o Memetic + &About PepeCoin + Sobre o PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -597,7 +597,7 @@ Endereço: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -720,7 +720,7 @@ Endereço: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1040,7 +1040,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1059,7 +1059,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1132,12 +1132,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1147,7 +1147,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1157,7 +1157,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1232,7 +1232,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1299,7 +1299,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1318,7 +1318,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1392,7 +1392,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1560,7 +1560,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1580,12 +1580,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1595,7 +1595,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1605,7 +1605,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1714,7 +1714,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1784,7 +1784,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1799,7 +1799,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1899,7 +1899,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1959,7 +1959,7 @@ This label turns red, if the priority is smaller than "medium". Paste address from clipboard - Colar o endereço da área de memeticência + Colar o endereço da área de pepecoinência @@ -1973,7 +1973,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2015,7 +2015,7 @@ This label turns red, if the priority is smaller than "medium". Paste address from clipboard - Colar o endereço da área de memeticência + Colar o endereço da área de pepecoinência @@ -2030,11 +2030,11 @@ This label turns red, if the priority is smaller than "medium". Copy the current signature to the system clipboard - Copiar a assinatura para a área de memeticência do sistema + Copiar a assinatura para a área de pepecoinência do sistema - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2066,7 +2066,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2077,7 +2077,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2087,7 +2087,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2666,7 +2666,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2676,7 +2676,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2696,12 +2696,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2719,13 +2719,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2831,7 +2831,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3137,7 +3137,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3202,12 +3202,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3272,7 +3272,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3312,7 +3312,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_pt_PT.qm b/src/qt/locale/bitcoin_pt_PT.qm index da0842df..11186c0d 100644 Binary files a/src/qt/locale/bitcoin_pt_PT.qm and b/src/qt/locale/bitcoin_pt_PT.qm differ diff --git a/src/qt/locale/bitcoin_pt_PT.ts b/src/qt/locale/bitcoin_pt_PT.ts index 448b477b..e057fe8b 100644 --- a/src/qt/locale/bitcoin_pt_PT.ts +++ b/src/qt/locale/bitcoin_pt_PT.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -49,7 +49,7 @@ This product includes software developed by the OpenSSL Project for use in the O Copy the currently selected address to the system clipboard - Copie o endereço selecionado para a área de memeticência + Copie o endereço selecionado para a área de pepecoinência @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Endereço: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Endereço: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1960,7 +1960,7 @@ This label turns red, if the priority is smaller than "medium". Paste address from clipboard - Cole endereço da área de memeticência + Cole endereço da área de pepecoinência @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2016,7 +2016,7 @@ This label turns red, if the priority is smaller than "medium". Paste address from clipboard - Cole endereço da área de memeticência + Cole endereço da área de pepecoinência @@ -2031,11 +2031,11 @@ This label turns red, if the priority is smaller than "medium". Copy the current signature to the system clipboard - Copiar a assinatura actual para a área de memeticência + Copiar a assinatura actual para a área de pepecoinência - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2697,12 +2697,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2720,13 +2720,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2832,7 +2832,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3138,7 +3138,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3203,12 +3203,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3273,7 +3273,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3313,7 +3313,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_ro_RO.qm b/src/qt/locale/bitcoin_ro_RO.qm index fd9e7546..f155097f 100644 Binary files a/src/qt/locale/bitcoin_ro_RO.qm and b/src/qt/locale/bitcoin_ro_RO.qm differ diff --git a/src/qt/locale/bitcoin_ro_RO.ts b/src/qt/locale/bitcoin_ro_RO.ts index 625d006e..2809ec64 100644 --- a/src/qt/locale/bitcoin_ro_RO.ts +++ b/src/qt/locale/bitcoin_ro_RO.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - Despre Memetic + About PepeCoin + Despre PepeCoin - <b>Memetic</b> version - Versiune <b>Memetic</b> + <b>PepeCoin</b> version + Versiune <b>PepeCoin</b> Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -60,8 +60,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Acestea sunt adresele Memetic pentru a primi plăți. Poate doriți sa dați o adresa noua fiecarui expeditor pentru a putea ține evidența la cine efectuează plăti. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Acestea sunt adresele PepeCoin pentru a primi plăți. Poate doriți sa dați o adresa noua fiecarui expeditor pentru a putea ține evidența la cine efectuează plăti. @@ -75,8 +75,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Semnează un mesaj pentru a dovedi că dețineti o adresă Memetic + Sign a message to prove you own a PepeCoin address + Semnează un mesaj pentru a dovedi că dețineti o adresă PepeCoin @@ -90,8 +90,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Verifică un mesaj pentru a vă asigura că a fost semnat cu o anumită adresă Memetic + Verify a message to ensure it was signed with a specified PepeCoin address + Verifică un mesaj pentru a vă asigura că a fost semnat cu o anumită adresă PepeCoin @@ -258,8 +258,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Memetic se va inchide pentru a termina procesul de encriptie. Amintiți-vă, criptarea portofelul dumneavoastră nu poate proteja pe deplin monedele dvs. de a fi furate de infectarea cu malware a computerului. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin se va inchide pentru a termina procesul de encriptie. Amintiți-vă, criptarea portofelul dumneavoastră nu poate proteja pe deplin monedele dvs. de a fi furate de infectarea cu malware a computerului. @@ -352,8 +352,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Arată informații despre Memetic + Show information about PepeCoin + Arată informații despre PepeCoin @@ -392,13 +392,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Trimite monede către o adresă Memetic + Send coins to a PepeCoin address + Trimite monede către o adresă PepeCoin - Modify configuration options for Memetic - Modifică opțiuni de configurare pentru Memetic + Modify configuration options for PepeCoin + Modifică opțiuni de configurare pentru PepeCoin @@ -438,8 +438,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -448,8 +448,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - Despre Memetic + &About PepeCoin + Despre PepeCoin @@ -500,13 +500,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Clientul Memetic + PepeCoin client + Clientul PepeCoin - %n active connection(s) to Memetic network - %n conexiune activă la reteaua Memetic%n conexiuni active la reteaua Memetic%n conexiuni active la reteaua Memetic + %n active connection(s) to PepeCoin network + %n conexiune activă la reteaua PepeCoin%n conexiuni active la reteaua PepeCoin%n conexiuni active la reteaua PepeCoin @@ -600,8 +600,8 @@ Adresa: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - URI nu poate fi parsatt! Cauza poate fi o adresa Memetic invalidă sau parametrii URI malformați. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + URI nu poate fi parsatt! Cauza poate fi o adresa PepeCoin invalidă sau parametrii URI malformați. @@ -723,8 +723,8 @@ Adresa: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - A apărut o eroare fatală. Memetic nu mai poate continua în condiții de siguranță și va iesi. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + A apărut o eroare fatală. PepeCoin nu mai poate continua în condiții de siguranță și va iesi. @@ -1057,8 +1057,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - The entered address "%1" is not a valid Memetic address. - Adresa introdusă "%1" nu este o adresă Memetic validă + The entered address "%1" is not a valid PepeCoin address. + Adresa introdusă "%1" nu este o adresă PepeCoin validă @@ -1076,8 +1076,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1149,13 +1149,13 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Automatically start Memetic after logging in to the system. - Pornește Memetic imdiat după logarea în sistem + Automatically start PepeCoin after logging in to the system. + Pornește PepeCoin imdiat după logarea în sistem - &Start Memetic on system login - $Pornește Memetic la logarea în sistem + &Start PepeCoin on system login + $Pornește PepeCoin la logarea în sistem @@ -1164,8 +1164,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Deschide automat portul pentru cientul Memetic pe router. Aces lucru este posibil doara daca routerul suporta UPnP si este activat + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Deschide automat portul pentru cientul PepeCoin pe router. Aces lucru este posibil doara daca routerul suporta UPnP si este activat @@ -1174,8 +1174,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Conecteaza la reteaua Memetic prinr-un proxy SOCKS(ex. cand te conectezi prin Tor) + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + Conecteaza la reteaua PepeCoin prinr-un proxy SOCKS(ex. cand te conectezi prin Tor) @@ -1249,8 +1249,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - The user interface language can be set here. This setting will take effect after restarting Memetic. - Limba interfeței utilizator poate fi setat aici. Această setare va avea efect după repornirea Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + Limba interfeței utilizator poate fi setat aici. Această setare va avea efect după repornirea PepeCoin. @@ -1316,8 +1316,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - This setting will take effect after restarting Memetic. - Aceasta setare va avea efect dupa repornirea Memetic. + This setting will take effect after restarting PepeCoin. + Aceasta setare va avea efect dupa repornirea PepeCoin. @@ -1335,8 +1335,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - Informatia afisata poate fi depasita. Portofel se sincronizează automat cu rețeaua Memetic după ce se stabilește o conexiune, dar acest proces nu s-a finalizat încă. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + Informatia afisata poate fi depasita. Portofel se sincronizează automat cu rețeaua PepeCoin după ce se stabilește o conexiune, dar acest proces nu s-a finalizat încă. @@ -1409,7 +1409,7 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1577,8 +1577,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Afișa mesajul de ajutor memetic-Qt pentru a obține o listă cu posibile opțiuni de linie de comandă Memetic. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Afișa mesajul de ajutor pepecoin-Qt pentru a obține o listă cu posibile opțiuni de linie de comandă PepeCoin. @@ -1597,13 +1597,13 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Memetic - Debug window - Memetic - fereastră depanare + PepeCoin - Debug window + PepeCoin - fereastră depanare - Memetic Core - Memetic Core + PepeCoin Core + PepeCoin Core @@ -1612,8 +1612,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Deschideti fisierul de depanare Memetic din folderul curent. Acest lucru poate dura cateva secunde pentru fisiere de log mari. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + Deschideti fisierul de depanare PepeCoin din folderul curent. Acest lucru poate dura cateva secunde pentru fisiere de log mari. @@ -1622,8 +1622,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Welcome to the Memetic RPC console. - Bine ati venit la consola Memetic RPC. + Welcome to the PepeCoin RPC console. + Bine ati venit la consola PepeCoin RPC. @@ -1731,8 +1731,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1801,8 +1801,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1816,8 +1816,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Introduceți o adresă Memetic(ex:B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Introduceți o adresă PepeCoin(ex:B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1916,8 +1916,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - WARNING: Invalid Memetic address - Atenție: Adresă Memetic invalidă + WARNING: Invalid PepeCoin address + Atenție: Adresă PepeCoin invalidă @@ -1990,8 +1990,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Introduceți o adresă Memetic(ex:B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Introduceți o adresă PepeCoin(ex:B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2010,7 +2010,7 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară You can sign messages with your addresses to prove you own them. Be careful not to sign anything vague, as phishing attacks may try to trick you into signing your identity over to them. Only sign fully-detailed statements you agree to. - Puteti semna mesaje cu adresa dumneavoastra pentru a demostra ca sunteti proprietarul lor. Aveti grija sa nu semnati nimic vag, deoarece atacurile de tip phishing va pot pacali sa le memeticati identitatea. Semnati numai declaratiile detaliate cu care sunteti deacord. + Puteti semna mesaje cu adresa dumneavoastra pentru a demostra ca sunteti proprietarul lor. Aveti grija sa nu semnati nimic vag, deoarece atacurile de tip phishing va pot pacali sa le pepecoinati identitatea. Semnati numai declaratiile detaliate cu care sunteti deacord. @@ -2051,8 +2051,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Sign the message to prove you own this Memetic address - Semnează un mesaj pentru a dovedi că dețineti o adresă Memetic + Sign the message to prove you own this PepeCoin address + Semnează un mesaj pentru a dovedi că dețineti o adresă PepeCoin @@ -2083,8 +2083,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Verify the message to ensure it was signed with the specified Memetic address - Verifică un mesaj pentru a vă asigura că a fost semnat cu o anumită adresă Memetic + Verify the message to ensure it was signed with the specified PepeCoin address + Verifică un mesaj pentru a vă asigura că a fost semnat cu o anumită adresă PepeCoin @@ -2094,8 +2094,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Introduceți o adresă Memetic(ex:B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Introduceți o adresă PepeCoin(ex:B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2104,8 +2104,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Enter Memetic signature - Introduceti semnatura Memetic + Enter PepeCoin signature + Introduceti semnatura PepeCoin @@ -2683,8 +2683,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară bitcoin-core - Memetic version - Versiune Memetic + PepeCoin version + Versiune PepeCoin @@ -2693,8 +2693,8 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Send command to -server or memeticd - Trimite comanda catre server sau memeticd + Send command to -server or pepecoind + Trimite comanda catre server sau pepecoind @@ -2713,13 +2713,13 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară - Specify configuration file (default: memetic.conf) - Specifica fisier de configurare(implicit: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Specifica fisier de configurare(implicit: pepecoin.conf) - Specify pid file (default: memeticd.pid) - Speficica fisier pid(implicit: memetic.pid) + Specify pid file (default: pepecoind.pid) + Speficica fisier pid(implicit: pepecoin.pid) @@ -2736,13 +2736,13 @@ Acest lucru înseamnă că o taxă de cel puțin %2 este necesară %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2848,8 +2848,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Atentie: Va rugam verificati ca timpul si data calculatorului sunt corete. Daca timpul este gresit Memetic nu va functiona corect. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Atentie: Va rugam verificati ca timpul si data calculatorului sunt corete. Daca timpul este gresit PepeCoin nu va functiona corect. @@ -3155,7 +3155,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3220,13 +3220,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - Eroare la încărcarea wallet.dat: Portofelul necesita o versiune mai noua de Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Eroare la încărcarea wallet.dat: Portofelul necesita o versiune mai noua de PepeCoin - Wallet needed to be rewritten: restart Memetic to complete - A fost nevoie de rescrierea portofelului: restartați Memetic pentru a finaliza + Wallet needed to be rewritten: restart PepeCoin to complete + A fost nevoie de rescrierea portofelului: restartați PepeCoin pentru a finaliza @@ -3290,8 +3290,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. - Imposibil de conectat %s pe acest computer. Cel mai probabil Memetic ruleaza + Unable to bind to %s on this computer. PepeCoin is probably already running. + Imposibil de conectat %s pe acest computer. Cel mai probabil PepeCoin ruleaza @@ -3330,7 +3330,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_ru.qm b/src/qt/locale/bitcoin_ru.qm index ed6d445c..15e7c776 100644 Binary files a/src/qt/locale/bitcoin_ru.qm and b/src/qt/locale/bitcoin_ru.qm differ diff --git a/src/qt/locale/bitcoin_ru.ts b/src/qt/locale/bitcoin_ru.ts index 19314cfd..d1d55dcb 100644 --- a/src/qt/locale/bitcoin_ru.ts +++ b/src/qt/locale/bitcoin_ru.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - О Memetic + About PepeCoin + О PepeCoin - <b>Memetic</b> version - <b>Memetic</b> версия + <b>PepeCoin</b> version + <b>PepeCoin</b> версия Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Все права защищены © 2009-2014 Разработчики Bitcoin Все права защищены © 2012-2014 Разработчики NovaCoin -Все права защищены © 2014 Разработчики Memetic +Все права защищены © 2014 Разработчики PepeCoin @@ -60,7 +60,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. Это Ваши адреса для получения платежей. Вы можете дать разные адреса отправителям, чтобы отслеживать, кто именно вам платит. @@ -75,8 +75,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Подписать сообщение, чтобы доказать владение адресом Memetic + Sign a message to prove you own a PepeCoin address + Подписать сообщение, чтобы доказать владение адресом PepeCoin @@ -90,8 +90,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Проверить сообщение, чтобы убедиться, что оно было подписано указанным адресом Memetic + Verify a message to ensure it was signed with a specified PepeCoin address + Проверить сообщение, чтобы убедиться, что оно было подписано указанным адресом PepeCoin @@ -258,7 +258,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. Сейчас программа закроется для завершения процесса шифрования. Помните, что шифрование вашего бумажника не может полностью защитить ваши монеты от кражи с помощью инфицирования вашего компьютера вредоносным ПО. @@ -352,8 +352,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Показать информацию о Memetic'е + Show information about PepeCoin + Показать информацию о PepeCoin'е @@ -392,13 +392,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Отправить монеты на указанный адрес Memetic + Send coins to a PepeCoin address + Отправить монеты на указанный адрес PepeCoin - Modify configuration options for Memetic - Изменить параметры конфигурации Memetic + Modify configuration options for PepeCoin + Изменить параметры конфигурации PepeCoin @@ -438,8 +438,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -448,8 +448,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - &О Memetic + &About PepeCoin + &О PepeCoin @@ -500,12 +500,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Memetic клиент + PepeCoin client + PepeCoin клиент - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network %n активное соединение с сетью%n активных соединений с сетью%n активных соединений с сетью @@ -600,8 +600,8 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - Не удалось обработать URI! Это может быть связано с неверным адресом Memetic или неправильными параметрами URI. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + Не удалось обработать URI! Это может быть связано с неверным адресом PepeCoin или неправильными параметрами URI. @@ -723,8 +723,8 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - Произошла неисправимая ошибка. Memetic не может безопасно продолжать работу и будет закрыт. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + Произошла неисправимая ошибка. PepeCoin не может безопасно продолжать работу и будет закрыт. @@ -1043,8 +1043,8 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. - Введённый адрес "%1" не является правильным memetic-адресом. + The entered address "%1" is not a valid PepeCoin address. + Введённый адрес "%1" не является правильным pepecoin-адресом. @@ -1062,8 +1062,8 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1135,13 +1135,13 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. - Автоматически запускать Memetic после входа в систему + Automatically start PepeCoin after logging in to the system. + Автоматически запускать PepeCoin после входа в систему - &Start Memetic on system login - &Запускать Memetic при входе в систему + &Start PepeCoin on system login + &Запускать PepeCoin при входе в систему @@ -1150,8 +1150,8 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Автоматически открыть порт для memetic-клиента на роутере. Работает только если Ваш роутер поддерживает UPnP, и данная функция включена. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Автоматически открыть порт для pepecoin-клиента на роутере. Работает только если Ваш роутер поддерживает UPnP, и данная функция включена. @@ -1160,8 +1160,8 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Подключаться к сети Memetic через прокси SOCKS (например, при подключении через Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + Подключаться к сети PepeCoin через прокси SOCKS (например, при подключении через Tor). @@ -1235,8 +1235,8 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. - Здесь можно выбрать язык интерфейса. Настройки вступят в силу после перезапуска Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + Здесь можно выбрать язык интерфейса. Настройки вступят в силу после перезапуска PepeCoin. @@ -1302,8 +1302,8 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. - Эта настройка вступит в силу после перезапуска Memetic + This setting will take effect after restarting PepeCoin. + Эта настройка вступит в силу после перезапуска PepeCoin @@ -1321,8 +1321,8 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - Отображаемая информация может быть устаревшей. Ваш бумажник автоматически синхронизируется с сетью Memetic после подключения, но этот процесс пока не завершён. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + Отображаемая информация может быть устаревшей. Ваш бумажник автоматически синхронизируется с сетью PepeCoin после подключения, но этот процесс пока не завершён. @@ -1395,7 +1395,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1563,8 +1563,8 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Показать помощь по memetic-Qt, чтобы получить список доступных параметров командной строки. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Показать помощь по pepecoin-Qt, чтобы получить список доступных параметров командной строки. @@ -1583,13 +1583,13 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window - Memetic - Окно отладки + PepeCoin - Debug window + PepeCoin - Окно отладки - Memetic Core - Ядро Memetic + PepeCoin Core + Ядро PepeCoin @@ -1598,8 +1598,8 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Открыть отладочный лог-файл Memetic из текущего каталога данных. Это может занять несколько секунд для больших лог-файлов. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + Открыть отладочный лог-файл PepeCoin из текущего каталога данных. Это может занять несколько секунд для больших лог-файлов. @@ -1608,8 +1608,8 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. - Добро пожаловать в RPC-консоль Memetic. + Welcome to the PepeCoin RPC console. + Добро пожаловать в RPC-консоль PepeCoin. @@ -1717,7 +1717,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1787,8 +1787,8 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1802,8 +1802,8 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Введите memetic-адрес (например B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Введите pepecoin-адрес (например B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1902,7 +1902,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1976,8 +1976,8 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Введите memetic-адрес (например B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Введите pepecoin-адрес (например B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2037,8 +2037,8 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address - Подписать сообщение, чтобы доказать владение адресом Memetic + Sign the message to prove you own this PepeCoin address + Подписать сообщение, чтобы доказать владение адресом PepeCoin @@ -2069,8 +2069,8 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address - Проверить сообщение, чтобы убедиться, что оно было подписано указанным адресом Memetic + Verify the message to ensure it was signed with the specified PepeCoin address + Проверить сообщение, чтобы убедиться, что оно было подписано указанным адресом PepeCoin @@ -2080,8 +2080,8 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Введите адрес Memetic (напр. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Введите адрес PepeCoin (напр. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2090,8 +2090,8 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature - Введите подпись Memetic + Enter PepeCoin signature + Введите подпись PepeCoin @@ -2669,7 +2669,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version Версия @@ -2679,8 +2679,8 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd - Отправить команду на -server или memeticd + Send command to -server or pepecoind + Отправить команду на -server или pepecoind @@ -2700,13 +2700,13 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) - Указать конфигурационный файл (по умолчанию: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Указать конфигурационный файл (по умолчанию: pepecoin.conf) - Specify pid file (default: memeticd.pid) - Указать pid-файл (по умолчанию: memeticd.pid) + Specify pid file (default: pepecoind.pid) + Указать pid-файл (по умолчанию: pepecoind.pid) @@ -2723,13 +2723,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2835,8 +2835,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Внимание: убедитесь, что дата и время на Вашем компьютере выставлены верно. Если Ваши часы идут неправильно, Memetic будет работать некорректно. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Внимание: убедитесь, что дата и время на Вашем компьютере выставлены верно. Если Ваши часы идут неправильно, PepeCoin будет работать некорректно. @@ -3142,7 +3142,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3207,13 +3207,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - Ошибка загрузки wallet.dat: бумажник требует более новую версию Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Ошибка загрузки wallet.dat: бумажник требует более новую версию PepeCoin - Wallet needed to be rewritten: restart Memetic to complete - Необходимо перезаписать бумажник, перезапустите Memetic для завершения операции + Wallet needed to be rewritten: restart PepeCoin to complete + Необходимо перезаписать бумажник, перезапустите PepeCoin для завершения операции @@ -3277,8 +3277,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. - Невозможно привязаться к %s на этом компьютере. Возможно, Memetic уже работает. + Unable to bind to %s on this computer. PepeCoin is probably already running. + Невозможно привязаться к %s на этом компьютере. Возможно, PepeCoin уже работает. @@ -3317,7 +3317,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. Невозможно установить блокировку на рабочую директорию %s. Возможно, бумажник уже запущен. diff --git a/src/qt/locale/bitcoin_sah.ts b/src/qt/locale/bitcoin_sah.ts index dbc5543e..9472136a 100644 --- a/src/qt/locale/bitcoin_sah.ts +++ b/src/qt/locale/bitcoin_sah.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_sk.qm b/src/qt/locale/bitcoin_sk.qm index 20629e1f..1287e504 100644 Binary files a/src/qt/locale/bitcoin_sk.qm and b/src/qt/locale/bitcoin_sk.qm differ diff --git a/src/qt/locale/bitcoin_sk.ts b/src/qt/locale/bitcoin_sk.ts index 32fc169d..db373a33 100644 --- a/src/qt/locale/bitcoin_sk.ts +++ b/src/qt/locale/bitcoin_sk.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - O Memetice + About PepeCoin + O PepeCoine - <b>Memetic</b> version - <b>Memetic</b> verzia + <b>PepeCoin</b> version + <b>PepeCoin</b> verzia Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -65,8 +65,8 @@ Tento produkt obsahuje softvér vyvinutý projektom OpenSSL Project pre použiti - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Toto sú vaše Memetic adresy pre príjem platieb. Možno budete chcieť dať inú každému odosielateľovi, aby ste mohli sledovať, kto Vám platí. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Toto sú vaše PepeCoin adresy pre príjem platieb. Možno budete chcieť dať inú každému odosielateľovi, aby ste mohli sledovať, kto Vám platí. @@ -80,8 +80,8 @@ Tento produkt obsahuje softvér vyvinutý projektom OpenSSL Project pre použiti - Sign a message to prove you own a Memetic address - Podpísať správu ako dôkaz, že vlastníte túto Memetic adresu + Sign a message to prove you own a PepeCoin address + Podpísať správu ako dôkaz, že vlastníte túto PepeCoin adresu @@ -95,8 +95,8 @@ Tento produkt obsahuje softvér vyvinutý projektom OpenSSL Project pre použiti - Verify a message to ensure it was signed with a specified Memetic address - Overte správu, aby ste zabezpečili, že bola podpísaná s určitou Memetic adresou + Verify a message to ensure it was signed with a specified PepeCoin address + Overte správu, aby ste zabezpečili, že bola podpísaná s určitou PepeCoin adresou @@ -263,8 +263,8 @@ Tento produkt obsahuje softvér vyvinutý projektom OpenSSL Project pre použiti - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Memetic sa teraz zavrie aby dokončil proces zašifrovania. Nezabudnite, že zašifrovanie vašej peňaženky nemôže plne chrániť vaše mince pred krádežou malwarom, ktorý napadol váš počítač. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin sa teraz zavrie aby dokončil proces zašifrovania. Nezabudnite, že zašifrovanie vašej peňaženky nemôže plne chrániť vaše mince pred krádežou malwarom, ktorý napadol váš počítač. @@ -357,8 +357,8 @@ Tento produkt obsahuje softvér vyvinutý projektom OpenSSL Project pre použiti - Show information about Memetic - Zobraziť informácie o Memetic + Show information about PepeCoin + Zobraziť informácie o PepeCoin @@ -397,13 +397,13 @@ Tento produkt obsahuje softvér vyvinutý projektom OpenSSL Project pre použiti - Send coins to a Memetic address - Poslať mince na Memetic adresu + Send coins to a PepeCoin address + Poslať mince na PepeCoin adresu - Modify configuration options for Memetic - Upraviť možnosti konfigurácie pre Memetic + Modify configuration options for PepeCoin + Upraviť možnosti konfigurácie pre PepeCoin @@ -443,8 +443,8 @@ Tento produkt obsahuje softvér vyvinutý projektom OpenSSL Project pre použiti - Memetic - Memetic + PepeCoin + PepeCoin @@ -453,8 +453,8 @@ Tento produkt obsahuje softvér vyvinutý projektom OpenSSL Project pre použiti - &About Memetic - &O Memetic + &About PepeCoin + &O PepeCoin @@ -505,13 +505,13 @@ Tento produkt obsahuje softvér vyvinutý projektom OpenSSL Project pre použiti - Memetic client - Memetic klient + PepeCoin client + PepeCoin klient - %n active connection(s) to Memetic network - %n aktívne spojenie s Memetic sieťov%n aktívnych spojení s Memetic sieťov%n aktívnych spojení s Memetic sieťou + %n active connection(s) to PepeCoin network + %n aktívne spojenie s PepeCoin sieťov%n aktívnych spojení s PepeCoin sieťov%n aktívnych spojení s PepeCoin sieťou @@ -604,8 +604,8 @@ Adresa: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - URI nemožno analyzovať! Toto môže byť spôsobené neplatnou Memetic adresu alebo chybnými URI parametrami. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + URI nemožno analyzovať! Toto môže byť spôsobené neplatnou PepeCoin adresu alebo chybnými URI parametrami. @@ -727,8 +727,8 @@ Adresa: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - Došlo k závažnej chybe. Memetic už nemôže pokračovať bezpečne a bude ukončený. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + Došlo k závažnej chybe. PepeCoin už nemôže pokračovať bezpečne a bude ukončený. @@ -1061,8 +1061,8 @@ To znamená, že je potrebný poplatok aspoň %2. - The entered address "%1" is not a valid Memetic address. - Zadaná adresa "%1" nie je platnou Memetic adresou. + The entered address "%1" is not a valid PepeCoin address. + Zadaná adresa "%1" nie je platnou PepeCoin adresou. @@ -1080,8 +1080,8 @@ To znamená, že je potrebný poplatok aspoň %2. - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1153,13 +1153,13 @@ To znamená, že je potrebný poplatok aspoň %2. - Automatically start Memetic after logging in to the system. - Automaticky spustiť Memetic po prihlásení sa do systému. + Automatically start PepeCoin after logging in to the system. + Automaticky spustiť PepeCoin po prihlásení sa do systému. - &Start Memetic on system login - &Spustiť Memetic pri prihlásení do systému + &Start PepeCoin on system login + &Spustiť PepeCoin pri prihlásení do systému @@ -1168,8 +1168,8 @@ To znamená, že je potrebný poplatok aspoň %2. - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Automaticky otvoriť port klienta Memetic na routeri. To funguje iba vtedy, ak váš router podporuje UPnP a je povolené. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Automaticky otvoriť port klienta PepeCoin na routeri. To funguje iba vtedy, ak váš router podporuje UPnP a je povolené. @@ -1178,8 +1178,8 @@ To znamená, že je potrebný poplatok aspoň %2. - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Pripojenie k sieti Memetic cez SOCKS proxy server (napr. pri pripojení cez Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + Pripojenie k sieti PepeCoin cez SOCKS proxy server (napr. pri pripojení cez Tor). @@ -1253,8 +1253,8 @@ To znamená, že je potrebný poplatok aspoň %2. - The user interface language can be set here. This setting will take effect after restarting Memetic. - Tu môžete nastaviť jazyk používateľského rozhrania. Toto nastavenie sa prejaví až po reštartovaní Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + Tu môžete nastaviť jazyk používateľského rozhrania. Toto nastavenie sa prejaví až po reštartovaní PepeCoin. @@ -1320,8 +1320,8 @@ To znamená, že je potrebný poplatok aspoň %2. - This setting will take effect after restarting Memetic. - Toto nastavenie sa prejaví až po reštartovaní Memetic. + This setting will take effect after restarting PepeCoin. + Toto nastavenie sa prejaví až po reštartovaní PepeCoin. @@ -1339,8 +1339,8 @@ To znamená, že je potrebný poplatok aspoň %2. - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - Zobrazené informácie môžu byť zastaralé. Vaša peňaženka sa automaticky synchronizuje so sieťou Memetic po nadviazaní spojenia, ale tento proces nie je ešte dokončený. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + Zobrazené informácie môžu byť zastaralé. Vaša peňaženka sa automaticky synchronizuje so sieťou PepeCoin po nadviazaní spojenia, ale tento proces nie je ešte dokončený. @@ -1413,8 +1413,8 @@ To znamená, že je potrebný poplatok aspoň %2. PaymentServer - Cannot start memetic: click-to-pay handler - Memetic sa nedá spustiť: click-to-pay handler + Cannot start pepecoin: click-to-pay handler + PepeCoin sa nedá spustiť: click-to-pay handler @@ -1581,8 +1581,8 @@ To znamená, že je potrebný poplatok aspoň %2. - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Zobraziť memetic-Qt nápovedu k získaniu zoznamu pre možnosti príkazového riadku Memetic. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Zobraziť pepecoin-Qt nápovedu k získaniu zoznamu pre možnosti príkazového riadku PepeCoin. @@ -1601,13 +1601,13 @@ To znamená, že je potrebný poplatok aspoň %2. - Memetic - Debug window - Memetic - Ladiace okno + PepeCoin - Debug window + PepeCoin - Ladiace okno - Memetic Core - Jadro Memetic + PepeCoin Core + Jadro PepeCoin @@ -1616,8 +1616,8 @@ To znamená, že je potrebný poplatok aspoň %2. - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Otvorte Memetic súbor denníku ladenia z aktuálneho adresára dát. To môže trvať niekoľko sekúnd pre veľké súbory denníka. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + Otvorte PepeCoin súbor denníku ladenia z aktuálneho adresára dát. To môže trvať niekoľko sekúnd pre veľké súbory denníka. @@ -1626,8 +1626,8 @@ To znamená, že je potrebný poplatok aspoň %2. - Welcome to the Memetic RPC console. - Vitajte v konzole Memetic RPC. + Welcome to the PepeCoin RPC console. + Vitajte v konzole PepeCoin RPC. @@ -1735,8 +1735,8 @@ To znamená, že je potrebný poplatok aspoň %2. - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1805,8 +1805,8 @@ To znamená, že je potrebný poplatok aspoň %2. - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1820,8 +1820,8 @@ To znamená, že je potrebný poplatok aspoň %2. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Zadajte Memetic adresu (napr. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Zadajte PepeCoin adresu (napr. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1920,8 +1920,8 @@ To znamená, že je potrebný poplatok aspoň %2. - WARNING: Invalid Memetic address - UPOZORNENIE: Neplatná Memetic adresa + WARNING: Invalid PepeCoin address + UPOZORNENIE: Neplatná PepeCoin adresa @@ -1994,8 +1994,8 @@ To znamená, že je potrebný poplatok aspoň %2. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Zadajte Memetic adresu (napr. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Zadajte PepeCoin adresu (napr. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2055,8 +2055,8 @@ To znamená, že je potrebný poplatok aspoň %2. - Sign the message to prove you own this Memetic address - Podpísať správu ako dôkaz, že vlastníte túto Memetic adresu + Sign the message to prove you own this PepeCoin address + Podpísať správu ako dôkaz, že vlastníte túto PepeCoin adresu @@ -2087,8 +2087,8 @@ To znamená, že je potrebný poplatok aspoň %2. - Verify the message to ensure it was signed with the specified Memetic address - Overte správu, aby ste sa ubezpečili, že bola podpísaná s danou Memetic adresou + Verify the message to ensure it was signed with the specified PepeCoin address + Overte správu, aby ste sa ubezpečili, že bola podpísaná s danou PepeCoin adresou @@ -2098,8 +2098,8 @@ To znamená, že je potrebný poplatok aspoň %2. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Zadajte Memetic adresu (napr. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Zadajte PepeCoin adresu (napr. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2108,8 +2108,8 @@ To znamená, že je potrebný poplatok aspoň %2. - Enter Memetic signature - Zadajte Memetic podpis + Enter PepeCoin signature + Zadajte PepeCoin podpis @@ -2687,8 +2687,8 @@ To znamená, že je potrebný poplatok aspoň %2. bitcoin-core - Memetic version - Memetic verzia + PepeCoin version + PepeCoin verzia @@ -2697,8 +2697,8 @@ To znamená, že je potrebný poplatok aspoň %2. - Send command to -server or memeticd - Pošli príkaz na -server alebo memeticd + Send command to -server or pepecoind + Pošli príkaz na -server alebo pepecoind @@ -2717,13 +2717,13 @@ To znamená, že je potrebný poplatok aspoň %2. - Specify configuration file (default: memetic.conf) - Zadajte konfiguračný súbor (predvolené: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Zadajte konfiguračný súbor (predvolené: pepecoin.conf) - Specify pid file (default: memeticd.pid) - Zadajte pid súbor (predvolené: memeticd.pid) + Specify pid file (default: pepecoind.pid) + Zadajte pid súbor (predvolené: pepecoind.pid) @@ -2740,24 +2740,24 @@ To znamená, že je potrebný poplatok aspoň %2. %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com %s, musíte nastaviť rpcpassword v konfiguračnom súbore: %s Doporučuje sa použiť nasledovné náhodne heslo: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (toto heslo si nemusíte pamätať) Užívateľské meno a heslo NESMIE byť rovnaké. Ak súbor neexistuje, vytvorte ho s právami "môže čítať iba vlastník". Odporúča sa tiež nastaviť "alertnotify", takže budete upozornení na problémy, -napríklad: alertnotify=echo %%s | mail -s "Memetic upozornenie" admin@foo.com +napríklad: alertnotify=echo %%s | mail -s "PepeCoin upozornenie" admin@foo.com @@ -2862,8 +2862,8 @@ napríklad: alertnotify=echo %%s | mail -s "Memetic upozornenie" admin - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Upozornenie: Skontrolujte, že dátum a čas počítača sú správne! Ak je Váš čas nesprávny Memetic nebude pracovať správne. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Upozornenie: Skontrolujte, že dátum a čas počítača sú správne! Ak je Váš čas nesprávny PepeCoin nebude pracovať správne. @@ -3169,8 +3169,8 @@ napríklad: alertnotify=echo %%s | mail -s "Memetic upozornenie" admin - Initialization sanity check failed. Memetic is shutting down. - Úvodné kontrolné testy zlyhali. Memetic sa teraz zatvori. + Initialization sanity check failed. PepeCoin is shutting down. + Úvodné kontrolné testy zlyhali. PepeCoin sa teraz zatvori. @@ -3234,13 +3234,13 @@ napríklad: alertnotify=echo %%s | mail -s "Memetic upozornenie" admin - Error loading wallet.dat: Wallet requires newer version of Memetic - Chyba pri načítaní wallet.dat: Peňaženka vyžaduje novšiu verziu Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Chyba pri načítaní wallet.dat: Peňaženka vyžaduje novšiu verziu PepeCoin - Wallet needed to be rewritten: restart Memetic to complete - Peňaženka potrebuje byť prepísaná: reštartujte Memetic k dokončeniu + Wallet needed to be rewritten: restart PepeCoin to complete + Peňaženka potrebuje byť prepísaná: reštartujte PepeCoin k dokončeniu @@ -3304,8 +3304,8 @@ napríklad: alertnotify=echo %%s | mail -s "Memetic upozornenie" admin - Unable to bind to %s on this computer. Memetic is probably already running. - Nemôžem sa pripojiť na %s na tomto počítači. Memetic je pravdepodobne už beží. + Unable to bind to %s on this computer. PepeCoin is probably already running. + Nemôžem sa pripojiť na %s na tomto počítači. PepeCoin je pravdepodobne už beží. @@ -3344,8 +3344,8 @@ napríklad: alertnotify=echo %%s | mail -s "Memetic upozornenie" admin - Cannot obtain a lock on data directory %s. Memetic is probably already running. - Nedá sa zamknúť dátová zložka %s. Memetic je pravdepodobne už spustený + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. + Nedá sa zamknúť dátová zložka %s. PepeCoin je pravdepodobne už spustený diff --git a/src/qt/locale/bitcoin_sl_SI.qm b/src/qt/locale/bitcoin_sl_SI.qm index 58969f80..e06432c4 100644 Binary files a/src/qt/locale/bitcoin_sl_SI.qm and b/src/qt/locale/bitcoin_sl_SI.qm differ diff --git a/src/qt/locale/bitcoin_sl_SI.ts b/src/qt/locale/bitcoin_sl_SI.ts index 4d6316a3..bb2950f6 100644 --- a/src/qt/locale/bitcoin_sl_SI.ts +++ b/src/qt/locale/bitcoin_sl_SI.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic - O Memetic + About PepeCoin + O PepeCoin - <b>Memetic</b> version - <b>Memetic</b> verzija + <b>PepeCoin</b> version + <b>PepeCoin</b> verzija Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,8 +58,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - To so vaši Memetic naslovi za prejemanje plačil. Priporočeno je da vsakemu pošiljatelju namenite drugega in tako dobite večji pregled nad svojimi nakazili. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + To so vaši PepeCoin naslovi za prejemanje plačil. Priporočeno je da vsakemu pošiljatelju namenite drugega in tako dobite večji pregled nad svojimi nakazili. @@ -73,8 +73,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Podpišite sporočilo, kot dokazilo lastništva Memetic naslova + Sign a message to prove you own a PepeCoin address + Podpišite sporočilo, kot dokazilo lastništva PepeCoin naslova @@ -88,8 +88,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Potrdi sporočilo, da zagotovite, da je bilo podpisano z izbranim Memetic naslovom + Verify a message to ensure it was signed with a specified PepeCoin address + Potrdi sporočilo, da zagotovite, da je bilo podpisano z izbranim PepeCoin naslovom @@ -256,8 +256,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Memetic se bo sedaj zaprl, da dokonča proces šifriranje. Pomnite, da tudi šifriranje vaše denarnice ne more v celoti zaščititi vaših kovancev pred krajo z zlonamernimi programi in računalniškimi virusi, če ti okužijo vaš računalnik. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin se bo sedaj zaprl, da dokonča proces šifriranje. Pomnite, da tudi šifriranje vaše denarnice ne more v celoti zaščititi vaših kovancev pred krajo z zlonamernimi programi in računalniškimi virusi, če ti okužijo vaš računalnik. @@ -350,8 +350,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Pokaži informacije o Memetic + Show information about PepeCoin + Pokaži informacije o PepeCoin @@ -390,13 +390,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Pošlji kovance na Memetic naslov + Send coins to a PepeCoin address + Pošlji kovance na PepeCoin naslov - Modify configuration options for Memetic - Spremeni nastavitve za Memetic + Modify configuration options for PepeCoin + Spremeni nastavitve za PepeCoin @@ -436,8 +436,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -446,8 +446,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - &O Memetic + &About PepeCoin + &O PepeCoin @@ -498,13 +498,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Memetic program + PepeCoin client + PepeCoin program - %n active connection(s) to Memetic network - %n aktivne povezave na Memetic omrežje%n aktivnih povezav na Memetic omrežje%n aktivnih povezav na Memetic omrežje%n aktivnih povezav na Memetic omrežje + %n active connection(s) to PepeCoin network + %n aktivne povezave na PepeCoin omrežje%n aktivnih povezav na PepeCoin omrežje%n aktivnih povezav na PepeCoin omrežje%n aktivnih povezav na PepeCoin omrežje @@ -598,8 +598,8 @@ Naslov: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - URI ne more biti razčlenjen! To se lahko zgodi zaradi neveljavnega Memetic naslova ali slabih parametrov URI. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + URI ne more biti razčlenjen! To se lahko zgodi zaradi neveljavnega PepeCoin naslova ali slabih parametrov URI. @@ -721,8 +721,8 @@ Naslov: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - Prišlo je do usodne napake. Program Memetic se ne more več varno nadaljevati in se bo zato zaprl. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + Prišlo je do usodne napake. Program PepeCoin se ne more več varno nadaljevati in se bo zato zaprl. @@ -1055,8 +1055,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - The entered address "%1" is not a valid Memetic address. - Vneseni naslov "%1" ni veljaven Memetic naslov. + The entered address "%1" is not a valid PepeCoin address. + Vneseni naslov "%1" ni veljaven PepeCoin naslov. @@ -1074,8 +1074,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1147,13 +1147,13 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Automatically start Memetic after logging in to the system. - Avtomatično zaženi Memetic ob zagonu sistema. + Automatically start PepeCoin after logging in to the system. + Avtomatično zaženi PepeCoin ob zagonu sistema. - &Start Memetic on system login - &Zaženi Memetic ob prijavi v sistem + &Start PepeCoin on system login + &Zaženi PepeCoin ob prijavi v sistem @@ -1162,8 +1162,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Avtomatično odpri vrata na routerju za Memetic program. To deluje le če vaš router podpira UPnP in je ta omogočen. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Avtomatično odpri vrata na routerju za PepeCoin program. To deluje le če vaš router podpira UPnP in je ta omogočen. @@ -1172,8 +1172,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Poveži se na Memetic omrežje skozi SOCKS proxy (npr. ko se povezujete prek Tora) + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + Poveži se na PepeCoin omrežje skozi SOCKS proxy (npr. ko se povezujete prek Tora) @@ -1247,8 +1247,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - The user interface language can be set here. This setting will take effect after restarting Memetic. - Tu lahko nastavite jezik uporabniškega vmesnika. Nastavitve bodo pričele delovati ob ponovnem zagonu Memetic aplikacije. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + Tu lahko nastavite jezik uporabniškega vmesnika. Nastavitve bodo pričele delovati ob ponovnem zagonu PepeCoin aplikacije. @@ -1314,8 +1314,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - This setting will take effect after restarting Memetic. - Ta nastavitev bo pričela delovati ob ponovnem zagonu Memetic aplikacije + This setting will take effect after restarting PepeCoin. + Ta nastavitev bo pričela delovati ob ponovnem zagonu PepeCoin aplikacije @@ -1333,8 +1333,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - Prikazane informacije so morda zastarele. Vaša denarnica se avtomatično sinhronizira z Memetic omrežjem, ko je vzpostavljena povezava, toda ta proces še ni bil zaključen. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + Prikazane informacije so morda zastarele. Vaša denarnica se avtomatično sinhronizira z PepeCoin omrežjem, ko je vzpostavljena povezava, toda ta proces še ni bil zaključen. @@ -1407,7 +1407,7 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1575,8 +1575,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Prikaži memetic-Qt sporočilo za pomoč , ki prikaže vse možnosti ukazne vrstice Memetic aplikacije + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Prikaži pepecoin-Qt sporočilo za pomoč , ki prikaže vse možnosti ukazne vrstice PepeCoin aplikacije @@ -1595,13 +1595,13 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Memetic - Debug window - Memetic - okno za odpravljanje napak + PepeCoin - Debug window + PepeCoin - okno za odpravljanje napak - Memetic Core - Memetic jedro + PepeCoin Core + PepeCoin jedro @@ -1610,8 +1610,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Odpri Memetic datoteko zapisov odpravljanja napak iz trenutnega direktorija podatkov. Če so datoteke zapisov velike, to lahko traja nekaj sekund. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + Odpri PepeCoin datoteko zapisov odpravljanja napak iz trenutnega direktorija podatkov. Če so datoteke zapisov velike, to lahko traja nekaj sekund. @@ -1620,8 +1620,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Welcome to the Memetic RPC console. - Dobrodošli v Memetic RPC konzoli. + Welcome to the PepeCoin RPC console. + Dobrodošli v PepeCoin RPC konzoli. @@ -1729,8 +1729,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1799,8 +1799,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1814,8 +1814,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Vnesite Memetic naslov (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Vnesite PepeCoin naslov (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1914,8 +1914,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - WARNING: Invalid Memetic address - OPOZORILO: Neveljaven Memetic naslov + WARNING: Invalid PepeCoin address + OPOZORILO: Neveljaven PepeCoin naslov @@ -1988,8 +1988,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Vnesite Memetic naslov (npr. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Vnesite PepeCoin naslov (npr. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2049,8 +2049,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Sign the message to prove you own this Memetic address - Podpišite sporočilo, kot dokazilo lastništva Memetic naslova + Sign the message to prove you own this PepeCoin address + Podpišite sporočilo, kot dokazilo lastništva PepeCoin naslova @@ -2081,8 +2081,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Verify the message to ensure it was signed with the specified Memetic address - Potrdite sporočilo, da zagotovite, da je bilo podpisano z izbranim Memetic naslovom + Verify the message to ensure it was signed with the specified PepeCoin address + Potrdite sporočilo, da zagotovite, da je bilo podpisano z izbranim PepeCoin naslovom @@ -2092,8 +2092,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Vnesite Memetic naslov (npr. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Vnesite PepeCoin naslov (npr. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2102,8 +2102,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Enter Memetic signature - Vnesite Memetic podpis + Enter PepeCoin signature + Vnesite PepeCoin podpis @@ -2681,8 +2681,8 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". bitcoin-core - Memetic version - Memetic različica + PepeCoin version + PepeCoin različica @@ -2691,7 +2691,7 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Send command to -server or memeticd + Send command to -server or pepecoind Pošlji ukaz na -server ali blackoind @@ -2711,13 +2711,13 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". - Specify configuration file (default: memetic.conf) - Določi konfiguracijsko datoteko (privzeto: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Določi konfiguracijsko datoteko (privzeto: pepecoin.conf) - Specify pid file (default: memeticd.pid) - Določi pid datoteko (privzeto: memetic.pid) + Specify pid file (default: pepecoind.pid) + Določi pid datoteko (privzeto: pepecoin.pid) @@ -2734,13 +2734,13 @@ Ta oznaka se obarva rdeče, če je prioriteta manjša kot "srednja". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2846,8 +2846,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Opozorilo: Prosimo preverite svoj datum in čas svojega računalnika! Če je vaša ura nastavljena napačno Memetic ne bo deloval. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Opozorilo: Prosimo preverite svoj datum in čas svojega računalnika! Če je vaša ura nastavljena napačno PepeCoin ne bo deloval. @@ -3153,7 +3153,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3218,13 +3218,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - Napaka pri nalaganju wallet.dat: denarnica zahteva novejšo verzijo Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Napaka pri nalaganju wallet.dat: denarnica zahteva novejšo verzijo PepeCoin - Wallet needed to be rewritten: restart Memetic to complete - Denarnica mora biti prepisana: ponovno odprite Memetic za dokončanje + Wallet needed to be rewritten: restart PepeCoin to complete + Denarnica mora biti prepisana: ponovno odprite PepeCoin za dokončanje @@ -3288,8 +3288,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. - Navezava v %s na tem računalniku ni mogoča Memetic aplikacija je verjetno že zagnana. + Unable to bind to %s on this computer. PepeCoin is probably already running. + Navezava v %s na tem računalniku ni mogoča PepeCoin aplikacija je verjetno že zagnana. @@ -3328,7 +3328,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_sq.ts b/src/qt/locale/bitcoin_sq.ts index a37f8740..4f8ac4e0 100644 --- a/src/qt/locale/bitcoin_sq.ts +++ b/src/qt/locale/bitcoin_sq.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_sr.qm b/src/qt/locale/bitcoin_sr.qm index fdf5c103..8b25b63d 100644 Binary files a/src/qt/locale/bitcoin_sr.qm and b/src/qt/locale/bitcoin_sr.qm differ diff --git a/src/qt/locale/bitcoin_sr.ts b/src/qt/locale/bitcoin_sr.ts index 6377db72..830d39be 100644 --- a/src/qt/locale/bitcoin_sr.ts +++ b/src/qt/locale/bitcoin_sr.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic - О memetic-u + About PepeCoin + О pepecoin-u - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2829,7 +2829,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3135,7 +3135,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3200,12 +3200,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3270,7 +3270,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3310,7 +3310,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_sv.qm b/src/qt/locale/bitcoin_sv.qm index 9f7bf5e2..7c17f0ac 100644 Binary files a/src/qt/locale/bitcoin_sv.qm and b/src/qt/locale/bitcoin_sv.qm differ diff --git a/src/qt/locale/bitcoin_sv.ts b/src/qt/locale/bitcoin_sv.ts index bcbbc9bf..a5c99e40 100644 --- a/src/qt/locale/bitcoin_sv.ts +++ b/src/qt/locale/bitcoin_sv.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - Vad du behöver veta om Memetic + About PepeCoin + Vad du behöver veta om PepeCoin - <b>Memetic</b> version - <b>Memetic</b> version + <b>PepeCoin</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -60,8 +60,8 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Dessa är dina Memetic adesser för att mottaga betalningsförsändelser. Du kan även använda olika adresser för varje avsändare för att enkelt hålla koll på vem som har skickat en betalning. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Dessa är dina PepeCoin adesser för att mottaga betalningsförsändelser. Du kan även använda olika adresser för varje avsändare för att enkelt hålla koll på vem som har skickat en betalning. @@ -75,8 +75,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address - Signera ett meddelande för att bevisa att du äger Memetic adressen + Sign a message to prove you own a PepeCoin address + Signera ett meddelande för att bevisa att du äger PepeCoin adressen @@ -90,8 +90,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address - Verifiera ett meddelande för att försäkra dig över att det var signerat av en specifik Memetic adress + Verify a message to ensure it was signed with a specified PepeCoin address + Verifiera ett meddelande för att försäkra dig över att det var signerat av en specifik PepeCoin adress @@ -258,8 +258,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Memetic plånboken kommer nu att stängas för att slutföra krypteringen: Kom ihåg att även en krypterad plånboks säkerhet kan äventyras genom keyloggers eller dylika malwares. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin plånboken kommer nu att stängas för att slutföra krypteringen: Kom ihåg att även en krypterad plånboks säkerhet kan äventyras genom keyloggers eller dylika malwares. @@ -352,8 +352,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic - Visa information om Memetic + Show information about PepeCoin + Visa information om PepeCoin @@ -392,13 +392,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address - Skicka coins till en Memetic adress + Send coins to a PepeCoin address + Skicka coins till en PepeCoin adress - Modify configuration options for Memetic - Modifiera konfigurations-alternativ för Memetic + Modify configuration options for PepeCoin + Modifiera konfigurations-alternativ för PepeCoin @@ -438,8 +438,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic - Memetic + PepeCoin + PepeCoin @@ -448,8 +448,8 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic - &Om Memetic + &About PepeCoin + &Om PepeCoin @@ -500,13 +500,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client - Memetic klient + PepeCoin client + PepeCoin klient - %n active connection(s) to Memetic network - %n aktiv anslutning till Memetic nätverket%n aktiva anslutning till Memetic nätverket + %n active connection(s) to PepeCoin network + %n aktiv anslutning till PepeCoin nätverket%n aktiva anslutning till PepeCoin nätverket @@ -600,8 +600,8 @@ Adress: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - URI:n kan inte tolkas! Detta kan bero på en ogiltig Memetic adress eller felaktiga URI parametrar. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + URI:n kan inte tolkas! Detta kan bero på en ogiltig PepeCoin adress eller felaktiga URI parametrar. @@ -723,8 +723,8 @@ Adress: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - Ett fatalt fel uppstod. Memetic kan inte fortsätta och stänger programmet. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + Ett fatalt fel uppstod. PepeCoin kan inte fortsätta och stänger programmet. @@ -1018,7 +1018,7 @@ Detta betyder att en avgift på minst %2 krävs. The label associated with this address book entry - Namnet som kopplats till denna memetic-adress + Namnet som kopplats till denna pepecoin-adress @@ -1057,8 +1057,8 @@ Detta betyder att en avgift på minst %2 krävs. - The entered address "%1" is not a valid Memetic address. - Den inslagna adressen "%1" är inte en giltig Memetic adress. + The entered address "%1" is not a valid PepeCoin address. + Den inslagna adressen "%1" är inte en giltig PepeCoin adress. @@ -1076,8 +1076,8 @@ Detta betyder att en avgift på minst %2 krävs. - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1149,13 +1149,13 @@ Detta betyder att en avgift på minst %2 krävs. - Automatically start Memetic after logging in to the system. - Starta Memetic automatiskt vid inloggning. + Automatically start PepeCoin after logging in to the system. + Starta PepeCoin automatiskt vid inloggning. - &Start Memetic on system login - &Starta Memetic vid inloggning + &Start PepeCoin on system login + &Starta PepeCoin vid inloggning @@ -1164,8 +1164,8 @@ Detta betyder att en avgift på minst %2 krävs. - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Öppna automatiskt Memetic klientens port på routern. Detta fungerar endast om din router stödjer UPnP och det är aktiverat. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Öppna automatiskt PepeCoin klientens port på routern. Detta fungerar endast om din router stödjer UPnP och det är aktiverat. @@ -1174,8 +1174,8 @@ Detta betyder att en avgift på minst %2 krävs. - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Anslut till Memetic nätverket via en SOCKS proxy (t.ex. när du ansluter genom Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + Anslut till PepeCoin nätverket via en SOCKS proxy (t.ex. när du ansluter genom Tor). @@ -1249,8 +1249,8 @@ Detta betyder att en avgift på minst %2 krävs. - The user interface language can be set here. This setting will take effect after restarting Memetic. - Användargränssnittets språk kan ställas in här. Inställningen börjar gälla efter omstart av Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + Användargränssnittets språk kan ställas in här. Inställningen börjar gälla efter omstart av PepeCoin. @@ -1316,8 +1316,8 @@ Detta betyder att en avgift på minst %2 krävs. - This setting will take effect after restarting Memetic. - Inställningen börjar gälla efter omstart av Memetic. + This setting will take effect after restarting PepeCoin. + Inställningen börjar gälla efter omstart av PepeCoin. @@ -1335,8 +1335,8 @@ Detta betyder att en avgift på minst %2 krävs. - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - Den visade informationen kan vara gammal. Din plånbok synkroniseras automatiskt med Memetic nätverket efter att en anslutning skapats, men denna process är inte klar än. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + Den visade informationen kan vara gammal. Din plånbok synkroniseras automatiskt med PepeCoin nätverket efter att en anslutning skapats, men denna process är inte klar än. @@ -1409,7 +1409,7 @@ Detta betyder att en avgift på minst %2 krävs. PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1577,8 +1577,8 @@ Detta betyder att en avgift på minst %2 krävs. - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Visa memetic-Qt hjälp meddelandet för att få en lista över möjliga Memetic kommandoradsalternativ. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Visa pepecoin-Qt hjälp meddelandet för att få en lista över möjliga PepeCoin kommandoradsalternativ. @@ -1597,13 +1597,13 @@ Detta betyder att en avgift på minst %2 krävs. - Memetic - Debug window - Memetic - Felsökningsfönster + PepeCoin - Debug window + PepeCoin - Felsökningsfönster - Memetic Core - Memetic Core + PepeCoin Core + PepeCoin Core @@ -1612,8 +1612,8 @@ Detta betyder att en avgift på minst %2 krävs. - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Öppna Memetic felsöknings-loggfilen från nuvarande data mapp. Detta kan kan ta ett par minuter för stora log filer. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + Öppna PepeCoin felsöknings-loggfilen från nuvarande data mapp. Detta kan kan ta ett par minuter för stora log filer. @@ -1622,8 +1622,8 @@ Detta betyder att en avgift på minst %2 krävs. - Welcome to the Memetic RPC console. - Välkommen till Memetic RPC konsoll. + Welcome to the PepeCoin RPC console. + Välkommen till PepeCoin RPC konsoll. @@ -1731,8 +1731,8 @@ Detta betyder att en avgift på minst %2 krävs. - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1801,8 +1801,8 @@ Detta betyder att en avgift på minst %2 krävs. - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1816,8 +1816,8 @@ Detta betyder att en avgift på minst %2 krävs. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Fyll i en Memetic adress (t.ex. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Fyll i en PepeCoin adress (t.ex. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1916,8 +1916,8 @@ Detta betyder att en avgift på minst %2 krävs. - WARNING: Invalid Memetic address - VARNING: Ogiltig Memetic adress + WARNING: Invalid PepeCoin address + VARNING: Ogiltig PepeCoin adress @@ -1990,8 +1990,8 @@ Detta betyder att en avgift på minst %2 krävs. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Fyll i en Memetic adress (t.ex. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Fyll i en PepeCoin adress (t.ex. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2051,8 +2051,8 @@ Detta betyder att en avgift på minst %2 krävs. - Sign the message to prove you own this Memetic address - Signera meddelandet för att verifiera att du äger denna Memetic adressen + Sign the message to prove you own this PepeCoin address + Signera meddelandet för att verifiera att du äger denna PepeCoin adressen @@ -2083,8 +2083,8 @@ Detta betyder att en avgift på minst %2 krävs. - Verify the message to ensure it was signed with the specified Memetic address - Verifiera meddelandet för att vara säker på att det var signerat med den angivna Memetic adressen + Verify the message to ensure it was signed with the specified PepeCoin address + Verifiera meddelandet för att vara säker på att det var signerat med den angivna PepeCoin adressen @@ -2094,8 +2094,8 @@ Detta betyder att en avgift på minst %2 krävs. - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Fyll i en Memetic adress (t.ex. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Fyll i en PepeCoin adress (t.ex. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2104,8 +2104,8 @@ Detta betyder att en avgift på minst %2 krävs. - Enter Memetic signature - Fyll i Memetic signatur + Enter PepeCoin signature + Fyll i PepeCoin signatur @@ -2683,8 +2683,8 @@ Detta betyder att en avgift på minst %2 krävs. bitcoin-core - Memetic version - Memetic version + PepeCoin version + PepeCoin version @@ -2693,8 +2693,8 @@ Detta betyder att en avgift på minst %2 krävs. - Send command to -server or memeticd - Skicka kommando till -server eller memeticd + Send command to -server or pepecoind + Skicka kommando till -server eller pepecoind @@ -2713,13 +2713,13 @@ Detta betyder att en avgift på minst %2 krävs. - Specify configuration file (default: memetic.conf) - Ange konfigurationsfilen (standard: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Ange konfigurationsfilen (standard: pepecoin.conf) - Specify pid file (default: memeticd.pid) - Ange pid filen (standard memeticd.pid) + Specify pid file (default: pepecoind.pid) + Ange pid filen (standard pepecoind.pid) @@ -2736,13 +2736,13 @@ Detta betyder att en avgift på minst %2 krävs. %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2848,8 +2848,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Varning: Kolla att din dators tid och datum är rätt. Memetic kan inte fungera ordentligt om tiden i datorn är fel. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Varning: Kolla att din dators tid och datum är rätt. PepeCoin kan inte fungera ordentligt om tiden i datorn är fel. @@ -3155,7 +3155,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3220,13 +3220,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - Kunde inte ladda wallet.dat: En nyare version av Memetic krävs + Error loading wallet.dat: Wallet requires newer version of PepeCoin + Kunde inte ladda wallet.dat: En nyare version av PepeCoin krävs - Wallet needed to be rewritten: restart Memetic to complete - Plånboken måste skrivas om: Starta om Memetic för att slutföra + Wallet needed to be rewritten: restart PepeCoin to complete + Plånboken måste skrivas om: Starta om PepeCoin för att slutföra @@ -3290,8 +3290,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. - Kan inte binda till %s på denna dator. Memetic är sannolikt redan startad. + Unable to bind to %s on this computer. PepeCoin is probably already running. + Kan inte binda till %s på denna dator. PepeCoin är sannolikt redan startad. @@ -3330,7 +3330,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_th_TH.ts b/src/qt/locale/bitcoin_th_TH.ts index becf1c00..93452a87 100644 --- a/src/qt/locale/bitcoin_th_TH.ts +++ b/src/qt/locale/bitcoin_th_TH.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_tr.qm b/src/qt/locale/bitcoin_tr.qm index 62b3fb0b..6c7283b7 100644 Binary files a/src/qt/locale/bitcoin_tr.qm and b/src/qt/locale/bitcoin_tr.qm differ diff --git a/src/qt/locale/bitcoin_tr.ts b/src/qt/locale/bitcoin_tr.ts index e723f939..cec51f41 100644 --- a/src/qt/locale/bitcoin_tr.ts +++ b/src/qt/locale/bitcoin_tr.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic - Memetic Hakkında + About PepeCoin + PepeCoin Hakkında - <b>Memetic</b> version - <b>Memetic</b> versiyonu + <b>PepeCoin</b> version + <b>PepeCoin</b> versiyonu Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers Telif Hakkı © 2009-2014 Bitcoin geliştiricileri Telif Hakkı © 2012-2014 NovaCoin geliştiricileri -Telif Hakkı © 2014 Memetic geliştiricileri +Telif Hakkı © 2014 PepeCoin geliştiricileri @@ -65,8 +65,8 @@ Bu ürün, OpenSSL projesi tarafından OpenSSL araç takımıThis product includ - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. - Bunlar, ödeme almak için Memetic adreslerinizdir. Her bir göndericiye farklı birini verebilir, böylece size kimin ödeme yaptığını takip edebilirsiniz. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + Bunlar, ödeme almak için PepeCoin adreslerinizdir. Her bir göndericiye farklı birini verebilir, böylece size kimin ödeme yaptığını takip edebilirsiniz. @@ -80,8 +80,8 @@ Bu ürün, OpenSSL projesi tarafından OpenSSL araç takımıThis product includ - Sign a message to prove you own a Memetic address - Bir Memetic adresine sahip olduğunu ispatlamak için bir mesaj imzala + Sign a message to prove you own a PepeCoin address + Bir PepeCoin adresine sahip olduğunu ispatlamak için bir mesaj imzala @@ -95,8 +95,8 @@ Bu ürün, OpenSSL projesi tarafından OpenSSL araç takımıThis product includ - Verify a message to ensure it was signed with a specified Memetic address - Mesajın, belirli bir Memetic adresiyle imzalandığından emin olmak için onu doğrula + Verify a message to ensure it was signed with a specified PepeCoin address + Mesajın, belirli bir PepeCoin adresiyle imzalandığından emin olmak için onu doğrula @@ -263,8 +263,8 @@ Bu ürün, OpenSSL projesi tarafından OpenSSL araç takımıThis product includ - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. - Memetic, şifreleme işlemini tamamlamak için şimdi kapatılacak. Cüzdanınızı şifrelemenin; coinlerinizin, bilgisayarınızı etkileyen zararlı yazılımlar tarafından çalınmasını bütünüyle engelleyemeyebileceğini unutmayınız. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin, şifreleme işlemini tamamlamak için şimdi kapatılacak. Cüzdanınızı şifrelemenin; coinlerinizin, bilgisayarınızı etkileyen zararlı yazılımlar tarafından çalınmasını bütünüyle engelleyemeyebileceğini unutmayınız. @@ -357,8 +357,8 @@ Bu ürün, OpenSSL projesi tarafından OpenSSL araç takımıThis product includ - Show information about Memetic - Memetic hakkındaki bilgiyi göster + Show information about PepeCoin + PepeCoin hakkındaki bilgiyi göster @@ -397,13 +397,13 @@ Bu ürün, OpenSSL projesi tarafından OpenSSL araç takımıThis product includ - Send coins to a Memetic address - Bir Memetic adresine coin gönder + Send coins to a PepeCoin address + Bir PepeCoin adresine coin gönder - Modify configuration options for Memetic - Memetic yapılandırma seçeneklerini değiştir + Modify configuration options for PepeCoin + PepeCoin yapılandırma seçeneklerini değiştir @@ -443,8 +443,8 @@ Bu ürün, OpenSSL projesi tarafından OpenSSL araç takımıThis product includ - Memetic - Memetic + PepeCoin + PepeCoin @@ -453,8 +453,8 @@ Bu ürün, OpenSSL projesi tarafından OpenSSL araç takımıThis product includ - &About Memetic - Memetic &Hakkında + &About PepeCoin + PepeCoin &Hakkında @@ -505,13 +505,13 @@ Bu ürün, OpenSSL projesi tarafından OpenSSL araç takımıThis product includ - Memetic client - Memetic istemcisi + PepeCoin client + PepeCoin istemcisi - %n active connection(s) to Memetic network - Memetic ağına %n etkin bağlantıMemetic ağına %n etkin bağlantı + %n active connection(s) to PepeCoin network + PepeCoin ağına %n etkin bağlantıPepeCoin ağına %n etkin bağlantı @@ -605,8 +605,8 @@ Adres: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. - URI ayrıştırılamadı! Bu, geçersiz bir Memetic adresi veya hatalı URI parametreleri nedeniyle olabilir. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. + URI ayrıştırılamadı! Bu, geçersiz bir PepeCoin adresi veya hatalı URI parametreleri nedeniyle olabilir. @@ -728,8 +728,8 @@ Adres: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. - Önemli bir hata oluştu. Memetic artık güvenli bir şekilde devam edemez ve şimdi kapatılacak. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. + Önemli bir hata oluştu. PepeCoin artık güvenli bir şekilde devam edemez ve şimdi kapatılacak. @@ -1062,8 +1062,8 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. - Girilen %1 adresi, geçerli bir Memetic adresi değildir. + The entered address "%1" is not a valid PepeCoin address. + Girilen %1 adresi, geçerli bir PepeCoin adresi değildir. @@ -1081,8 +1081,8 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt - memetic-Qt + pepecoin-Qt + pepecoin-Qt @@ -1154,13 +1154,13 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. - Sisteme giriş yaptıktan sonra Memetic'i otomatik olarak başlat + Automatically start PepeCoin after logging in to the system. + Sisteme giriş yaptıktan sonra PepeCoin'i otomatik olarak başlat - &Start Memetic on system login - Sisteme girişte Memetic'i &başlat + &Start PepeCoin on system login + Sisteme girişte PepeCoin'i &başlat @@ -1169,8 +1169,8 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. - Yönelticide Memetic istemci portunu otomatik olarak aç. Bu, sadece yönelticiniz UPnP'i desteklediğinde ve etkin olduğunda çalışır. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. + Yönelticide PepeCoin istemci portunu otomatik olarak aç. Bu, sadece yönelticiniz UPnP'i desteklediğinde ve etkin olduğunda çalışır. @@ -1179,8 +1179,8 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). - Memetic ağına bir SOCKS vekil sunucusu yoluyla bağlan (örn. Tor yoluyla bağlanıldığında) + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). + PepeCoin ağına bir SOCKS vekil sunucusu yoluyla bağlan (örn. Tor yoluyla bağlanıldığında) @@ -1254,8 +1254,8 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. - Kullanıcı arabirimi dili buradan ayarlanabilir. Ayar, Memetic yeniden başlatıldığında etkin olacaktır. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. + Kullanıcı arabirimi dili buradan ayarlanabilir. Ayar, PepeCoin yeniden başlatıldığında etkin olacaktır. @@ -1321,8 +1321,8 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. - Bu ayar, Memetic'i yeniden başlattıktan sonra etkin olacaktır. + This setting will take effect after restarting PepeCoin. + Bu ayar, PepeCoin'i yeniden başlattıktan sonra etkin olacaktır. @@ -1340,8 +1340,8 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. - Görüntülenen bilginin tarihi geçmiş olabilir. Cüzdanınız, bağlantı kurulduktan sonra otomatik olarak Memetic ağı ile senkronize olur ancak bu süreç, henüz tamamlanmamıştır. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. + Görüntülenen bilginin tarihi geçmiş olabilir. Cüzdanınız, bağlantı kurulduktan sonra otomatik olarak PepeCoin ağı ile senkronize olur ancak bu süreç, henüz tamamlanmamıştır. @@ -1414,7 +1414,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1582,8 +1582,8 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. - Muhtemel Memetic komut satırı seçeneklerinin bir listesini getirmek için memetic-Qt yardım mesajını göster + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. + Muhtemel PepeCoin komut satırı seçeneklerinin bir listesini getirmek için pepecoin-Qt yardım mesajını göster @@ -1602,13 +1602,13 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window - Memetic - Hata ayıklama penceresi + PepeCoin - Debug window + PepeCoin - Hata ayıklama penceresi - Memetic Core - Memetic Core + PepeCoin Core + PepeCoin Core @@ -1617,8 +1617,8 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. - Memetic hata ayıklama günlük kütüğü dosyasını, mevcut veri klasöründen aç. Bu işlem, büyük günlük kütüğü dosyaları için birkaç saniye sürebilir. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. + PepeCoin hata ayıklama günlük kütüğü dosyasını, mevcut veri klasöründen aç. Bu işlem, büyük günlük kütüğü dosyaları için birkaç saniye sürebilir. @@ -1627,8 +1627,8 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. - Memetic RPC konsoluna hoş geldiniz. + Welcome to the PepeCoin RPC console. + PepeCoin RPC konsoluna hoş geldiniz. @@ -1736,8 +1736,8 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1806,8 +1806,8 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1821,8 +1821,8 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Bir Memetic adresi gir (örn: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Bir PepeCoin adresi gir (örn: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1921,8 +1921,8 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address - UYARI: Geçersiz Memetic adresi + WARNING: Invalid PepeCoin address + UYARI: Geçersiz PepeCoin adresi @@ -1995,8 +1995,8 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Bir Memetic adresi girin (örn: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Bir PepeCoin adresi girin (örn: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2056,8 +2056,8 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address - Bu Memetic adresine sahip olduğunuzu ispatlamak için mesajı imzala + Sign the message to prove you own this PepeCoin address + Bu PepeCoin adresine sahip olduğunuzu ispatlamak için mesajı imzala @@ -2088,8 +2088,8 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address - Mesajın, belirtilen Memetic adresiyle imzalandığından emin olmak için onu doğrula + Verify the message to ensure it was signed with the specified PepeCoin address + Mesajın, belirtilen PepeCoin adresiyle imzalandığından emin olmak için onu doğrula @@ -2099,8 +2099,8 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) - Bir Memetic adresi girin (örn: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Bir PepeCoin adresi girin (örn: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2109,8 +2109,8 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature - Memetic imzası gir + Enter PepeCoin signature + PepeCoin imzası gir @@ -2688,8 +2688,8 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version - Memetic versiyonu + PepeCoin version + PepeCoin versiyonu @@ -2698,8 +2698,8 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd - -sunucu veya memeticd'ye komut gönder + Send command to -server or pepecoind + -sunucu veya pepecoind'ye komut gönder @@ -2718,13 +2718,13 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) - Konfigürasyon dosyasını belirt (varsayılan: memetic.conf) + Specify configuration file (default: pepecoin.conf) + Konfigürasyon dosyasını belirt (varsayılan: pepecoin.conf) - Specify pid file (default: memeticd.pid) - pid dosyasını belirt (varsayılan: memetic.pid) + Specify pid file (default: pepecoind.pid) + pid dosyasını belirt (varsayılan: pepecoin.pid) @@ -2741,13 +2741,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2853,8 +2853,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. - Uyarı: Lütfen bilgisayarınızın tarih ve saatinin doğru olduğunu kontrol ediniz! Saatiniz yanlış ise, Memetic düzgün çalışmayacaktır. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. + Uyarı: Lütfen bilgisayarınızın tarih ve saatinin doğru olduğunu kontrol ediniz! Saatiniz yanlış ise, PepeCoin düzgün çalışmayacaktır. @@ -3160,8 +3160,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. - Başlangıç uygunluk kontrolü başarısız oldu. Memetic kapatılıyor. + Initialization sanity check failed. PepeCoin is shutting down. + Başlangıç uygunluk kontrolü başarısız oldu. PepeCoin kapatılıyor. @@ -3225,13 +3225,13 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic - wallet.dat yüklenirken hata: Cüzdan, daha yeni bir Memetic versiyonuna ihtiyaç duyuyor. + Error loading wallet.dat: Wallet requires newer version of PepeCoin + wallet.dat yüklenirken hata: Cüzdan, daha yeni bir PepeCoin versiyonuna ihtiyaç duyuyor. - Wallet needed to be rewritten: restart Memetic to complete - Cüzdanın yeniden yazılması gerekmektedir: Tamamlamak için Memetic'i yeniden başlatın + Wallet needed to be rewritten: restart PepeCoin to complete + Cüzdanın yeniden yazılması gerekmektedir: Tamamlamak için PepeCoin'i yeniden başlatın @@ -3295,8 +3295,8 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. - Bu bilgisayarda %s bağlanamadı. Memetic muhtemelen halen çalışmaktadır. + Unable to bind to %s on this computer. PepeCoin is probably already running. + Bu bilgisayarda %s bağlanamadı. PepeCoin muhtemelen halen çalışmaktadır. @@ -3335,7 +3335,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_uk.ts b/src/qt/locale/bitcoin_uk.ts index abefbe4f..6ef040a6 100644 --- a/src/qt/locale/bitcoin_uk.ts +++ b/src/qt/locale/bitcoin_uk.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -598,7 +598,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2035,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2697,12 +2697,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2720,13 +2720,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2832,7 +2832,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3138,7 +3138,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3203,12 +3203,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3273,7 +3273,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3313,7 +3313,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_ur_PK.ts b/src/qt/locale/bitcoin_ur_PK.ts index b95a58f2..75c9cb64 100644 --- a/src/qt/locale/bitcoin_ur_PK.ts +++ b/src/qt/locale/bitcoin_ur_PK.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_vi.ts b/src/qt/locale/bitcoin_vi.ts index 87b53638..df0d9670 100644 --- a/src/qt/locale/bitcoin_vi.ts +++ b/src/qt/locale/bitcoin_vi.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_vi_VN.ts b/src/qt/locale/bitcoin_vi_VN.ts index 51756899..83bcce86 100644 --- a/src/qt/locale/bitcoin_vi_VN.ts +++ b/src/qt/locale/bitcoin_vi_VN.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin - <b>Memetic</b> version + <b>PepeCoin</b> version Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network @@ -594,7 +594,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -717,7 +717,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1037,7 +1037,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1056,7 +1056,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1129,12 +1129,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1144,7 +1144,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1154,7 +1154,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1229,7 +1229,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1296,7 +1296,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1315,7 +1315,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1389,7 +1389,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1557,7 +1557,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1577,12 +1577,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1592,7 +1592,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1602,7 +1602,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1711,7 +1711,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1781,7 +1781,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1796,7 +1796,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1896,7 +1896,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1970,7 +1970,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2031,7 +2031,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2063,7 +2063,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2074,7 +2074,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2084,7 +2084,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2663,7 +2663,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2673,7 +2673,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2693,12 +2693,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2716,13 +2716,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2828,7 +2828,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3134,7 +3134,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3199,12 +3199,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3269,7 +3269,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3309,7 +3309,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/locale/bitcoin_zh_CN.qm b/src/qt/locale/bitcoin_zh_CN.qm index 682c75c9..e5a0ed02 100644 Binary files a/src/qt/locale/bitcoin_zh_CN.qm and b/src/qt/locale/bitcoin_zh_CN.qm differ diff --git a/src/qt/locale/bitcoin_zh_CN.ts b/src/qt/locale/bitcoin_zh_CN.ts index 1249a7aa..6913e654 100644 --- a/src/qt/locale/bitcoin_zh_CN.ts +++ b/src/qt/locale/bitcoin_zh_CN.ts @@ -3,22 +3,22 @@ AboutDialog - About Memetic + About PepeCoin 关于黑币 - <b>Memetic</b> version + <b>PepeCoin</b> version <b>黑币客户端</b> 版本 Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers 版权所有 © 2009-2014 比特币Bitcoin开发组 版权所有 © 2012-2014 新星币Novacoin开发组 -版权所有 © 2014 黑币Memetic开发组 +版权所有 © 2014 黑币PepeCoin开发组 @@ -65,7 +65,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. 这是您用来接收支付的黑币地址列表。为不同的支付方建立不同的地址以便于了解支付来源。 @@ -80,7 +80,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address 对信息进行签名以证明您对该黑币地址的所有权 @@ -95,7 +95,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address 验证信息以保证其经过指定黑币地址的签名 @@ -263,7 +263,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. 黑币客户端即将关闭以完成加密过程。请记住,加密钱包并不能完全防止您的电子货币被入侵您计算机的木马软件盗窃。 @@ -357,7 +357,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin 显示关于黑币的信息 @@ -397,12 +397,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address 向指定的地址发送黑币 - Modify configuration options for Memetic + Modify configuration options for PepeCoin 更改设置选项 @@ -443,7 +443,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin 黑币 @@ -453,7 +453,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin 关于黑币(&A) @@ -505,12 +505,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client 黑币客户端 - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network 与黑币网络建立了 %n 个连接 @@ -605,7 +605,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. 无法解析URI:无效的黑币地址或错误的URI参数。 @@ -728,7 +728,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. 发生严重错误,黑币客户端即将关闭。 @@ -1055,7 +1055,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. “%1” 不是有效的黑币地址。 @@ -1074,8 +1074,8 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt - 黑币客户端memetic-Qt + pepecoin-Qt + 黑币客户端pepecoin-Qt @@ -1147,12 +1147,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. 开机自动启动黑币客户端 - &Start Memetic on system login + &Start PepeCoin on system login 开机时自动启动黑币客户端(&S) @@ -1162,7 +1162,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. 路由器自动打开黑币客户端端口。该功能仅在路由器开启UPnP支持时有效。 @@ -1172,7 +1172,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). 经SOCKS代理连接到黑币网络(例如使用Tor) @@ -1247,7 +1247,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. 在此设置用户界面语言。重启黑币客户端后设置生效。 @@ -1314,7 +1314,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. 重启客户端后设置生效 @@ -1333,7 +1333,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. 所显示的信息尚未更新,建立连接后钱包客户端会自动和网络进行同步,但目前该过程尚未完成。 @@ -1407,7 +1407,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1575,7 +1575,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. 显示关于命令行选项的帮助信息。 @@ -1595,12 +1595,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window 黑币客户端-调试窗口 - Memetic Core + PepeCoin Core 黑币核心进程 @@ -1610,7 +1610,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. 打开调试日志文件,对于较大的文件,这可能持续几秒钟。 @@ -1620,7 +1620,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. 欢迎使用黑币RPC控制台。 @@ -1729,8 +1729,8 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME - 123.456 MEME {0.00 ?} + 0.00 PEPE + 123.456 PEPE {0.00 ?} @@ -1799,8 +1799,8 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME - 123.456 MEME + 123.456 PEPE + 123.456 PEPE @@ -1814,7 +1814,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) 输入黑币地址(例如:B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1914,7 +1914,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address 警告:无效的黑币地址 @@ -1988,7 +1988,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) 输入一个黑币地址 (例:B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2049,7 +2049,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address 对该消息进行签名以证明您对该黑币地址的所有权 @@ -2081,7 +2081,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address 确认该消息以保证它经由指定的黑币地址签名 @@ -2092,7 +2092,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) 输入黑币地址(例: B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2102,7 +2102,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature 输入黑币签名 @@ -2681,7 +2681,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version 黑币客户端 版本 @@ -2691,8 +2691,8 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd - 向-server服务器或memeticd发送命令 + Send command to -server or pepecoind + 向-server服务器或pepecoind发送命令 @@ -2714,13 +2714,13 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) - 指定配置文件(默认: memetic.conf) + Specify configuration file (default: pepecoin.conf) + 指定配置文件(默认: pepecoin.conf) - Specify pid file (default: memeticd.pid) - 指定pid文件(默认: memeticd.pid) + Specify pid file (default: pepecoind.pid) + 指定pid文件(默认: pepecoind.pid) @@ -2738,24 +2738,24 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com %s, 必须在配置文件里设置rpc密码: %s 建议使用如下的随机密码: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (不需要记住该密码) 用户名和密码不能重复。 如果该文件不存在,请自行创建并设为用户本身只读权限。 建议创建提示以监测可能的问题,如: -alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2864,7 +2864,7 @@ alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. 警告:请确认您计算机的本地时间。如果时钟错误,黑币客户端将不能正常工作。 @@ -3174,7 +3174,7 @@ alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. 初始化完整性检查失败。 黑币客户端即将关闭。 @@ -3240,12 +3240,12 @@ alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin wallet.dat 钱包文件加载出错:需要新版本的客户端 - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete 需要重写钱包,重启客户端以完成该操作。 @@ -3310,7 +3310,7 @@ alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. 无法绑定到该计算机上的 %s. 黑币客户端可能已在运行中。 @@ -3350,7 +3350,7 @@ alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. 无法从数据目录 %s 获得锁定. 黑币客户端可能已在运行中. diff --git a/src/qt/locale/bitcoin_zh_TW.qm b/src/qt/locale/bitcoin_zh_TW.qm index 01dbdc2e..6073b937 100644 Binary files a/src/qt/locale/bitcoin_zh_TW.qm and b/src/qt/locale/bitcoin_zh_TW.qm differ diff --git a/src/qt/locale/bitcoin_zh_TW.ts b/src/qt/locale/bitcoin_zh_TW.ts index 54fa8906..52e5d8a4 100644 --- a/src/qt/locale/bitcoin_zh_TW.ts +++ b/src/qt/locale/bitcoin_zh_TW.ts @@ -3,19 +3,19 @@ AboutDialog - About Memetic + About PepeCoin 關于黑幣 - <b>Memetic</b> version + <b>PepeCoin</b> version <b>黑幣客戶端</b> 版本 Copyright © 2009-2014 The Bitcoin developers Copyright © 2012-2014 The NovaCoin developers -Copyright © 2014 The Memetic developers +Copyright © 2014 The PepeCoin developers @@ -58,7 +58,7 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Memetic addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. + These are your PepeCoin addresses for receiving payments. You may want to give a different one to each sender so you can keep track of who is paying you. 這是您用來接收支付的黑幣地址列表。爲不同的支付方建立不同的地址以便于了解支付來源。 @@ -73,7 +73,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign a message to prove you own a Memetic address + Sign a message to prove you own a PepeCoin address 對信息進行簽名以證明您對該黑幣地址的所有權 @@ -88,7 +88,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Verify a message to ensure it was signed with a specified Memetic address + Verify a message to ensure it was signed with a specified PepeCoin address 驗證信息以保證其經過指定黑幣地址的簽名 @@ -256,7 +256,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. + PepeCoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your coins from being stolen by malware infecting your computer. 黑幣客戶端即將關閉以完成加密過程。請記住,加密錢包並不能完全防止您的電子貨幣被入侵您計算機的木馬軟件盜竊。 @@ -350,7 +350,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Memetic + Show information about PepeCoin 關于黑幣 @@ -390,12 +390,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Memetic address + Send coins to a PepeCoin address 向指定的地址發送黑幣 - Modify configuration options for Memetic + Modify configuration options for PepeCoin @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic + PepeCoin @@ -446,7 +446,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Memetic + &About PepeCoin @@ -498,12 +498,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Memetic client + PepeCoin client 黑幣客戶端 - %n active connection(s) to Memetic network + %n active connection(s) to PepeCoin network 與黑幣網絡建立了 %n 個連接 @@ -598,7 +598,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Memetic address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid PepeCoin address or malformed URI parameters. @@ -721,7 +721,7 @@ Address: %4 - A fatal error occurred. Memetic can no longer continue safely and will quit. + A fatal error occurred. PepeCoin can no longer continue safely and will quit. @@ -1041,7 +1041,7 @@ This label turns red, if the priority is smaller than "medium". - The entered address "%1" is not a valid Memetic address. + The entered address "%1" is not a valid PepeCoin address. @@ -1060,7 +1060,7 @@ This label turns red, if the priority is smaller than "medium". - memetic-Qt + pepecoin-Qt @@ -1133,12 +1133,12 @@ This label turns red, if the priority is smaller than "medium". - Automatically start Memetic after logging in to the system. + Automatically start PepeCoin after logging in to the system. - &Start Memetic on system login + &Start PepeCoin on system login @@ -1148,7 +1148,7 @@ This label turns red, if the priority is smaller than "medium". - Automatically open the Memetic client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the PepeCoin client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1158,7 +1158,7 @@ This label turns red, if the priority is smaller than "medium". - Connect to the Memetic network through a SOCKS proxy (e.g. when connecting through Tor). + Connect to the PepeCoin network through a SOCKS proxy (e.g. when connecting through Tor). @@ -1233,7 +1233,7 @@ This label turns red, if the priority is smaller than "medium". - The user interface language can be set here. This setting will take effect after restarting Memetic. + The user interface language can be set here. This setting will take effect after restarting PepeCoin. @@ -1300,7 +1300,7 @@ This label turns red, if the priority is smaller than "medium". - This setting will take effect after restarting Memetic. + This setting will take effect after restarting PepeCoin. @@ -1319,7 +1319,7 @@ This label turns red, if the priority is smaller than "medium". - The displayed information may be out of date. Your wallet automatically synchronizes with the Memetic network after a connection is established, but this process has not completed yet. + The displayed information may be out of date. Your wallet automatically synchronizes with the PepeCoin network after a connection is established, but this process has not completed yet. @@ -1393,7 +1393,7 @@ This label turns red, if the priority is smaller than "medium". PaymentServer - Cannot start memetic: click-to-pay handler + Cannot start pepecoin: click-to-pay handler @@ -1561,7 +1561,7 @@ This label turns red, if the priority is smaller than "medium". - Show the memetic-Qt help message to get a list with possible Memetic command-line options. + Show the pepecoin-Qt help message to get a list with possible PepeCoin command-line options. @@ -1581,12 +1581,12 @@ This label turns red, if the priority is smaller than "medium". - Memetic - Debug window + PepeCoin - Debug window - Memetic Core + PepeCoin Core @@ -1596,7 +1596,7 @@ This label turns red, if the priority is smaller than "medium". - Open the Memetic debug log file from the current data directory. This can take a few seconds for large log files. + Open the PepeCoin debug log file from the current data directory. This can take a few seconds for large log files. @@ -1606,7 +1606,7 @@ This label turns red, if the priority is smaller than "medium". - Welcome to the Memetic RPC console. + Welcome to the PepeCoin RPC console. @@ -1715,7 +1715,7 @@ This label turns red, if the priority is smaller than "medium". - 0.00 MEME + 0.00 PEPE @@ -1785,7 +1785,7 @@ This label turns red, if the priority is smaller than "medium". - 123.456 MEME + 123.456 PEPE @@ -1800,7 +1800,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -1900,7 +1900,7 @@ This label turns red, if the priority is smaller than "medium". - WARNING: Invalid Memetic address + WARNING: Invalid PepeCoin address @@ -1974,7 +1974,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2035,7 +2035,7 @@ This label turns red, if the priority is smaller than "medium". - Sign the message to prove you own this Memetic address + Sign the message to prove you own this PepeCoin address @@ -2067,7 +2067,7 @@ This label turns red, if the priority is smaller than "medium". - Verify the message to ensure it was signed with the specified Memetic address + Verify the message to ensure it was signed with the specified PepeCoin address @@ -2078,7 +2078,7 @@ This label turns red, if the priority is smaller than "medium". - Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) + Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i) @@ -2088,7 +2088,7 @@ This label turns red, if the priority is smaller than "medium". - Enter Memetic signature + Enter PepeCoin signature @@ -2667,7 +2667,7 @@ This label turns red, if the priority is smaller than "medium". bitcoin-core - Memetic version + PepeCoin version @@ -2677,7 +2677,7 @@ This label turns red, if the priority is smaller than "medium". - Send command to -server or memeticd + Send command to -server or pepecoind @@ -2697,12 +2697,12 @@ This label turns red, if the priority is smaller than "medium". - Specify configuration file (default: memetic.conf) + Specify configuration file (default: pepecoin.conf) - Specify pid file (default: memeticd.pid) + Specify pid file (default: pepecoind.pid) @@ -2720,13 +2720,13 @@ This label turns red, if the priority is smaller than "medium". %s, you must set a rpcpassword in the configuration file: %s It is recommended you use the following random password: -rpcuser=memeticrpc +rpcuser=pepecoinrpc rpcpassword=%s (you do not need to remember this password) The username and password MUST NOT be the same. If the file does not exist, create it with owner-readable-only file permissions. It is also recommended to set alertnotify so you are notified of problems; -for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "PepeCoin Alert" admin@foo.com @@ -2833,7 +2833,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly. @@ -3139,7 +3139,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Initialization sanity check failed. Memetic is shutting down. + Initialization sanity check failed. PepeCoin is shutting down. @@ -3204,12 +3204,12 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Memetic + Error loading wallet.dat: Wallet requires newer version of PepeCoin - Wallet needed to be rewritten: restart Memetic to complete + Wallet needed to be rewritten: restart PepeCoin to complete @@ -3274,7 +3274,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Unable to bind to %s on this computer. Memetic is probably already running. + Unable to bind to %s on this computer. PepeCoin is probably already running. @@ -3314,7 +3314,7 @@ for example: alertnotify=echo %%s | mail -s "Memetic Alert" admin@foo. - Cannot obtain a lock on data directory %s. Memetic is probably already running. + Cannot obtain a lock on data directory %s. PepeCoin is probably already running. diff --git a/src/qt/masternodemanager.cpp b/src/qt/masternodemanager.cpp index 6deb0aeb..f68f85c5 100644 --- a/src/qt/masternodemanager.cpp +++ b/src/qt/masternodemanager.cpp @@ -1,23 +1,17 @@ #include "masternodemanager.h" #include "ui_masternodemanager.h" -#include "addeditadrenalinenode.h" -#include "adrenalinenodeconfigdialog.h" +#include "addeditmastertoad.h" +#include "mastertoadconfigdialog.h" #include "sync.h" #include "clientmodel.h" #include "walletmodel.h" #include "activemasternode.h" #include "masternodeconfig.h" -#include "masternodeman.h" #include "masternode.h" #include "walletdb.h" #include "wallet.h" #include "init.h" -#include "rpcserver.h" -#include -#include -using namespace json_spirit; -using namespace std; #include #include @@ -39,17 +33,25 @@ MasternodeManager::MasternodeManager(QWidget *parent) : ui->setupUi(this); ui->editButton->setEnabled(false); + ui->getConfigButton->setEnabled(false); ui->startButton->setEnabled(false); + ui->stopButton->setEnabled(false); + ui->copyAddressButton->setEnabled(false); + ui->removeButton->setEnabled(false); ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); ui->tableWidget_2->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); + subscribeToCoreSignals(); + timer = new QTimer(this); - connect(timer, SIGNAL(timeout()), this, SLOT(updateNodeList())); - if(!GetBoolArg("-reindexaddr", false)) - timer->start(30000); + //connect(timer, SIGNAL(timeout()), this, SLOT(updateNodeList())); + //connect(timer, SIGNAL(timeout()), this, SLOT(updateMyNodeList())); + //timer->start(10000); + updateNodeList(); + updateMyNodeList(); } MasternodeManager::~MasternodeManager() @@ -57,18 +59,50 @@ MasternodeManager::~MasternodeManager() delete ui; } +static void NotifymastertoadUpdated(MasternodeManager *page, CmastertoadConfig nodeConfig) +{ + // alias, address, privkey, collateral address + QString alias = QString::fromStdString(nodeConfig.sAlias); + QString addr = QString::fromStdString(nodeConfig.sAddress); + QString privkey = QString::fromStdString(nodeConfig.sMasternodePrivKey); + QString collateral = QString::fromStdString(nodeConfig.sCollateralAddress); + + QMetaObject::invokeMethod(page, "updatemastertoad", Qt::QueuedConnection, + Q_ARG(QString, alias), + Q_ARG(QString, addr), + Q_ARG(QString, privkey), + Q_ARG(QString, collateral) + ); +} + +void MasternodeManager::subscribeToCoreSignals() +{ + // Connect signals to core + uiInterface.NotifymastertoadChanged.connect(boost::bind(&NotifymastertoadUpdated, this, _1)); +} + +void MasternodeManager::unsubscribeFromCoreSignals() +{ + // Disconnect signals from core + uiInterface.NotifymastertoadChanged.disconnect(boost::bind(&NotifymastertoadUpdated, this, _1)); +} + void MasternodeManager::on_tableWidget_2_itemSelectionChanged() { if(ui->tableWidget_2->selectedItems().count() > 0) { ui->editButton->setEnabled(true); + ui->getConfigButton->setEnabled(true); ui->startButton->setEnabled(true); + ui->stopButton->setEnabled(true); + ui->copyAddressButton->setEnabled(true); + ui->removeButton->setEnabled(true); } } -void MasternodeManager::updateAdrenalineNode(QString alias, QString addr, QString privkey, QString txHash, QString txIndex, QString donationAddress, QString donationPercentage, QString status) +void MasternodeManager::updatemastertoad(QString alias, QString addr, QString privkey, QString collateral, QString status) { - LOCK(cs_adrenaline); + LOCK(cs_mastertoad); bool bFound = false; int nodeRow = 0; for(int i=0; i < ui->tableWidget_2->rowCount(); i++) @@ -86,15 +120,13 @@ void MasternodeManager::updateAdrenalineNode(QString alias, QString addr, QStrin QTableWidgetItem *aliasItem = new QTableWidgetItem(alias); QTableWidgetItem *addrItem = new QTableWidgetItem(addr); - QTableWidgetItem *donationAddressItem = new QTableWidgetItem(donationAddress); - QTableWidgetItem *donationPercentageItem = new QTableWidgetItem(donationPercentage); QTableWidgetItem *statusItem = new QTableWidgetItem(status); + QTableWidgetItem *collateralItem = new QTableWidgetItem(collateral); ui->tableWidget_2->setItem(nodeRow, 0, aliasItem); ui->tableWidget_2->setItem(nodeRow, 1, addrItem); - ui->tableWidget_2->setItem(nodeRow, 2, donationPercentageItem); - ui->tableWidget_2->setItem(nodeRow, 3, donationAddressItem); - ui->tableWidget_2->setItem(nodeRow, 4, statusItem); + ui->tableWidget_2->setItem(nodeRow, 2, statusItem); + ui->tableWidget_2->setItem(nodeRow, 3, collateralItem); } static QString seconds_to_DHMS(quint32 duration) @@ -122,38 +154,66 @@ void MasternodeManager::updateNodeList() ui->countLabel->setText("Updating..."); ui->tableWidget->clearContents(); ui->tableWidget->setRowCount(0); - std::vector vMasternodes = mnodeman.GetFullMasternodeVector(); - BOOST_FOREACH(CMasternode& mn, vMasternodes) + BOOST_FOREACH(CMasterNode mn, vecMasternodes) { int mnRow = 0; ui->tableWidget->insertRow(0); - // populate list - // Address, Rank, Active, Active Seconds, Last Seen, Pub Key - QTableWidgetItem *activeItem = new QTableWidgetItem(QString::number(mn.IsEnabled())); - QTableWidgetItem *addressItem = new QTableWidgetItem(QString::fromStdString(mn.addr.ToString())); - QString Rank = QString::number(mnodeman.GetMasternodeRank(mn.vin, pindexBest->nHeight)); - QTableWidgetItem *rankItem = new QTableWidgetItem(Rank.rightJustified(2, '0', false)); - QTableWidgetItem *activeSecondsItem = new QTableWidgetItem(seconds_to_DHMS((qint64)(mn.lastTimeSeen - mn.sigTime))); - QTableWidgetItem *lastSeenItem = new QTableWidgetItem(QString::fromStdString(DateTimeStrFormat(mn.lastTimeSeen))); - - CScript pubkey; + // populate list + // Address, Rank, Active, Active Seconds, Last Seen, Pub Key + QTableWidgetItem *activeItem = new QTableWidgetItem(QString::fromStdString(mn.GetStatus())); + QTableWidgetItem *addressItem = new QTableWidgetItem(QString::fromStdString(mn.addr.ToString())); + QTableWidgetItem *rankItem = new QTableWidgetItem(QString::number(GetMasternodeRank(mn.vin, pindexBest->nHeight))); + QTableWidgetItem *activeSecondsItem = new QTableWidgetItem(seconds_to_DHMS((qint64)(mn.lastTimeSeen - mn.now))); + QTableWidgetItem *lastSeenItem = new QTableWidgetItem(QString::fromStdString(DateTimeStrFormat(mn.lastTimeSeen))); + + CScript pubkey; pubkey =GetScriptForDestination(mn.pubkey.GetID()); CTxDestination address1; ExtractDestination(pubkey, address1); CBitcoinAddress address2(address1); - QTableWidgetItem *pubkeyItem = new QTableWidgetItem(QString::fromStdString(address2.ToString())); - - ui->tableWidget->setItem(mnRow, 0, addressItem); - ui->tableWidget->setItem(mnRow, 1, rankItem); - ui->tableWidget->setItem(mnRow, 2, activeItem); - ui->tableWidget->setItem(mnRow, 3, activeSecondsItem); - ui->tableWidget->setItem(mnRow, 4, lastSeenItem); - ui->tableWidget->setItem(mnRow, 5, pubkeyItem); + QTableWidgetItem *pubkeyItem = new QTableWidgetItem(QString::fromStdString(address2.ToString())); + + ui->tableWidget->setItem(mnRow, 0, addressItem); + ui->tableWidget->setItem(mnRow, 1, rankItem); + ui->tableWidget->setItem(mnRow, 2, activeItem); + ui->tableWidget->setItem(mnRow, 3, activeSecondsItem); + ui->tableWidget->setItem(mnRow, 4, lastSeenItem); + ui->tableWidget->setItem(mnRow, 5, pubkeyItem); } ui->countLabel->setText(QString::number(ui->tableWidget->rowCount())); - on_UpdateButton_clicked(); +} + +void MasternodeManager::updateMyNodeList() +{ + TRY_LOCK(cs_mymnlist, fLockAcquired); + if(!fLockAcquired) { + return; + } + static int64_t nTimeMyListUpdated = 0; + + if(pwalletMain) + { + BOOST_FOREACH(PAIRTYPE(std::string, CmastertoadConfig) mastertoad, pwalletMain->mapMymastertoads) + { + // try to find status + std::string sStatus = ""; + TRY_LOCK(cs_masternodes, lockMasternodes); + if(lockMasternodes) + { + BOOST_FOREACH(CMasterNode mn, vecMasternodes) + { + if(mn.addr.ToString() == mastertoad.second.sAddress) + { + sStatus = mn.GetStatus(); + break; + } + } + } + updatemastertoad(QString::fromStdString(mastertoad.second.sAlias), QString::fromStdString(mastertoad.second.sAddress), QString::fromStdString(mastertoad.second.sMasternodePrivKey), QString::fromStdString(mastertoad.second.sCollateralAddress), QString::fromStdString(sStatus)); + } + } } @@ -174,15 +234,24 @@ void MasternodeManager::setWalletModel(WalletModel *model) } +void MasternodeManager::on_refreshToadsButton_clicked() +{ + updateNodeList(); +} + +void MasternodeManager::on_refreshMyToadsButton_clicked() +{ + updateMyNodeList(); +} + void MasternodeManager::on_createButton_clicked() { - AddEditAdrenalineNode* aenode = new AddEditAdrenalineNode(); + AddEditmastertoad* aenode = new AddEditmastertoad(); aenode->exec(); } -void MasternodeManager::on_startButton_clicked() +void MasternodeManager::on_copyAddressButton_clicked() { - // start the node QItemSelectionModel* selectionModel = ui->tableWidget_2->selectionModel(); QModelIndexList selected = selectionModel->selectedRows(); if(selected.count() == 0) @@ -190,104 +259,300 @@ void MasternodeManager::on_startButton_clicked() QModelIndex index = selected.at(0); int r = index.row(); - std::string sAlias = ui->tableWidget_2->item(r, 0)->text().toStdString(); + std::string sCollateralAddress = ui->tableWidget_2->item(r, 3)->text().toStdString(); + QApplication::clipboard()->setText(QString::fromStdString(sCollateralAddress)); +} +void MasternodeManager::on_editButton_clicked() +{ + QItemSelectionModel* selectionModel = ui->tableWidget_2->selectionModel(); + QModelIndexList selected = selectionModel->selectedRows(); + if(selected.count() == 0) + return; - if(pwalletMain->IsLocked()) { - } + QModelIndex index = selected.at(0); + int r = index.row(); + std::string sAddress = ui->tableWidget_2->item(r, 1)->text().toStdString(); - std::string statusObj; - statusObj += "

Alias: " + sAlias; + // get existing config entry - BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { - if(mne.getAlias() == sAlias) { - std::string errorMessage; - std::string strDonateAddress = mne.getDonationAddress(); - std::string strDonationPercentage = mne.getDonationPercentage(); +} - bool result = activeMasternode.Register(mne.getIp(), mne.getPrivKey(), mne.getTxHash(), mne.getOutputIndex(), strDonateAddress, strDonationPercentage, errorMessage); +void MasternodeManager::on_getConfigButton_clicked() +{ + QItemSelectionModel* selectionModel = ui->tableWidget_2->selectionModel(); + QModelIndexList selected = selectionModel->selectedRows(); + if(selected.count() == 0) + return; - if(result) { - statusObj += "
Successfully started masternode." ; - } else { - statusObj += "
Failed to start masternode.
Error: " + errorMessage; - } - break; + QModelIndex index = selected.at(0); + int r = index.row(); + std::string sAddress = ui->tableWidget_2->item(r, 1)->text().toStdString(); + CmastertoadConfig c = pwalletMain->mapMymastertoads[sAddress]; + std::string sPrivKey = c.sMasternodePrivKey; + mastertoadConfigDialog* d = new mastertoadConfigDialog(this, QString::fromStdString(sAddress), QString::fromStdString(sPrivKey)); + d->exec(); +} + +void MasternodeManager::on_removeButton_clicked() +{ + QItemSelectionModel* selectionModel = ui->tableWidget_2->selectionModel(); + QModelIndexList selected = selectionModel->selectedRows(); + if(selected.count() == 0) + return; + + QMessageBox::StandardButton confirm; + confirm = QMessageBox::question(this, "Delete Mastertoad?", "Are you sure you want to delete this mastertoad configuration?", QMessageBox::Yes|QMessageBox::No); + + if(confirm == QMessageBox::Yes) + { + QModelIndex index = selected.at(0); + int r = index.row(); + std::string sAddress = ui->tableWidget_2->item(r, 1)->text().toStdString(); + CmastertoadConfig c = pwalletMain->mapMymastertoads[sAddress]; + CWalletDB walletdb(pwalletMain->strWalletFile); + pwalletMain->mapMymastertoads.erase(sAddress); + walletdb.ErasemastertoadConfig(c.sAddress); + ui->tableWidget_2->clearContents(); + ui->tableWidget_2->setRowCount(0); + BOOST_FOREACH(PAIRTYPE(std::string, CmastertoadConfig) mastertoad, pwalletMain->mapMymastertoads) + { + updatemastertoad(QString::fromStdString(mastertoad.second.sAlias), QString::fromStdString(mastertoad.second.sAddress), QString::fromStdString(mastertoad.second.sMasternodePrivKey), QString::fromStdString(mastertoad.second.sCollateralAddress), QString::fromStdString("")); } } - statusObj += "
"; - pwalletMain->Lock(); +} + +void MasternodeManager::on_startButton_clicked() +{ + // start the node + QItemSelectionModel* selectionModel = ui->tableWidget_2->selectionModel(); + QModelIndexList selected = selectionModel->selectedRows(); + if(selected.count() == 0) + return; + + QModelIndex index = selected.at(0); + int r = index.row(); + std::string sAddress = ui->tableWidget_2->item(r, 1)->text().toStdString(); + CmastertoadConfig c = pwalletMain->mapMymastertoads[sAddress]; + + std::string errorMessage; + bool result = activeMasternode.RegisterByPubKey(c.sAddress, c.sMasternodePrivKey, c.sCollateralAddress, errorMessage); QMessageBox msg; - msg.setText(QString::fromStdString(statusObj)); + if(result) + msg.setText("Mastertoad at " + QString::fromStdString(c.sAddress) + " started."); + else + msg.setText("Error: " + QString::fromStdString(errorMessage)); msg.exec(); } -void MasternodeManager::on_startAllButton_clicked() +void MasternodeManager::on_stopButton_clicked() { - if(pwalletMain->IsLocked()) { + // start the node + QItemSelectionModel* selectionModel = ui->tableWidget_2->selectionModel(); + QModelIndexList selected = selectionModel->selectedRows(); + if(selected.count() == 0) + return; + + QModelIndex index = selected.at(0); + int r = index.row(); + std::string sAddress = ui->tableWidget_2->item(r, 1)->text().toStdString(); + CmastertoadConfig c = pwalletMain->mapMymastertoads[sAddress]; + + std::string errorMessage; + bool result = activeMasternode.StopMasterNode(c.sAddress, c.sMasternodePrivKey, errorMessage); + QMessageBox msg; + if(result) + { + msg.setText("Mastertoad at " + QString::fromStdString(c.sAddress) + " stopped."); } + else + { + msg.setText("Error: " + QString::fromStdString(errorMessage)); + } + msg.exec(); +} - std::vector mnEntries; +void MasternodeManager::on_startAllButton_clicked() +{ + std::string results; + BOOST_FOREACH(PAIRTYPE(std::string, CmastertoadConfig) mastertoad, pwalletMain->mapMymastertoads) + { + CmastertoadConfig c = mastertoad.second; + std::string errorMessage; + bool result = activeMasternode.RegisterByPubKey(c.sAddress, c.sMasternodePrivKey, c.sCollateralAddress, errorMessage); + if(result) + { + results += c.sAddress + ": STARTED\n"; + } + else + { + results += c.sAddress + ": ERROR: " + errorMessage + "\n"; + } + } - int total = 0; - int successful = 0; - int fail = 0; - std::string statusObj; + QMessageBox msg; + msg.setText(QString::fromStdString(results)); + msg.exec(); +} - BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { - total++; +void MasternodeManager::on_stopAllButton_clicked() +{ + std::string results; + BOOST_FOREACH(PAIRTYPE(std::string, CmastertoadConfig) mastertoad, pwalletMain->mapMymastertoads) + { + CmastertoadConfig c = mastertoad.second; + std::string errorMessage; + bool result = activeMasternode.StopMasterNode(c.sAddress, c.sMasternodePrivKey, errorMessage); + if(result) + { + results += c.sAddress + ": STOPPED\n"; + } + else + { + results += c.sAddress + ": ERROR: " + errorMessage + "\n"; + } + } - std::string errorMessage; - std::string strDonateAddress = mne.getDonationAddress(); - std::string strDonationPercentage = mne.getDonationPercentage(); + QMessageBox msg; + msg.setText(QString::fromStdString(results)); + msg.exec(); +} - bool result = activeMasternode.Register(mne.getIp(), mne.getPrivKey(), mne.getTxHash(), mne.getOutputIndex(), strDonateAddress, strDonationPercentage, errorMessage); +void MasternodeManager::on_localButton_clicked() +{ + bool bAlreadyHaveLocalNode = false; + // Check if a local Mastertoad already exists + BOOST_FOREACH(PAIRTYPE(std::string, CmastertoadConfig) mastertoad, pwalletMain->mapMymastertoads) + { + if(mastertoad.second.isLocal) + { + bAlreadyHaveLocalNode = true; + break; + } + } + if(bAlreadyHaveLocalNode) + { + QMessageBox msg; + msg.setText("A local Mastertoad already exists."); + msg.exec(); + return; + } - if(result) { - successful++; - } else { - fail++; - statusObj += "\nFailed to start " + mne.getAlias() + ". Error: " + errorMessage; - } + // Only create once the external IP is known + if(GetLocalAddress(NULL).ToStringIP() == "0.0.0.0") + { + QMessageBox msg; + msg.setText("The local external IP is not yet detected. Please try again in a few minutes."); + msg.exec(); + return; } - pwalletMain->Lock(); - std::string returnObj; - returnObj = "Successfully started " + boost::lexical_cast(successful) + " masternodes, failed to start " + - boost::lexical_cast(fail) + ", total " + boost::lexical_cast(total); - if (fail > 0) - returnObj += statusObj; + if(pwalletMain->GetBalance() < 15000.1*COIN) + { + QMessageBox msg; + msg.setText("You must have at least 15000.1 PEPE to cover the 15000 PEPE collateral for a Mastertoad and the tx fee."); + msg.exec(); + return; + } + if (pwalletMain->IsLocked()) + { QMessageBox msg; - msg.setText(QString::fromStdString(returnObj)); + msg.setText("Your wallet must be unlocked so that the 15000 PEPE collateral can be sent."); msg.exec(); -} + return; + } -void MasternodeManager::on_UpdateButton_clicked() -{ - BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { - std::string errorMessage; - std::string strDonateAddress = mne.getDonationAddress(); - std::string strDonationPercentage = mne.getDonationPercentage(); - - std::vector vMasternodes = mnodeman.GetFullMasternodeVector(); - if (errorMessage == ""){ - updateAdrenalineNode(QString::fromStdString(mne.getAlias()), QString::fromStdString(mne.getIp()), QString::fromStdString(mne.getPrivKey()), QString::fromStdString(mne.getTxHash()), - QString::fromStdString(mne.getOutputIndex()), QString::fromStdString(strDonateAddress), QString::fromStdString(strDonationPercentage), QString::fromStdString("Not in the masternode list.")); + // Automatically create an entry for the local address + CmastertoadConfig c; + c.sAlias = "Local Mastertoad"; + c.sAddress = GetLocalAddress(NULL).ToStringIPPort(); + CKey secret; + secret.MakeNewKey(false); + c.sMasternodePrivKey = CBitcoinSecret(secret).ToString(); + + CWalletDB walletdb(pwalletMain->strWalletFile); + CAccount account; + walletdb.ReadAccount(c.sAlias, account); + bool bKeyUsed = false; + bool bForceNew = false; + + // Check if the current key has been used + if (account.vchPubKey.IsValid()) + { + CScript scriptPubKey; + scriptPubKey.SetDestination(account.vchPubKey.GetID()); + for (map::iterator it = pwalletMain->mapWallet.begin(); + it != pwalletMain->mapWallet.end() && account.vchPubKey.IsValid(); + ++it) + { + const CWalletTx& wtx = (*it).second; + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + if (txout.scriptPubKey == scriptPubKey) + bKeyUsed = true; + } + } + + // Generate a new key + if (!account.vchPubKey.IsValid() || bForceNew || bKeyUsed) + { + if (!pwalletMain->GetKeyFromPool(account.vchPubKey)) + { + QMessageBox msg; + msg.setText("Keypool ran out, please call keypoolrefill first."); + msg.exec(); + return; } - else { - updateAdrenalineNode(QString::fromStdString(mne.getAlias()), QString::fromStdString(mne.getIp()), QString::fromStdString(mne.getPrivKey()), QString::fromStdString(mne.getTxHash()), - QString::fromStdString(mne.getOutputIndex()), QString::fromStdString(strDonateAddress), QString::fromStdString(strDonationPercentage), QString::fromStdString(errorMessage)); + pwalletMain->SetAddressBookName(account.vchPubKey.GetID(), c.sAlias); + walletdb.WriteAccount(c.sAlias, account); } - BOOST_FOREACH(CMasternode& mn, vMasternodes) { - if (mn.addr.ToString().c_str() == mne.getIp()){ - updateAdrenalineNode(QString::fromStdString(mne.getAlias()), QString::fromStdString(mne.getIp()), QString::fromStdString(mne.getPrivKey()), QString::fromStdString(mne.getTxHash()), - QString::fromStdString(mne.getOutputIndex()), QString::fromStdString(strDonateAddress), QString::fromStdString(strDonationPercentage), QString::fromStdString("Masternode is Running.")); + c.sCollateralAddress = CBitcoinAddress(account.vchPubKey.GetID()).ToString(); + + c.isLocal = true; + + pwalletMain->mapMymastertoads.insert(make_pair(c.sAddress, c)); + walletdb.WritemastertoadConfig(c.sAddress, c); + uiInterface.NotifymastertoadChanged(c); + + strMasterNodeAddr = c.sAddress; + strMasterNodePrivKey = c.sMasternodePrivKey; + + CKey keyds; + CPubKey pubkeyds; + std::string errorMessage; + if(!darkSendSigner.SetKey(strMasterNodePrivKey, errorMessage, keyds, pubkeyds)) + { + QMessageBox msg; + msg.setText("Invalid masternodeprivkey. Please see documenation."); + msg.exec(); + return; } - } + + activeMasternode.pubKeyMasternode = pubkeyds; + fMasterNode = true; + + CWalletTx wtx; + std::string sNarr; + + string strError = pwalletMain->SendMoneyToDestination(CBitcoinAddress(account.vchPubKey.GetID()).Get(), 15000*COIN, sNarr, wtx); + if (strError != "") + { + QMessageBox msg; + msg.setText(QString::fromStdString(strError)); + msg.exec(); + return; } -} + else + { + QMessageBox msg; + std::string sMsg = "Local Mastertoad created and 15000 PEPE sent to the collateral address. Transaction hash:\n"; + sMsg += wtx.GetHash().GetHex(); + msg.setText(QString::fromStdString(sMsg)); + msg.exec(); + return; + } +} \ No newline at end of file diff --git a/src/qt/masternodemanager.h b/src/qt/masternodemanager.h index d9b34ef8..9e5aca9c 100644 --- a/src/qt/masternodemanager.h +++ b/src/qt/masternodemanager.h @@ -9,7 +9,6 @@ namespace Ui { class MasternodeManager; - } class ClientModel; class WalletModel; @@ -32,9 +31,9 @@ class MasternodeManager : public QWidget public slots: + void updateMyNodeList(); void updateNodeList(); - void updateAdrenalineNode(QString alias, QString addr, QString privkey, QString txHash, QString txIndex, QString donationAddress, QString donationPercentage, QString status); - void on_UpdateButton_clicked(); + void updatemastertoad(QString alias, QString addr, QString privkey, QString collateral, QString status=""); signals: @@ -43,12 +42,25 @@ public slots: Ui::MasternodeManager *ui; ClientModel *clientModel; WalletModel *walletModel; - CCriticalSection cs_adrenaline; + CCriticalSection cs_mastertoad; + CCriticalSection cs_mymnlist; + void subscribeToCoreSignals(); + void unsubscribeFromCoreSignals(); private slots: + void on_copyAddressButton_clicked(); void on_createButton_clicked(); + void on_editButton_clicked(); + void on_getConfigButton_clicked(); void on_startButton_clicked(); + void on_stopButton_clicked(); void on_startAllButton_clicked(); + void on_stopAllButton_clicked(); + void on_removeButton_clicked(); void on_tableWidget_2_itemSelectionChanged(); + void on_localButton_clicked(); + void on_refreshToadsButton_clicked(); + void on_refreshMyToadsButton_clicked(); }; + #endif // MASTERNODEMANAGER_H diff --git a/src/qt/adrenalinenodeconfigdialog.cpp b/src/qt/mastertoadconfigdialog.cpp similarity index 55% rename from src/qt/adrenalinenodeconfigdialog.cpp rename to src/qt/mastertoadconfigdialog.cpp index ed09d651..84a3bd0b 100644 --- a/src/qt/adrenalinenodeconfigdialog.cpp +++ b/src/qt/mastertoadconfigdialog.cpp @@ -1,18 +1,18 @@ -#include "adrenalinenodeconfigdialog.h" -#include "ui_adrenalinenodeconfigdialog.h" +#include "mastertoadconfigdialog.h" +#include "ui_mastertoadconfigdialog.h" #include -AdrenalineNodeConfigDialog::AdrenalineNodeConfigDialog(QWidget *parent, QString nodeAddress, QString privkey) : +mastertoadConfigDialog::mastertoadConfigDialog(QWidget *parent, QString nodeAddress, QString privkey) : QDialog(parent), - ui(new Ui::AdrenalineNodeConfigDialog) + ui(new Ui::mastertoadConfigDialog) { ui->setupUi(this); QString desc = "rpcallowip=127.0.0.1
rpcuser=REPLACEME
rpcpassword=REPLACEME
server=1
listen=1
port=REPLACEMEWITHYOURPORT
masternode=1
masternodeaddr=" + nodeAddress + "
masternodeprivkey=" + privkey + "
"; ui->detailText->setHtml(desc); } -AdrenalineNodeConfigDialog::~AdrenalineNodeConfigDialog() +mastertoadConfigDialog::~mastertoadConfigDialog() { delete ui; } diff --git a/src/qt/mastertoadconfigdialog.h b/src/qt/mastertoadconfigdialog.h new file mode 100644 index 00000000..fec65930 --- /dev/null +++ b/src/qt/mastertoadconfigdialog.h @@ -0,0 +1,27 @@ +#ifndef mastertoadCONFIGDIALOG_H +#define mastertoadCONFIGDIALOG_H + +#include + +namespace Ui { + class mastertoadConfigDialog; +} + +QT_BEGIN_NAMESPACE +class QModelIndex; +QT_END_NAMESPACE + +/** Dialog showing transaction details. */ +class mastertoadConfigDialog : public QDialog +{ + Q_OBJECT + +public: + explicit mastertoadConfigDialog(QWidget *parent = 0, QString nodeAddress = "123.456.789.123:9999", QString privkey="MASTERNODEPRIVKEY"); + ~mastertoadConfigDialog(); + +private: + Ui::mastertoadConfigDialog *ui; +}; + +#endif // mastertoadCONFIGDIALOG_H diff --git a/src/qt/messagemodel.h b/src/qt/messagemodel.h index 88798025..9ac159a0 100644 --- a/src/qt/messagemodel.h +++ b/src/qt/messagemodel.h @@ -67,7 +67,7 @@ struct MessageTableEntry } }; -/** Interface to Memetic Secure Messaging from Qt view code. */ +/** Interface to PepeCoin Secure Messaging from Qt view code. */ class MessageModel : public QAbstractTableModel { Q_OBJECT diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index c4e5322a..89ea1b63 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -144,7 +144,7 @@ void OptionsDialog::setMapper() /* Darksend Rounds */ mapper->addMapping(ui->darksendRounds, OptionsModel::DarksendRounds); - mapper->addMapping(ui->anonymizeMemetic, OptionsModel::AnonymizeTransferAmount); + mapper->addMapping(ui->anonymizePepeCoin, OptionsModel::AnonymizeTransferAmount); } void OptionsDialog::enableApplyButton() @@ -196,7 +196,7 @@ void OptionsDialog::showRestartWarning_Proxy() { if(!fRestartWarningDisplayed_Proxy) { - QMessageBox::warning(this, tr("Warning"), tr("This setting will take effect after restarting Memetic."), QMessageBox::Ok); + QMessageBox::warning(this, tr("Warning"), tr("This setting will take effect after restarting PepeCoin."), QMessageBox::Ok); fRestartWarningDisplayed_Proxy = true; } } @@ -205,7 +205,7 @@ void OptionsDialog::showRestartWarning_Lang() { if(!fRestartWarningDisplayed_Lang) { - QMessageBox::warning(this, tr("Warning"), tr("This setting will take effect after restarting Memetic."), QMessageBox::Ok); + QMessageBox::warning(this, tr("Warning"), tr("This setting will take effect after restarting PepeCoin."), QMessageBox::Ok); fRestartWarningDisplayed_Lang = true; } } diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index cf9aae07..3a0c0a02 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -51,11 +51,11 @@ void OptionsModel::Init() if (!settings.contains("nDarksendRounds")) settings.setValue("nDarksendRounds", 2); - if (!settings.contains("nAnonymizeTransferAmount")) - settings.setValue("nAnonymizeTransferAmount", 1000); + if (!settings.contains("nAnonymizePepeCoinAmount")) + settings.setValue("nAnonymizePepeCoinAmount", 1000); nDarksendRounds = settings.value("nDarksendRounds").toLongLong(); - nAnonymizeTransferAmount = settings.value("nAnonymizeTransferAmount").toLongLong(); + nAnonymizePepeCoinAmount = settings.value("nAnonymizePepeCoinAmount").toLongLong(); // These are shared with core Bitcoin; we want // command-line options to override the GUI settings: @@ -70,8 +70,8 @@ void OptionsModel::Init() if (settings.contains("nDarksendRounds")) SoftSetArg("-darksendrounds", settings.value("nDarksendRounds").toString().toStdString()); - if (settings.contains("nAnonymizeTransferAmount")) - SoftSetArg("-anonymizetransferamount", settings.value("nAnonymizeTransferAmount").toString().toStdString()); + if (settings.contains("nAnonymizePepeCoinAmount")) + SoftSetArg("-anonymizetransferamount", settings.value("nAnonymizePepeCoinAmount").toString().toStdString()); } int OptionsModel::rowCount(const QModelIndex & parent) const @@ -123,7 +123,7 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const case DarksendRounds: return QVariant(nDarksendRounds); case AnonymizeTransferAmount: - return QVariant(nAnonymizeTransferAmount); + return QVariant(nAnonymizePepeCoinAmount); case MinimizeCoinAge: return settings.value("fMinimizeCoinAge", GetBoolArg("-minimizecoinage", false)); case UseBlackTheme: @@ -221,9 +221,9 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in emit darksendRoundsChanged(nDarksendRounds); break; case AnonymizeTransferAmount: - nAnonymizeTransferAmount = value.toInt(); - settings.setValue("nAnonymizeTransferAmount", nAnonymizeTransferAmount); - emit AnonymizeTransferAmountChanged(nAnonymizeTransferAmount); + nAnonymizePepeCoinAmount = value.toInt(); + settings.setValue("nAnonymizePepeCoinAmount", nAnonymizePepeCoinAmount); + emit AnonymizeTransferAmountChanged(nAnonymizePepeCoinAmount); break; default: break; diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp index 273bcc8a..f5e58784 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -313,7 +313,7 @@ void OverviewPage::showOutOfSyncWarning(bool fShow) void OverviewPage::on_pushButton_clicked() { - //send message in 1 MEME OP_RETURN transaction + //send message in 1 PEPE OP_RETURN transaction if(ui->lineEdit->text().isNull() || ui->lineEdit->text().isEmpty()) { //dont have nothin to write @@ -356,7 +356,7 @@ void OverviewPage::on_pushButton_clicked() else if(pwalletMain->GetBalance() < 1) { QMessageBox infobox; - infobox.setText("ERROR: Need 1 MEME balance to send meme message."); + infobox.setText("ERROR: Need 1 PEPE balance to send meme message."); infobox.exec(); } else @@ -403,15 +403,24 @@ void OverviewPage::on_refreshButton_clicked() getMessages(); } + void OverviewPage::getMessages() { LogPrintf("getMessages\n"); ui->listWidget->clear(); //get messages from last 777 blocks, cache this to disk in future because going back too far causes slowdowns - + std::vector cPMsgs; BOOST_FOREACH(const PAIRTYPE(uint256, CPepeMessage)& item, mapPepeMessages) { - CPepeMessage pmsg = item.second; - ui->listWidget->addItem(QString::fromStdString(pmsg.ToString())); + cPMsgs.push_back(item.second); + //ui->listWidget->addItem(QString::fromStdString(pmsg.ToString())); } -} + + sort(cPMsgs.begin(), cPMsgs.end()); + + BOOST_FOREACH(CPepeMessage pmsg, cPMsgs) + { + //ui->listWidget->addItem(QString::fromStdString(pmsg.ToString())); + ui->listWidget->insertItem(0, QString::fromStdString(pmsg.ToString())); + } +} \ No newline at end of file diff --git a/src/qt/paymentserver.cpp b/src/qt/paymentserver.cpp index 557e1041..02e652a3 100644 --- a/src/qt/paymentserver.cpp +++ b/src/qt/paymentserver.cpp @@ -23,7 +23,7 @@ using namespace boost; const int BITCOIN_IPC_CONNECT_TIMEOUT = 1000; // milliseconds -const QString BITCOIN_IPC_PREFIX("memetic:"); +const QString BITCOIN_IPC_PREFIX("pepecoin:"); // // Create a name that is unique for: @@ -32,7 +32,7 @@ const QString BITCOIN_IPC_PREFIX("memetic:"); // static QString ipcServerName() { - QString name("MemeticQt"); + QString name("PepeCoinQt"); // Append a simple hash of the datadir // Note that GetDataDir(true) returns a different path @@ -104,7 +104,7 @@ PaymentServer::PaymentServer(QApplication* parent) : QObject(parent), saveURIs(t uriServer = new QLocalServer(this); if (!uriServer->listen(name)) - qDebug() << tr("Cannot start memetic: click-to-pay handler"); + qDebug() << tr("Cannot start pepecoin: click-to-pay handler"); else connect(uriServer, SIGNAL(newConnection()), this, SLOT(handleURIConnection())); } diff --git a/src/qt/plugins/mrichtexteditor/LICENSE.LGPL b/src/qt/plugins/mrichtexteditor/LICENSE.LGPL index 6bb27ed6..5a7ea8d9 100644 --- a/src/qt/plugins/mrichtexteditor/LICENSE.LGPL +++ b/src/qt/plugins/mrichtexteditor/LICENSE.LGPL @@ -155,7 +155,7 @@ all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. - You may charge a fee for the physical act of memeticring a copy, + You may charge a fee for the physical act of pepecoinring a copy, and you may at your option offer warranty protection in exchange for a fee. diff --git a/src/qt/proofofmeme.cpp b/src/qt/proofofmeme.cpp index 2e7a4d3a..4d938fb7 100644 --- a/src/qt/proofofmeme.cpp +++ b/src/qt/proofofmeme.cpp @@ -80,7 +80,7 @@ std::vector memeContents((std::istreambuf_iterator(memeFile)), } else if(pwalletMain->GetBalance() < 1) { - ui->txLineEdit->setText("ERROR: Need 1 MEME balance to send proof of meme."); + ui->txLineEdit->setText("ERROR: Need 1 PEPE / MEME balance to send proof of meme."); } else { diff --git a/src/qt/qcustomplot.cpp b/src/qt/qcustomplot.cpp index a7adb848..83bbca6c 100644 --- a/src/qt/qcustomplot.cpp +++ b/src/qt/qcustomplot.cpp @@ -1235,7 +1235,7 @@ QRect QCPLayerable::clipRect() const returned a value greater than 0 and less than the selection tolerance of the parent QCustomPlot). The \a details data you output from \ref selectTest is fed back via \a details here. You may use it to transport any kind of information from the selectTest to the possibly subsequent - selectEvent. Usually \a details is used to memetic which part was clicked, if it is a layerable + selectEvent. Usually \a details is used to pepecoin which part was clicked, if it is a layerable that has multiple individually selectable parts (like QCPAxis). This way selectEvent doesn't need to do the calculation again to find out which part was actually clicked. @@ -5927,7 +5927,7 @@ void QCPAxis::draw(QCPPainter *painter) subTickPositions.append(coordToPixel(mSubTickVector.at(i))); } } - // memetic all properties of this axis to QCPAxisPainterPrivate which it needs to draw the axis. + // pepecoin all properties of this axis to QCPAxisPainterPrivate which it needs to draw the axis. // Note that some axis painter properties are already set by direct feed-through with QCPAxis setters mAxisPainter->type = mAxisType; mAxisPainter->basePen = getBasePen(); @@ -6132,7 +6132,7 @@ int QCPAxis::calculateMargin() tickLabels.append(mTickVectorLabels.at(i)); } } - // memetic all properties of this axis to QCPAxisPainterPrivate which it needs to calculate the size. + // pepecoin all properties of this axis to QCPAxisPainterPrivate which it needs to calculate the size. // Note that some axis painter properties are already set by direct feed-through with QCPAxis setters mAxisPainter->type = mAxisType; mAxisPainter->labelFont = getLabelFont(); @@ -14186,15 +14186,15 @@ void QCPColorScale::setType(QCPAxis::AxisType type) if (mType != type) { mType = type; - QCPRange rangeMemetic(0, 6); - double logBaseMemetic = 10; - QString labelMemetic; + QCPRange rangePepeCoin(0, 6); + double logBasePepeCoin = 10; + QString labelPepeCoin; // revert some settings on old axis: if (mColorAxis) { - rangeMemetic = mColorAxis.data()->range(); - labelMemetic = mColorAxis.data()->label(); - logBaseMemetic = mColorAxis.data()->scaleLogBase(); + rangePepeCoin = mColorAxis.data()->range(); + labelPepeCoin = mColorAxis.data()->label(); + logBasePepeCoin = mColorAxis.data()->scaleLogBase(); mColorAxis.data()->setLabel(""); disconnect(mColorAxis.data(), SIGNAL(rangeChanged(QCPRange)), this, SLOT(setDataRange(QCPRange))); disconnect(mColorAxis.data(), SIGNAL(scaleTypeChanged(QCPAxis::ScaleType)), this, SLOT(setDataScaleType(QCPAxis::ScaleType))); @@ -14206,10 +14206,10 @@ void QCPColorScale::setType(QCPAxis::AxisType type) } // set new mColorAxis pointer: mColorAxis = mAxisRect.data()->axis(mType); - // memetic settings to new axis: - mColorAxis.data()->setRange(rangeMemetic); // memetic range of old axis to new one (necessary if axis changes from vertical to horizontal or vice versa) - mColorAxis.data()->setLabel(labelMemetic); - mColorAxis.data()->setScaleLogBase(logBaseMemetic); // scaleType is synchronized among axes in realtime via signals (connected in QCPColorScale ctor), so we only need to take care of log base here + // pepecoin settings to new axis: + mColorAxis.data()->setRange(rangePepeCoin); // pepecoin range of old axis to new one (necessary if axis changes from vertical to horizontal or vice versa) + mColorAxis.data()->setLabel(labelPepeCoin); + mColorAxis.data()->setScaleLogBase(logBasePepeCoin); // scaleType is synchronized among axes in realtime via signals (connected in QCPColorScale ctor), so we only need to take care of log base here connect(mColorAxis.data(), SIGNAL(rangeChanged(QCPRange)), this, SLOT(setDataRange(QCPRange))); connect(mColorAxis.data(), SIGNAL(scaleTypeChanged(QCPAxis::ScaleType)), this, SLOT(setDataScaleType(QCPAxis::ScaleType))); mAxisRect.data()->setRangeDragAxes(QCPAxis::orientation(mType) == Qt::Horizontal ? mColorAxis.data() : 0, @@ -14551,7 +14551,7 @@ QCPColorScaleAxisRectPrivate::QCPColorScaleAxisRectPrivate(QCPColorScale *parent connect(axis(QCPAxis::atBottom), SIGNAL(scaleTypeChanged(QCPAxis::ScaleType)), axis(QCPAxis::atTop), SLOT(setScaleType(QCPAxis::ScaleType))); connect(axis(QCPAxis::atTop), SIGNAL(scaleTypeChanged(QCPAxis::ScaleType)), axis(QCPAxis::atBottom), SLOT(setScaleType(QCPAxis::ScaleType))); - // make layer memetics of color scale memetic to axis rect and axes + // make layer pepecoins of color scale pepecoin to axis rect and axes // the axes must be set after axis rect, such that they appear above color gradient drawn by axis rect: connect(parentColorScale, SIGNAL(layerChanged(QCPLayer*)), this, SLOT(setLayer(QCPLayer*))); foreach (QCPAxis::AxisType type, QList() << QCPAxis::atBottom << QCPAxis::atTop << QCPAxis::atLeft << QCPAxis::atRight) @@ -16099,7 +16099,7 @@ void QCPGraph::getPreparedData(QVector *lineData, QVector *sca } else if (currentIntervalStart.value().value > valueMinRange && currentIntervalStart.value().value < valueMaxRange) scatterData->append(currentIntervalStart.value()); } - } else // don't use adaptive sampling algorithm, memetic points one-to-one from the map into the output parameters + } else // don't use adaptive sampling algorithm, pepecoin points one-to-one from the map into the output parameters { QVector *dataVector = 0; if (lineData) diff --git a/src/qt/qrcodedialog.cpp b/src/qt/qrcodedialog.cpp index 18efbc51..041fde19 100644 --- a/src/qt/qrcodedialog.cpp +++ b/src/qt/qrcodedialog.cpp @@ -83,7 +83,7 @@ void QRCodeDialog::genCode() QString QRCodeDialog::getURI() { - QString ret = QString("memetic:%1").arg(address); + QString ret = QString("pepecoin:%1").arg(address); int paramCount = 0; ui->outUri->clear(); diff --git a/src/qt/res/bitcoin-qt.rc b/src/qt/res/bitcoin-qt.rc index 939c5ea7..a6a5b230 100644 --- a/src/qt/res/bitcoin-qt.rc +++ b/src/qt/res/bitcoin-qt.rc @@ -1,4 +1,4 @@ -IDI_ICON1 ICON DISCARDABLE "icons/memetic.ico" +IDI_ICON1 ICON DISCARDABLE "icons/pepecoin.ico" #include // needed for VERSIONINFO #include "../../clientversion.h" // holds the needed client version information @@ -18,14 +18,14 @@ BEGIN BEGIN BLOCK "040904E4" // U.S. English - multilingual (hex) BEGIN - VALUE "CompanyName", "Memetic" - VALUE "FileDescription", "memetic-Qt (OSS GUI client for Memetic)" + VALUE "CompanyName", "PepeCoin" + VALUE "FileDescription", "pepecoin-Qt (OSS GUI client for PepeCoin)" VALUE "FileVersion", VER_FILEVERSION_STR - VALUE "InternalName", "memetic-qt" - VALUE "LegalCopyright", "2009-2014 The Bitcoin developers, 2012-2014 The NovaCoin & PPCoin developers, 2014-2015 The Memetic developers" + VALUE "InternalName", "pepecoin-qt" + VALUE "LegalCopyright", "2009-2014 The Bitcoin developers, 2012-2014 The NovaCoin & PPCoin developers, 2014-2019 The Memetic - PepeCoin developers" VALUE "LegalTrademarks1", "Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php." - VALUE "OriginalFilename", "memetic-qt.exe" - VALUE "ProductName", "memetic-Qt" + VALUE "OriginalFilename", "pepecoin-qt.exe" + VALUE "ProductName", "pepecoin-Qt" VALUE "ProductVersion", VER_PRODUCTVERSION_STR END END diff --git a/src/qt/res/icons/atfsra.7z b/src/qt/res/icons/atfsra.7z deleted file mode 100644 index b1d1110f..00000000 --- a/src/qt/res/icons/atfsra.7z +++ /dev/null @@ -1,53 +0,0 @@ - - - - Nya - icons.7z - - - - - - - - - -
-
-

icons.7z

-
Be cautious when downloading this file, this is the internet, bad people exist; so you should use your anti-virus before running any potentially malicious content. -
-
-
-
- -
- Found a virus? You can report it by sending an email to abuse@nya.is. Want a harmless file type whitelisted? Send @tastyneko a tweet. -
-
-
-
-
- - \ No newline at end of file diff --git a/src/qt/res/icons/atfsra.7z.1 b/src/qt/res/icons/atfsra.7z.1 deleted file mode 100644 index b1d1110f..00000000 --- a/src/qt/res/icons/atfsra.7z.1 +++ /dev/null @@ -1,53 +0,0 @@ - - - - Nya - icons.7z - - - - - - - - - -
-
-

icons.7z

-
Be cautious when downloading this file, this is the internet, bad people exist; so you should use your anti-virus before running any potentially malicious content. -
-
-
-
- -
- Found a virus? You can report it by sending an email to abuse@nya.is. Want a harmless file type whitelisted? Send @tastyneko a tweet. -
-
-
-
-
- - \ No newline at end of file diff --git a/src/qt/res/icons/bitcoin.icns b/src/qt/res/icons/bitcoin.icns deleted file mode 100644 index a10aae93..00000000 Binary files a/src/qt/res/icons/bitcoin.icns and /dev/null differ diff --git a/src/qt/res/icons/bitcoin_testnet.png b/src/qt/res/icons/bitcoin_testnet.png deleted file mode 100644 index ee2dc405..00000000 Binary files a/src/qt/res/icons/bitcoin_testnet.png and /dev/null differ diff --git a/src/qt/res/icons/memetic-128.png b/src/qt/res/icons/memetic-128.png deleted file mode 100644 index 963321d1..00000000 Binary files a/src/qt/res/icons/memetic-128.png and /dev/null differ diff --git a/src/qt/res/icons/memetic-16.png b/src/qt/res/icons/memetic-16.png deleted file mode 100644 index df1e6b7b..00000000 Binary files a/src/qt/res/icons/memetic-16.png and /dev/null differ diff --git a/src/qt/res/icons/memetic-256.png b/src/qt/res/icons/memetic-256.png deleted file mode 100644 index 27f51274..00000000 Binary files a/src/qt/res/icons/memetic-256.png and /dev/null differ diff --git a/src/qt/res/icons/memetic-32.png b/src/qt/res/icons/memetic-32.png deleted file mode 100644 index a81b7127..00000000 Binary files a/src/qt/res/icons/memetic-32.png and /dev/null differ diff --git a/src/qt/res/icons/memetic-384.png b/src/qt/res/icons/memetic-384.png deleted file mode 100644 index 41af8ad4..00000000 Binary files a/src/qt/res/icons/memetic-384.png and /dev/null differ diff --git a/src/qt/res/icons/memetic-48.png b/src/qt/res/icons/memetic-48.png deleted file mode 100644 index 7521cfd3..00000000 Binary files a/src/qt/res/icons/memetic-48.png and /dev/null differ diff --git a/src/qt/res/icons/memetic-512.png b/src/qt/res/icons/memetic-512.png deleted file mode 100644 index 27a57eea..00000000 Binary files a/src/qt/res/icons/memetic-512.png and /dev/null differ diff --git a/src/qt/res/icons/memetic-768.png b/src/qt/res/icons/memetic-768.png deleted file mode 100644 index a9906971..00000000 Binary files a/src/qt/res/icons/memetic-768.png and /dev/null differ diff --git a/src/qt/res/icons/memetic-80.png b/src/qt/res/icons/memetic-80.png deleted file mode 100644 index def36e48..00000000 Binary files a/src/qt/res/icons/memetic-80.png and /dev/null differ diff --git a/src/qt/res/icons/memetic-fullsize.png b/src/qt/res/icons/memetic-fullsize.png deleted file mode 100644 index 006d5022..00000000 Binary files a/src/qt/res/icons/memetic-fullsize.png and /dev/null differ diff --git a/src/qt/res/icons/memetic.ico b/src/qt/res/icons/memetic.ico deleted file mode 100644 index 0a1c63d5..00000000 Binary files a/src/qt/res/icons/memetic.ico and /dev/null differ diff --git a/src/qt/res/icons/pepecoin-128.png b/src/qt/res/icons/pepecoin-128.png new file mode 100644 index 00000000..9ed5af6a Binary files /dev/null and b/src/qt/res/icons/pepecoin-128.png differ diff --git a/src/qt/res/icons/pepecoin-16.png b/src/qt/res/icons/pepecoin-16.png new file mode 100644 index 00000000..6124992d Binary files /dev/null and b/src/qt/res/icons/pepecoin-16.png differ diff --git a/src/qt/res/icons/pepecoin-256.png b/src/qt/res/icons/pepecoin-256.png new file mode 100644 index 00000000..7eedaa8f Binary files /dev/null and b/src/qt/res/icons/pepecoin-256.png differ diff --git a/src/qt/res/icons/pepecoin-32.png b/src/qt/res/icons/pepecoin-32.png new file mode 100644 index 00000000..6124992d Binary files /dev/null and b/src/qt/res/icons/pepecoin-32.png differ diff --git a/src/qt/res/icons/pepecoin-384.png b/src/qt/res/icons/pepecoin-384.png new file mode 100644 index 00000000..59fc86d5 Binary files /dev/null and b/src/qt/res/icons/pepecoin-384.png differ diff --git a/src/qt/res/icons/pepecoin-48.png b/src/qt/res/icons/pepecoin-48.png new file mode 100644 index 00000000..ad721b94 Binary files /dev/null and b/src/qt/res/icons/pepecoin-48.png differ diff --git a/src/qt/res/icons/pepecoin-512.png b/src/qt/res/icons/pepecoin-512.png new file mode 100644 index 00000000..59fc86d5 Binary files /dev/null and b/src/qt/res/icons/pepecoin-512.png differ diff --git a/src/qt/res/icons/pepecoin-64.png b/src/qt/res/icons/pepecoin-64.png new file mode 100644 index 00000000..ad721b94 Binary files /dev/null and b/src/qt/res/icons/pepecoin-64.png differ diff --git a/src/qt/res/icons/pepecoin-80.png b/src/qt/res/icons/pepecoin-80.png new file mode 100644 index 00000000..9ed5af6a Binary files /dev/null and b/src/qt/res/icons/pepecoin-80.png differ diff --git a/src/qt/res/icons/pepecoin.hqx b/src/qt/res/icons/pepecoin.hqx new file mode 100644 index 00000000..a639fc8e --- /dev/null +++ b/src/qt/res/icons/pepecoin.hqx @@ -0,0 +1,2209 @@ +(This file must be converted with BinHex 4.0) +:%'-j0f3e0Q4L0Q-fCQ3h0M)%9%9B9(4dH(3%!!!!!Y!!!CPe5bG)EhFJG'mJGA0 +P)(4SDA-JD@0[EMS+#P0dCA!J-6SJ3fp`H5"dD'8JD@0[EL"dEb"dD'8JBfaTF'* +[BA*N#Q%T)%0XD@0V)'pZ)(4SDA-JCQPXC5"QFQpY)(4SC5"'D@jNCA)+BLNJ3fK +[Eh0P)#G(CA3J5@jQEbFJCR*[E5"dD'8J*dCTE'8R)'ePER8Z#Q-T)%PZ)(4SC5" +TEQC[)(GTEQ4[Gb"dD'&d)("[F(-JGA!X)'0XD@0V)'pZ)(4SC5"TBfpZ#Q3T)%0 +SEfpcC5!R3fp`H5FJCR*[E5"dD'8J*d9NDA3R)'ePER8Z#Q8T)%0XEh0P)(4SC5" +TEQC[)(GTEQ4[G`S+8h4PF#!b1L"3BA0dC5"dD'8JD@0[EL"dEb"dD'8JC'9cDA* +PC#"TG'9Y#Q%T)%G[)(4[)(4SC5"TG'9Y)'PZ)(4SC5"'D@jNCA)JG'KKG#"jEh8 +JGf&ZG#"K)'0eFh4[E5"TBfpZ#Q)T)%0XD@0V)(4SC5"TG'9Y)#KQD@aP,#"QEfa +NCA)X)'4TFfXX)'9dBbNJ#Q)T)%0SEfpcC5!R4f9d)%PZCQmR)'CbEfdJG'KP)#G +'D@aP*b"YC@je,JTM+5"*EL"dD'8JD@jQEb"hD@jNEhFJG'KKG#"`Eh"c)(9`,#" +ME'PMDb"[EL"dD'8JD@0[EJTN+5"$D'p[Ff8J*e"KFh4P*b"QFQpY)(4SC5!R4@4 +TG#FJE@9ZG5i+C5NJ3fa[Ff8JG'KP)'PZCQmJGfPZC'ph#JT6G'9`)$-k)!T&EQT +[H5"jEh9b)'jPGfaj)'0eFh4[E@PkC@3JD@0[EL%+#NC[FL"YEh*P)(4SEh*[G@G +S)'4TFQ9MG'P[ER-X)(0PC5""F("XC5Gc)(GPBR0TG'8JBA3k#QKdG(!k,bphGhF +ZBA"`E'8ZBfpY,h0eF("[FR3[E@&M-6!a,f0eFh4[E@PkC5mf,`V6V!!!!3!!!CP +$!!'B3`!!!$)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!CJrD@0ZF`!"Q$pTFc-b!!!#SB%!K8Z#!!)G(8@&5`%G(B!!!cE +$@8D$5`SpUfXJ(3"!rrGR4)",'%T"d2q'9Lj,3rrrr(K"5dP(hIrF6&Xh5d@!rhM +%D6Y3k2rU8Q"6,NY&rrrl3eqfmIra@ep405K,4Irr`U*CJqA,APj,58X!5dArri" +%b&*-8eeIhiC,!%Y&rl921$KBB@%qq2q'5`",42pC4$mp2Q&K32IrKN`!!%,rjfY +,5cK)0cjG`BG-!!"!rrq"5dXh1NXd4)k)J!!-+'"J38Xl1%T,1djH2S-!!dY,0MQ +!5iJ!!Ke'5i3!J3#&I))!!QKSHB9m!@KSJ!!$H0D1HS0m#RM(R'TS!(rrqCKjJR` +@hrqZP'pmI[rrrD0iI(Z"k2rRMjecI(k!rhMAQA@(lrr`NDD,ERaqrrrmLjR1pIr +fPU@3!(0YI(lrrpE!NUhYh*QMMB9m!(aqrrqTIYU5P*UNQ1QZI!"mI[r1LA9mQ+H +RKIVrVR`!I(lrPBb"IS1RTiIkrkjm!!"rrqkEI(aeMh5%Q0D[I!!!IrrrURamHhC +mFiUeX)!!$'q9PAemH(plI(D(Nhk$!!0mI(eqJ(b)!!*SHRb%!)%!J%`!6B&-JJ! +#0$4*K8`"0$5!!!0+b'C+Jd`+5,0j0M3!8[rhG%Q"6"G0e2q5@$e08Irrr)0(6%a +8i2rI9Pe"6&#!rhM*GN4Gk[rVA@&82%a3rrrl6QUmm[rbCf"936P-82rrb+TRMHE +3D9p8@8`!6&$rria4c9e6@&pUiT*0!%a3rlYH3NKJBQ*,q2q563"082pM6NP(5@* +K6IMrNNd!!&,rkAK06%033NPRaT00!!"5rrq-6%a%4%a"6jH8J!!-2A"`6de%48a +-49jY8B-!"Na-4%C-6%f)!!)d5Nb%!(-iE@X!!!%)!!!!!#Fh1M`m26N#!!!!!!! +F1f(qrrrrrrrrM6%c!!!!PIcrrrrrrrrrrrrmpfF8!*ErrrrrrrrrrrrrrrRqc!2 +$rrrrrrrrrrrrrrrqrrD'rrrrrrrrrrrrrrrrrrqkf2rrrrrrrrrrrrrrrrrr*Tr +rrrrrrrrrrrrrrrrrh`"Lrrrrrrrrrrrrrrrrrk8!*IrrrrrrrrrrrrrrrrpV!!( +Rrrrrrrrrrrrrrrrr-`!!Urrrrrrrrrrrrrrrr!8!!*IrrrrrrrrrrrrrrrF!!!" +MXVABrrrrrrrXYE1R!!!!!!!!!Nl9rqCd$!!!!!!!!!!!!!!!!bd)!!!!!!!!!'P +X-c)!!!KbT3#-5id!M8X!5SF!!"b!(3!YMNZ"(B-!"4d`KS-S2)a,"$-kKS%EJ`! +'(8Errp%[1)T,##p(krre'5)H(B!!!4e'J2m#hcNdKdX25LY@mrrrp4YC6#NG!!! +G4i(r!ZT',i9,!dJSCrQ!r`RX(&p94ad!!#C)J[m$mP8V5S*,!dBNH[f!r`Vm@cj +J@%`L!%Y!5)2r!rPR+%L!5`*%)Sq#r`Tf0@&J9NXI5dY#5)6r"rek*%C,3L+NJ[m +,N5jJB9a234e,5d*)Jrm([PCmL5)j*ED#r`bU+PjKAe4++ae,5d*)J[m(q#eC2CZ +P0FH#r`fm+PaKAPC)+L%!5dY#5),r"IFUAP&8rS2r$XJY@Q&I9MSP2NX!5dY#5), +r"[U`4Lm`J[k"r`r",ePKANmU(NP,!!",5d*)JImEl5+6rp8a-PQmfEp`,PTJA$a +$`4Y,5`!!5dY#5)(r&H)H*(cpa#e51c)k6Q&K9bb'qI)E5dZ!!!*,3NL"r`IL)%J +RCrQ#4S*K#&)da2rrmKY,5i!!!NY#5)$r#26@)%Y++P@"1i&K!PSUiB$r!r)E5dZ +!!!j,3NMrrlBV*adP*L`f49k"B3&#-B(r![)E5i%!$NY"52rr8&YI8da&2ce"@B& +K!8FaJIm#mKY-JJ!82NMrrh`l24ib1$`p15CKB@"KAb[JJ2m#mKY-JJ!(0dMrrrU +MLb'#5`dQANJN*8952DEPrr)D6))!!59)JIm"iL#"5`e+*P)R58N[-Np"-Zlb'B- +!!4e)JIm"iL#"5`dm1LP%5dY(($jK1-Ab'B-!!4e(JIm"iL#"5`)R2c'!5`G(+$X +d42Ie'B-!!4dZJAd"F5'!5`-e1#Y'J%X(4b9d6hGmGaZ$!)-G"b8p5dXc1&BQJNX +"0"k#(BS!J%X$+9KJ*B*,N`!%5bFQ+6L!5jF!!adq5dZX!+8!M(b0!)em!(Z(!)& +S!'q1I)&SJ`!&D(5ZUfpeM(`%FRZZUQH$!!CTJrrrhh4dLR`)F)6arrKPE'PSJ!! +"D)1!r`,THR+(I!plEShfrrriCjL$E@J!!'L$JIm#m)0`KA`$HffBqi$r#I*ST*& +jD!!!E)5#r`2fM@jlJR`$HQZPrS$r#[f4KkD@I'S!I(H$Jrm$qjKYHi"m!RPUXi, +r#U*qTk@5HQPmI(L%K2m(rU9VHRaiDm'#r`ZdH+DRRi9eD(amH)5$r`I5MDH[DR4 +YcB,r$-9dT+HMMhTYD(amH)1#r`IkG+#&Zm*hf),r$G&cSUHMNRaYDJ"mI(L%J[m +&qA1NQ)cqJrm1fA@KTk16GfafI!"mI(L%J[m'qmQ$GAQUrS(r$p9fS+HLMh"SHh` +!!(amH)5"ra[bDlEriRGlMp(NdjjhSDDIJ)(8CRam!!"mI(L$JIm9kQKVT[lAGjQ +$I)19TkHFG+hlpQCmI)!!!RaiJi(r#1TTHffCqkZ1U)'R#*Pie[rrpQCmI)!!!Ra +iJi$r#2IKDAamESfTK)'R!U&akS$r!rCQI(b!!"4mH)6rrmecF@KXEhCrMD@RU+H +RLhD"r`,fCRb"!"4mH)6rriQKTTU6MBL'LU#STkHSMhD"r`,fCRb#!"4fK2rrTS5 +'D(&dGACdF+HSTkHPFqQ!r`,fCRb#!!GcK2rrqm'`DS*m$@bPN!"XESfCIX,YrrC +QI))!!@b%JIm"kQQ"I!elF*TYHhY`HjD+Gr2fCS-!!@L%JIm"kQQ"I!eeJh0jI(a +kD)HRJGIfCS-!!@L$JIm"kQQ"I!*YKh#!I!GkEhaqJ[RiCB-!"fKcTkLRTjpUJ(` +$FS&eHS"m"hTZSBLMTk4RJ`!!DB*S"fafI(abJCaXJR`"FQQ#D)S!J(`$ECqQE)* +mN`!%I'eaFh5!I*F!!fKfI(bX!+8!!%f$6!"0K%b0!!&-6B&-!%f!6!"0J%`#68a +-K`!!-i!d!$f%6!006%a0Jdb"0)-!"c4%NBip4%a0Jd`!6B&-"Ne-2df4M$+$!!B +d@2rre%0#KN`!6B"-#$eCl2rf-$Fd0)!!!64BJ2m)i8a!68a06%a0JN`11fEcrrr +f-9Y21M3!!$4BJIm#keFpK8`$5cPdqB$r#HdbB&G+0!!!19Q#r`,cC6Z$6!0+1)A +pJ2m+r'T+B9P00J"04eQ$r`2jG$P,J%`#56DBJ[m+JN4LB9G-08e-5&Q%r`IpKMG ++6%FhUi,r#jSrB@*H88Bd6%a)@B2r"m0QL*-f3cUmJ[m-X$aIBQ"@5cXd6%a)@B, +r"rJrA%QMV8I,J[m0`6eHBQ"B5cSf!%a-5&Q#r`Ah29pAC2k$r`l-3&eLB&K%1%C +0!%a-5&Q#r`EkYPG"3)hqJIm2aN*FB9p82$4,6!!!68a)@B(r'qdiR2rB4%&S`G[ +$I6pGB9j(9-8a68`!!%e05&Q"raAM0$H(rFJr9dK#4e9LBPSpN!$jmc&06B!!!Na +)@B(r"q-e5cPeqBe2JQ))9dE)rrrc-8e-J!!#6%KCJ2m)p0Fe68`kCBY)J@)#A6l +MJ2m$mc&06)!!$Ne)@IrrZcik0$Jj2N91B)&L!8e'JIm#mc&0J3!168GCrrpJA@& +B8dj,58aFJ@)"8%D"r`,c-8f#!"4'@IrrKdK*0$p#4%9$1@&LB@&J2Z+!r`,c-8f +#!!K#@IrrqUZ808f"6!diB&%i1%pA6khRrr-a6B)!!6KCJIm$ic906B"-$$TB18Y +,28*96%A[mc#$!!%d@B(r!Z-e6B"-$84(2%P06%Sd5Q*'bI-`J`!"0&L"r`,M08f +!6!)j5Mk!6!G+28e$9IIf-)-!!64$JBN)I6C068a!4Me+J%`(5MZ"AS1*K$+$!)- +d#$K&68a!4PSj6B&-!%#$0)S!J%`%1PaK1%f!6!"0N`!(66Nk2%*-6%fA!!-d4Ne +-V!"X1'eV!!!%#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!cD@e`FR9hH(KiHATkD3N!!!!!!!!!!!!!!!!!!!!!3rVrrrrrrrrrrrrrrrr +rVJ)!!!!!!!!!!!!!"'YfGP6XrrrrrrrrrrrrrrrrrrrrK&"fGPB!!!!!!!!`qrR +irrrrrrrrrrrrrrrrrrrrrrrqqrRfmJ!!!!!!!$(jrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrMmfX&5!!!!-IRrrrrrrrrrrrrrrrrrrrrrrrrrrrrrq2RprIeH!!!arIr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrlqIlrrGN!!$hrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrmrrrrq3!,dIrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlM!DIrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr+Y[rrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrp3mRrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrhm!Q[rrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrq'!"Grrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrpd!!#(rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrSJ!!!1,rrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrpS!!!!T[rrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrbi!!!"Srrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr`!`!!!#crrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlS!!!!!!Zcrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrJJ!!!!!!X[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrp*!!!!!!"crrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrK-!!!!!!$[rrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrd!!!!!!!!-Irrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr-!!!!!!!!aq[r +rrrrrrrrrrrrrrrrrrrrrrrrrrrrimJ!!!!!!!$$mq[Vqrrrrrrrrrrrrrrrrrrr +rrrrlq[Ia!!!!!!!!!epVDfYVIq,rrrrrrrrrrrrrrV9XDfYVDdX!!!!!!!!!!!! +!!!!!"Q(@rrrrrrrrr+Xa!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*JpIrrqU!S!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!13A-J!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"TD$-b!!!2eqN!NdZ@!*9,P!#A5id +!JKd!(TG,Jaf(!!FG+8K)3K`Y5T4,"M3F1NK),4f(!!JGA2rrrSdG+8Q55`B`('c +krrpeJ4f%!!%GA)(r!k%I*NL25`4+,"aqrB$r!h8G)L5!(B)!!4eFJ[m$YL-M4Be +,"%JS(T6qJIm(G5"D8d8Q(4f"!!%GA)2r!m8U)81,5`0(*5#RJrm(G5"H@&"))4f +"!!%GAB6r!p3b(d#*5`0&)b5jK2m(CKpKA94,-af!!!*5(9f&r`2L2KimKdX$3L% +XbB6r#+FG3'&H98`l(B!!!N`PABEr!qa,(6L&5`-r(c6BK2m2`L!hB@&H98`l(3! +!5dXQABIr!r0E(65$5`-m(MlMK2m,eLN[B'&JA&*,0"d!J%X"*Pf)r`2lE"`[J8X +$0ae0lS6r#q3d+PjKB9pB6NSU(B&,!5CGKrm,qGhbJK`V5NXc(&ceK2m-m8-Q@f& +KB&a55d8H(B&,!5CGK[m,b63E+DZA(#J[('hkK2m0q&3M@'&KB&e96%NU(4f"5`% +QABAr#r`c1&T#)HDX)4b#rB6r$[YQ)99KB@"G9Nj&+"dG!)&,!5CGKIm*j4KBB@! +IYIr,YiAr$rjf(e*KB@"G9Nik)#Nr!!#"5`%QABAr"rNU2Q&D-9$pKrm2K4j2B@& +JA9C(+"ih5dX!!)&,!5CGK[m(Y5BF(%%KIIk%r`lpK4j1B@&JA9Bf(4j(5dZ!!)& +,!5CGK2m+diAXlF5A(MNIF[5#r`rSBap2B@&IA%SQ-8SI6%Y,J3#!5`%QAB6r(f- +G2H(rrjXG3L3dLll'V(%Q+9CKB9pD0aealR8I6%Y,J3#!5`%QAB6r%&mJ)$(5rrp +q)9K$+KmG)c*,J'%)Ae%R0,lrrh8IJ%Z"!)",!5CGK2m0Ab4$)5M%rrY--@&LB&q +$B30((Q2ZJ2m"G4q!5i%!J%X"*Pf%r`TI*8Y')b1arp8H8i9K!cmIQIf"r`&e(i" +,JJ!$5dXQAB6r#PmN5dY)*afEj60&K'%#45'mJrm$G4p-5i-!!dY,*Pf"r`h1Fh" +$)d)p0c!G(4iT@i0K!PiK2)6r!h8I5dZ$!!0,5bCGJ2m$c5%a-S!F"5!S-6Y&9)9 +K!P)F2)6r!h8I6%Z$!!0,5bCGJ2m0F$&KB9KEAejA8Nj089f%B3*A($b%r`0e(da +,K!!#6#CGJ2m1E60KB8FZ)KdF(4mI(4p)K'%"+cZ%r`*e(db&!!*-*Pf!r`r&(MB +i(L%m3NG+5dY*04pJJ'%&AQ*K8"fjJrm#G4p-K3!#65CGJIm%`Q*I255%5`j%'ea +K6#-F*djK2b@pl2k!r`*e(df&!!*3*&f%r`&I*B4,&$iHB8iH-d)a(6PI1a`G9HV +rrh8H6)8!!P)HAB6r!9mNK%X%-LeF)M+!5`Y!)5PB9&3TDIrrG4f(!!%GAB6r!9m +NK%X%)N-h*8U"5`SY(6"KB8JerIpe(BF!!4eGK2m"Ab5$5`3p(e!G2i*,#LdG)9K +I-PArrh8GK`!"(9b%r`&I*)0,!b8j0#Q$5`SY0eXF(bh6rrpe(BF!!4e&J+k"V3& +)*)*,"$JJ8adrJdX&,6'VH@LKJ+d"9"f(!)8G!K`F,)","8SX(8-r*)4,!63FKKf +(!)8G!Le"5S","6JL9@%`,B9,!8!QK4f4!)&,"5meB@&$*B9,R3!(5dXd)P4C+Lk +$5k%!!#b!(3%Q4i&,T3!"(6+"5r-!k3#6I*B!PAb8!*GmM3#$D*GmJfL(!!CSF)5 +$IfK[PA`'FQKkJi0cD)F!#'L4rrrqX@KYHj*m"R"SQr[rrk+"D)3!!@L4JIm$[QP +XHSpm"(YZD+IpJ2m'SQKXE'KSDB)!!@L4J[m$c@aVHBem"(YYDEAqJIm(SQUCLha +XD'L"!!&SNB2r!pG`DRL,I!0kE'V#Jrm(SQZLPiCjDQL"!!&SNB6r!q&eDAH*I!0 +jDfc2K2m(Q'UQRijmF'L!!!*rDC'&r`2VI@PeKh`$H'TafS6r#-*SL+HLNAjcD)! +!!RaXNBEr!r''D(5&I!0hDAIMK2m2e@TrTkHLNAecD!!!I(aXNBIr!rH3!'KbJh` +$G@Ppki6r#q*`HDDRTTq,Hh"S!)"m!@b4L2m$r*YSF)&m!h0SKr1%r`[XGh1PTkH +NPi*iE@L"I!&XNBIr#rVRpDTSERYmFQL3!2H%r`ceJ(#LTkHQRBTlGQPSJA`"E*' +'r`[CGQG[aEGSEA"SR2Z%r`hkLffITkHQS*&qGfeSD)&m!@b4KIm,r(@"SBTUlFC +VD+VqK2m1r*GVR+HRTD#6JRGXD'N!JA`"E*'&r`RYCCqRTfV-rp[0KIm2rU&UQDH +RTTq5Jh4TEAF!!)&m!@b4KIm(qh#'Tk&kLIf(r`qVDCHSTkDJNi"YDA0mI!!!JA` +"E*''r`I-EQGSL@bQrS6r$[fVDCDSTk@JP(PSDATmI)!!JA`"E*'%r`VKV2(beVG +TJ@UIpS,r$1q9DTDSTk5GLfjeK@Q!I)%!J(`"E*'%rab9D(hUrrqkDBT[GV$4emD +HEA1GU+HMQhaSR[1LDB"mJ3#!I!&XNB6r(*0UDAAJrrqRE*q,G'TSERb5TkLRT*9 +`GY,rrk*TJ(b"!)"m!@b4K2m2NfYjDQr@rrb'HkLSTkDSU)'R!ieTPI1!r`'LDB" +mJ3#!I!&XNB6r#j0VI(PVE-RriQQDU)1R"+L(DERpJIm"SQQ!I))!!hamE*'%r`f +6DhamHfaSZZefMDHRU)#R!kL0Dp'$r`1LDAamJ`!$I(aXNB(r#0fJRS"VH(CdF)" +S"(1LTkHSJ+F#T@YpK2m$SQPmI)-!!hamE*'!r`cFDhTmD'GSDh0lK)fEJDF!U)# +R!TPSI)6r!k*TI(b$!!0mI'b4J2m0RRZSU*kKTU5HQC@8Q+5!U!DRU+HRRQKmK2m +$SQPmI)3!!RaXNB$r$TamU+L1GfeSCfKTD@KUN!#%T`&dI)6r!U*TI)8!!RaXNB$ +r$pCTIi&TDR9iHRYmI(YbDUD!U!@PU+LAD-q$r`+LDAb&!!*pE*'"r`68PC0mDi4 +m$RPRSUL8EQGbPDL(EG(arS$r!U*TI)8!!RjVNB6r!C0VK(`8GQQRPQPbH(&SJU@ +%CfL-m2rrSQPmK3!#IfQ4K2m"NfZ%I!4aGk0YFB"m#hGUFjqEQh1CrrqLD)F!!@L +4K2m"NfZ%I!4UM(pXHi&m#QpSHDLSMhIprk*SK`!"D*'%r`'6Di0m"(CUPfKhJR` ++EfKXRUCmM2rrSQL(!!&SNB6r!C0VJh`$E)*pEB0m#QpjN!"SDh,JrrqLD)F!!@L +#J-L"a`'$Di*m"(0VQQPhJh`&EhA'SjLqJ-J"M'L(!)GS!'q"I!4[D)Z)Di4m!(+ +(D)F!K@J"EhL"I!9dECZRHQq&I!&hE)9SN3#"I!9`IULSLfb&I*d!"hamFQfES(4 +`JhbK!!"ZJ'J"E(U"I+8!!@KaJ(`!Hr-!k3!!6B9-"de-68a-68a0JNb@!!*-68f +#6!"0K%`!6B&-!Ne-6*3!!%f'6!C06%a068a0J%`!6B*-M3#$0!*-6%f!6!"0Jdb +!6B"-!%f"6!&06)-dK`!'0$jB@&-c2)"-!%f$6!C06%a06%a0J%`+68e-6%!c6&K +B3M5(!!JdDrrrrTBc1NZ%6!*06%f!6!"0J8`*68a-2M0iq[rrJS%dK!!"0'U"r`1 +R06K+J8`#68a0Jd`!6B"-"8e-1c1*rB$r!i)d0cH!0))!!64UJ[m(ZcJh58e-6%f +$6!"0J8`&68Xj0*[qJIm(JM9E9%Si0$5"!!%dDi2r"-Jr0NK0Kd`'68a-5MJfVB2 +r"i)eAeT45M8dJ3!"0'Z%r`AA469'6%f"6!*06%f!6!0*0cQpK2m(G$9KAP9-2c5 +!!!*30'Z&r`6N6c4%6BC-!dFf3-f%r`LY-dYLAeG03c5!!!*01'Z'r`rX@c4#68a +06%e-6%e'08IDK2m2aMC&BQ&I9de$0!!!68djDiIr!r0T0%##6!404$43j)6r%0J +q3'&LB9e86$md!%a-66PVL2m,qhJc28a06%e#0&hZK2m4j8FmB'*LB&T35MSd68a +-66PVKrm,qGlbM$-l6%dr-fVeK2m5m93kA@*LB9e86%Jd0%e-6%djDiEr#ma'-Mf +`RM-k260jqB6r$IKM0eYLBQ&H9dj+1M3dJ%`#66PVKIm,qd9'A8`hjl%h-icpK2m +8qh)f@@*LB9jB6dNj0$3!6%e-66PVKIm*jM"EBQ%eZ[r1ZiAr$rk"09GLBQ&H9e" +$06T'!!#"6!%jDiAr"rNq5Q&G39rpKrm9MM49BQ*KAPK-1M4#6%d!!%a06%djDiE +r"lSl-c0,0SEqK2m1rBid9@*KB9jB3c3d5Na-J!!&6%e-66PVK2m+eSlYlFLH08B +eI[5#r`cTF$99BQ&JA9!j4&XeJ%f"!!4-6%djDi6r(h%d6q2rrk)d6$P'P-(*XA` +k2&TLB@"E4$0mli)e68a-J3!%6%e01@Z%ra"Y069&eIrrL$GF66`e-cK#8S"L#f" +@1NI"rrq#0%e06)%!"%e-66PVK2m0E6K)0Mh(rrYF3@*LB@#$BJ020((ZJ2m%JM4 +06%b"!!4-6%djDi6r#Qdi68Nh1,Erec9BK@)$5M@JrB(r"))d68e-JJ!$6%djDi6 +r#Qdi6%a,165LjNC2K')#6MI!Jrm$JM906)-!!da01@Z"r`M3Iha80dG&3Mf!0!% +mAS0L!Q!f6i6r!i)d68f$!!0066PVJ2m$d$G"3S!c"MBl38K2@''%BJ*A-dq%r`1 +#08e0J`!$68djDi$r$Aa"BQ*EA@"I@eG89&CIK')#@c02K2m$JM906B3!!NdjDi$ +r$RP#BQ*32cFd-c3d063e8B4L!6e1K2m#JM40K3!#66PVJ2m)b$4%4M3f4%K+J%` +$5d!eBB"L"@"LBPBd[S2r!S)d6B8!!NijDi(r"F9`E8mi6B0-$NNcAQ*61$-k9'* ++1X(XrS$r!S)e6B8!!NmhDi6r(@di68a06%a0688dBP8d3%Fq0%CJ5$-cC1[rri) +d6B8!!P!eDi6r"'di68a0J%`866mqAMFr6%a04MBmA&KB2(Erri)dK`!"0'Z%r`9 +Y1%e-6%f!6!-f688iJ8`,66`d3'*L8%Imri)dK`!"0'Z%r`*Y0df#6!9&09Bd4Nf +"6!Sm0$GEB%*Nrrq#0)F!!64UK2m#E6K0J8`%66K'3cU$6!Sm5QNc08(9rrq#0)F +!!64@J,8&Y,1dY&JhJ8d46%)f@$4'6%a06%a02%@bJh1SJ,8"C$5(!)8d$$-c2%a +06%`m0%e+0df$6!*!-c1&0)F!K63-28G-68e-3MGCBN%m6B4-!8FjK654!)&-#$e +%BQ*01%e-6B"-!8e-R3!06%a!0ePF2$e-6%e06%bK!!!lJ$3"1%U!6!"0T3!&0$p +068a0m`"S1'eV!!!*#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$'1S+5QU+ZZX,1cY,5dYE@fYVHfNK8 +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0I6rrrrrrrrrrrrrrrrrrrrrrrrrrmN +-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Ei2rrrrrrrrrrrrrrrrrrrrrrrrrrrrq +N"!!!!!!!!!!!!!!!!!!!!!"-Vl'aXAUprrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +qH9b`XE'aD3!!!!!!!!!!!!$(qrAep[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrIrfpIAjk`!!!!!!!!!!!!$+pIrrr[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrllrrrdm8K''J!!!!!!!!$+pIrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrdrrhqqD86!!!!!!$+pIrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrdprcqqrh5$J!!!!$+p[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrdp[hrrrcpJ`!!!!$+r[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrlp[hrrrrlf3!!!!$+rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrq2rrrrrmq3!!!$cfrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrml`!!'H2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrmd!!*`2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrlP3'@rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrcq39Iprrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrkq!lArrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrpFC!*6rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrdi!!&Mrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrr4F!!"lmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrf3!!!!2Frrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrS!!!!!#Krrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrCJ!!!!"Nrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrq,!!!!!!TrIrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrT"`!!!!!&jIrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrqe!!!!!!!!V2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrpm!!!!!!!!E[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrp"!!!!!!!!-rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrF5!!!!!!!!"I$rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrmm!!!!!!!!!!,Rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrjJ!!!!!!!!!!([rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrf!!!!!!!!!!!$crrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrbF!!!!!!!!!!!c`rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrp`-!!!!!!!!!!!$1rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrl3!!!!!!!!!!!!$+rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrl3!!!!!!!!!!!!$+r[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrll3!!!!!!!!!!!!$+p[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrcl3!!!!!!!!!!!!$+q2Miq2hrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrVhprIel3!!!!!!!!!!!!#Frrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrra!!!!!!!!!!!!!!%(b!J)#!J)#Z'l2rrrrrrrrrrrrrrrrrrrrrLG#3 +J)#!J)#!J#!!!!!!!!!!!!!!!!!!!!!!!!!!!$R6Jrrrrrrrrrrrrrrrrf@8)!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,Bp6rrrrrrrrrrp&I#!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!QNr[rrrrr,8J3!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(dZLU8F#!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!'Pd-c)!!&(,!!!!!2m!r`$r!2m!r`$%!)",bJ#c5`&+5m3 +!Yd[#!,P,`!#k5m!!ZdZq!,a,!%Um!,p,ZJ$"5kS!LKd"'e$#5`!!LafC!!!FLKd +#'bj0`%X"64Z-(CJ!M"d#'c*1[NX#66FFM"fB!)%G!"Z%'J!BJ"d#'be0[%X#66- +EJ"d"&aZ$'J!EJ4fB!)!G!4E'JqJ#kVJ@J"d#(#P0ZNX)65iE(4dH%U6UJqJ"a"# +!(CJ!J"d"&GL&r`(*(S!G!4`PZ8X#65SFJ"d"&,D&r`(8$i!GQ!#!(3%9f)Er#0N +P'adG(#**6,C,!5BFJ"d"'XD'r`(8$iFGN3#!(3%9f)Ir!Z-c'B!G!Kp'6,0,"dS +L("dG(#AAKrm"e!q*(Bm!J"d"&GL)r`,Y3aH"(3&$6,&,!8JIJ"d#'LrML2m#e!m +FJ"d$("XF()-GM3#!(3%9f)Rr![99&B!G!K`q6Dj,!8a$J4d#'%$ULIm"e!q!(3B +K-$Ff,"dEJKf-!)!G!4ABL[m#r'N8J"d#'cT0V%X#6%!FJ"d#&P(bL[m4e!mG(54 +F@9C68Ndq)KXG(4`FL`#!(3%9f)cr!Ad5J"d#'c91UNX#66XEJ"d#&'2iLrm1e!i +G(59G@9C888p0663EJ4f+!)!G!4ABMIm(P"3H(4dE-8fS5`*00aZ!(3%6HBhr$p3 +2(4dPAeYC9e436Na-1"Z"(BN!J"d"&GL1r`'S&B!G!KXV6DC,!Ndb'i!G!41,M[m +3e!mG(54JA9YB9P0268Y-,4b!(BN!J"d"&GL2r`'q'S!G!4`RT8X(65iE(4dH%Tq +2ra$8$adG*'*HA9YB99&16%T,(S%GL!#!(3%9dj!!r`M5(a`G(4`M5NbK5`*0+4b +!(3%@YT!!ra(6$adG*'&JAPaD9e0268Y,0Kb!(BJ!J"d"&G#4r`,I+aU!(3)J4db +I5`G-*4`G(4`GbC(r%G!2(4dNBf"JAPaB9&&05dT)()!GL!#!(3%9d*,r!ZNj')! +G!Kj%6*a,#%a*)K`G(4XRfT(r%[a@'KdG)Q0KAepF@P946NY+6#5!(BJ!J"d"&G# +6r`,`5KD!(3)F38fD5`*-4aq!(3)D-115ra9f&4dG'8YLB@"JA9T@8Nj,5NX`("d +GL!!%(KdG&0#8r`,iB"@!(3)E2%fB5`&-3i%G!KK$kj,r"T)5(4dD3'5!B3aIA9T +@8Nj-5NXa("dGK`!&8L%G(4A3PIm)rA88(KdG'cG0PNX#66mFJ"d#&P6cN[m'XK3 +G(4XeC)"K$@"JAPTA8Nj-5NXa("dGKJ!'5e!N(4d9d*Ir!BJ5J"d#'c00P%X#66X +EJ"d#&'EjN[m'caFG(4`VC)&K$@"JAPY@8Nj-5NXa("dGKJ!'5dmN(4d8d*Mr!C` +6J"d#'bj0NNX#6MFEJ"d"%hZ6r`EI*"dG(#4LJQ%+B&pG@PC46NY+5M#!(B8!"dY +,6b3G(4A3QIm"XaH!(3)F+Nb3!%X(6M)E(4dH%Sk6r`IY-KXG(4pHBS*K#Q"IA&P +98%e,5NXRJ"f%!)","8mN(4d9d*Vr!FXDJ"d"(#@25`*0,4Z!(3%6T*2r"rG&'4d +G'eKLJQ%,B'"H@eK66de+5N`JJ"f$!)&,"8mN(4d9d*[r#0NN'adG(#&*6)Y,"d` +T'adG("HhNrm(rQ%A(4dD8@1%B3TIA9T@8Nj-5NP('i!GJ`#"5`92*"dG&G#Fr`, +N-KU!(3)I4Nb+5`BP("dG("r+P2m'HK3G(4P*Bi0K$'"JAeaB9&"05dT*2KZ!(B) +!JNX&6b3G(463RIm#l%%BJ"d#(%0-KdX(55)F(4dE*pb8r`D@%KdG'N&NK'%-Aep +G@PC56Na+58X`()!GJ3#$5`92*"dG&G#Hr`,c9KD!(3)F2Nf%5`*-4Kq!(3)D-Z5 +8r`D[%KdG'MTNK@%,B&jE9e4268T+58XLJ"f"!)4,"8mN(4d9d*rr![PT&)!G!KX +l6B*,!8a$J4d#'%6YP2m'b"BG(4XbC)9K$'"IA9P988j,5NP*34U!(B!!!%U%5`9 +2*"dG&G#Dr`Mkk1VprrrqIK+!(3)E08k!5`*02aZ!(3)@9I58r`EC(KdG(#aNK@% +-B&pG@eG56da+58P-*S%GJ!#&5`91*"dG&G#Br`[+B#SC'c"dhrrrNK+!(3BE-8e +,66XEJ"d#&'RkP2m'jLSF(4`RBS9K$@"IAPYB8e"05dT*56dEJ"f!!)C,"8mN(4d +9d*Er!rae%KU"(3BB&j[rrkJ8J"d%'bY20KZ!(3%5I*Ar"Hmh'adF)iCK$@"IAPa +C9P*15dT*58BHJ4d"!!#(5`92*"dG&G#@r`pT&4dG'aSD'adG%CIrrlmAJ"d#(#% +FJ"d"%T!!PIm(q%NC(4dIAQ+%B3eJB&jF@9C56da+58P'))%GJ!#(5`92*"dG&G# +9ra+Z%4dG(N"98MNE(4d8f2rrd5!FJad"&+H9r`,mA"H!(3&DBS4K$'"IAPaD9P0 +36%T+5d##(B%!KdX&6b3G(4A3P2m1r6JG(5"GBf&KC&-E(4YQJ2m#hb`EJ4d"'EQ +@r`Ca&4dG(&CLK'%0AepHA&P@8e"05dT,0"Z"(B)!KdX&6b3G(4A3P2m&f"-G'Ne +LJ@%&C$`F(56jJ2m'jcN@(4SIcCEr"SB6(4dE8f1%B4&IAejF@PG68%j,6%BQ'ad +G(#1$!)G,"8mN(4d9d*6r",N4(4jJJf%%94NG&H#"r`6[HMpKi*Er"TB6(4dD6Q1 +%B3aJAejF@9C58%j,66JFJ"d#(N"4J`#(5`92*"dG&G#8r`1e%KdIK'%%9KSG%YU +Hr`DS%KdG'NTMK'%5B&pH@eP@8dp068FQ'adG'bG*6)8!KNX&6b3G(463P2m%ba% +G'PH$B34A'KdCFChr"VF8(KdD4Q5%B3YJAepF@9C68%j0-ab!(33F0de,5i8!KNX +&6b3G(463P2m&q#3G(#YPJ'%(BQ0P-a`G%XLEr`E#&adG'N0NK'%4AepHA&TA8e" +32KmF(4dE*%C0J%Z&!)C,"8mN(4d9d*Ar#i39(4XV@'0L86eNAB!G!5M[QIm'b"J +G(4T"C)4K%'"IAPeD9e0555BE(4dF($C0JNZ&!)C,"8mN(4d9d*Ar%I3d'adF'L! +I'4S[C8JC(4P1r*Ir"XND(4dD2f5%B3PJB&jG@PG88cBDJ4d#+dP0JNZ(!)9,"8m +N(4d8d*Er!Z-e&B-G"aXVCM)F(4C`P[m'`4NG(4SpC)0K#Q"JAejF@PG@6#8EJ4d +")Nk%5iF!K8X&6L3G(4A3Prm4mS-Q%a%4&"`G(#TM*"dG&(EqNrm'U"BG(4SqC)0 +K#@"IAeeF@PG91aZ$(3%L6)4,K`#&5`92*"dG&G#5r`,UdrL"ra$daUkabMdD(4` +VAb!G(49Nmj!!r`IhH"-H(4T!C)*KJ'!3APeE@9P,*"XG(44!'KdG)Nb%5iF!K8X +&6L3G(4A3NIm%LKX8,mU&r`cZ3"NG'bjG(KdG'$R8M[m(b6N@(4dD4@5#B44JAep +HA&TB9c3E(4dF&ir4$adG)Nf%5iJ!K%X&6b3G(4A3N!$r"X83(KdG&l5&r`h[2aS +G'c9H)4`G("Gql)Vr#-jF&"`G("e3C)*K&9pJAPeF@PT+)4XG(40(f2r,$adG)Nf +$5iN!K%X&6b3G(4A3N!$r!Bd9J4d"&*q&r`rV04XG'N"M+aSG(4BJFFIiJrm,qY5 +B348D(4dD+9aMJQ%@B'"HAPYD@68D(4dD(Clprrr,$KdG)Nb$5iN!K%X&6b3G(4A +3N!$r!BX9JKd"%iH&ralN*4dG'NeP34XF(4dB%L4&BA"ZAN-Q&"8F(4dE(%9NJf% +0B'"IA9aF6b)E(4d59ZD"r`A,$adG)Nf$5iN!K%X&6b3G(4A3N!$r")X9(4dFJ"d +#%h2pK2m+eKNG(4aEBe`b'aZ!(38F'KNC'Kb!(38F'KmpB'1$B3aJAepGA&`l'ad +G'KfQJrm&b`mG(5*-JdZ+!)0,"8mN(4d9d*!!r`@,&4dF*Kb!(3)9@[H%r`fb%4d +G*@0KC9Xl)KXD'i!G#"`D'KXJ,daLBi9K#f"JAPj@+4XG(K02jB6r"FX2(4dL6B* +,L`#$5`91*"dG&0#3!2m'La8G($4#()!G!KG)m)6r&S!9(4XkC'&KC'0B5$d[+LS +b2NKAB@9LKf%*B&pJ5KdF(4`BQBEr"FX1(4dL6)*,L`#$5`92*"dG&G#3!2m(La8 +G($004"k!(3)D01@$r`El4KXG'P4LJ@%(BQ0PCQCPBf++B3PJB'%j'KdG&McCKrm +&b`mG(5*0JNZ,!)0,"8mN(4d9d*!!r`k,&4dE-da-4b%F(4dE+YZ$r`AL'KdG*Q1 +@B3KJAbXE(4d6H2D)r`A,$KdG)Nb#5i`!JNX&6b3G(463N!$r$iX9(4`c6%Y,5L3 +F(4dF)-Q$r`@E&"dD5'18B3GL@#)F(4`GXSVr"FX2(4dL6)*,M!##5`91*"dG&G# +3!2m&La8G($0-J%X#6#JFJ"d"&lD#r`Am2KdG)f16B3&M8i!G!KJfhS[r"FX2(4d +L6)&,M3##5`92*"dG&0#3!2m&La8G($0-J8X#65dEJ"d"&*k#r`5k%KdC9C*K"f0 +5'adG&&VdM2m&b`mG(5*0J8Z0!)*,"8mN(4d9d*!!r`@,&4dF-db#5`*1-KU!(3% +5Ki(r"IS`(4Y%Bj!!B3GL@"XG(K&qrShr"FX2(4dL6)&,MJ#"5`92*"dG&0#3!2m +&La8G($0-JdX#6MFEJ"d+%h2mrrrS+adE3@14B33K(4d9Mirr"FX2(4dL6B&,MJ# +"5`92*"dG&G#3!2m&La8G($00K%X#66`FJ"d)&9qpG#%F(4K6N!"K"@3j'adFCC! +!r`A,$adG)Nf!5im!J8X&6b3G(4A3L[m@p,fJR,2XN48G($0-5dY-68j06%T'04b +!(3FD%"SG(4X[C*!!B39E'KdG((#3!2m&b`mG(5*-J%Z2!)&,"8mN(4d8d)Mr&rD +(*"%8&"%J1"XG($&'36dh-#SQ)"dF'S3G!a`D0'+3!'%'BcdE(4dFF*!!r`A,$ad +G)Nb!5im!J8X&6b3G(4A3Krm$l8)8(S)G!"b!(38F("XD'ab'(3BD'4`N1PGNN@% +"C#L!(3%FF*!!r`A,$adG)Nf!5j!!!)","8iN(4d8d)Er#Ie2'4dG'L%L'ab)(3` +F'KND(5%V0%95A'0NNf%"BKq!(3%FF*!!r`I,$KdG)Ne,5j%!J%X&6L3G(4A3K[m +-U4)G(#KBBf4F-4SE'S!C$4`I)LNc1NG2@9jMC'4MQ'%!(S!G!4a`N!$r"mX2(4d +L68Y,N3#!5`92*"dG&G#'r`9#(4dMBf+!B3jP3N*)6e9DAQ*NC@4NBQ+GB3&M(i! +G!4a`N!$r"mX1(4dL6%Y,N3#!5`91*"dG&G#&r`AX(KdD5f+#B30MBf*LJ'%"BQ1 +"C!YMBPpGA&TE@eeKC'55B3&N,)!G!4a`N!$r"mX2(4dL68Y,NJ!(5dY1*"dG&G# +&r`6A&KdB9i9K''0PC'"D6dBh-bSN)5!G("XD'KXF(bBj9Q53!'%'Bd3D(4dFF*! +!r`I,$KdG)Ne,5j)!"dY,6b3G(4A3KIm%hKJG'&@$B3PL9NFc*KmE'4SFLad#("N +aN@%&Aa`G(4a`N!$r"XX2(4dL68Z6!!G,5dmN(4d9d)Ar"INV(4`jCB&K!f0*'"U +&(3XF("XD'KXE("`E'KZ!(3)F*f12B39N14`G((13!2m'b`mG(5*05j-!"dY,6b3 +G(4A3K[m*E"NG'dePB@&N9i)G'"XE(5!Q+6!d16dr3N0%484#2#iH(4dE2Q12B3" +HJ"d"1[D2r`E,$adG)Ne,P!!'5diN(4d9d)Er#GiC(KdD-NT,1"b!(3SF*ca%58a +06Ne06)9,"da15L3G(5"LMf%&Bd8D(4CYMrm'b`mG(5*-5j3!"NY2*"dG&G#(r`H +N%"dG("SD'i%G!K`c6C!!5`4$'adC@B4K"Q*NA9KCB@5#B39N+a`G%jD1r`E,$Kd +G)Ne,P!!'5dmN(4d9d)Mr!UiG&S%G"KJB(KdF-db3!%X&5KdG'P"LJQ%*C%FP'aS +D(c&@CB&K"9iH(4i5Uihr"FX2(4dL6*8!"NY2*"dG&G#*r`cXM6SN)c*pEaFG($* +-N!","8SG(4T4BS"K!f*G*aQ#(3dF'60JBQ&KBP3D(4d8U)cr"FX2(4dL6CB!"9! +N(4d9d)cr#IRhrrq,&4dF-db3!%X%4K`G'9L!B3*L@aq!(4BE("XF(4dF(NpNB@& +M6"SG(40hF(QQjBIr"FX2(4dK6*B!"9%N(4d9d*!!r`@,&4dF-db3!%X%2aXG'ek +!B4jI)4dG(#)p4d3c(K`G(4NhBQ&KC%SD(4dC'KS6&h,bKIm&b`mG(5&-PJ!&8L3 +G(4A3N!$r"BX9(4`c6)p,$Ndb("dLC'&KC#XF(4`X6B",$8e++aXG(4XP@'0KC%d +EJad#&cAVK2m%b`mG(4qA!!95)KdG&G#3!2m&La8G($0-MdX0658G($0NB@3q'ad +F+Nk$5`&01i%G$aa(C@&M94mL,5SF("dC62f$r`6,$KdG(TJ!"#%G(4A3N!$r"BX +9(4Xc6)p,$%JG(4T)Bf*9'KdG)Nb&5a4-558E(4dD0'0KBPpKC@9F,"`G%Uq$r`( +,$i!GQ!!%)"dG&0#3!2m&La8G($0-MdX-2"SG'eaKBb-G(4a&6)G,#%d[("dG'b9 +FBS*K"'-M(4a*Jrm"b`q!(CJ!J"d"&G#3!2m&La8G($*-MNX-6LFG(5GNBd!E(4X +f6BK,!N`j'i%G!5"MJQ%&BdFE(5EeJ[m"b`k!(CJ!J"d"&G#3!2m&La8G($*-MNX +,5"`G'd0MA4XG(540L8X#6$NEJ4d")Q5$B346'4dDj),r!FX2J"fB!)!G!4A3N!$ +r"BX9(4`c6Be,#ddd("dEA'8c("dE4)T,!N`j'i%G!4jLJQ%&BNdD(5(ZJ[m"b`q +!(CJ!J"d"&0#3!2m&La8G($00M8X,6"mG(5pP@"SG(#j1LNX#6$NEJ4d#'NYMJ@% +%CL`G(6Q$r`(,$i!GQ!#!(3%9d*!!r`@,&4dF-db-5`Y-1KXG'9*P,K`G(8Q,5`* +-14Z#(3SH9'9MC'3p'Kd8N!#$r`(2$i!GQ!#!(3%9eT!!r`@,&4dF-db-5`Y-)4d +G*f4@'KdF-df,5a*-14XG(58D(4dE-%)q*aSG(5[bJrm"e3q!(CJ!J"d"&GL3!2m +&La8G($0-LdX,6$NE(4T1C6!F(4j+M%X-6$NE(4ajKa%H(4dD'i!G!4M2K2m"e!q +!(CJ!J"d"&GL3!2m&La8G($*-M%X+(KdG*f4D'KdF-Nf-5a"-14XG('rrPKN@("d +F'a%edSAr!G32J"fB!)!G!4ABN!$r"B`9(4`c6BT,#dda("dC8'3i("dF5Be,$d` +j'adFFIrrk*&30MjKX[Q'r`(9$i!GQ!#!(3%@VS60!Xc,b)A("XKd&adF-Nb*5`a +-4KXG(#ePB"iG(#e0M8X'6$NE(4aHbB('"-M(aXI+KX`"V"+!(CJ!J"d"(K+*%!` +4%4!3%4!3&aiG'c0-L%X-6$`L(4dE@Q*''KdD4Bj,"d`j'adG'"!3J"%#%"%4L"! +"%Kk!(CJ!Q"d#'cK-KNX16%8L'adG'MeNC#FG(591MNX#6$iDQ"fB!*FG!4XJKdX +#6%8FJ"d*'L0NB9FD(4Xm6)p,!N`M'jFGQ3!!(*!!(3FI)bJT+6**6)C,$8`K(4d +E*N&DB@3j'adHNNX&5M8T+#-INKf`!!048%p0KdX26$NE(4XlC'0KB@3R(4dJ6** +,!Na38FN!L8X&658G(5PPJ@%&BP)D(4Y!Nd[0!!&,5SC,""iG'NGMJQ%&Bb3G($4 +-N!",d3#&5`9+(KdD6f+#B39N+4dF-Nf15p8!JdX&6#!G'd"NJf%%)"dF0db-5pN +!J8X'65XG(4pJBS"K"@9#'KdD4BY,hJ!35d`r'KdG*9KNC'*$'adG*%f*5q)!!8d +KJ"d*'bFY)"XG(4Y$6)G,j3!!*)BG!KXm6)C,k!#$(33F'L4#6B9,l!#!(3-K,d0 +0K8[b!!"0K8[h!)",r`$r!2m!r`$r!,3!r`$r!2m!r`$r!-3!J(c+!*Gm!(ZBI!& +lI-3!XR`!Hi&m`J#FI!"lQAc!!,Tm`!#lI,i!QR`!Hjjm!(Zm!,pmZJ$"I+S!"'P +SD'PTJ'J'D@PSD'PRIX*m"!"SD'PTJfJ$D@PSD*N!J'J$D@KSDB&S"@PSD'G[IE" +m!(Z-I!"pJ'J!DB&S!@PTJfLB!!4TD'PSD)&T#'KTD@KSD@KaID*m!(ZBI!0pFQK +TJQJ"D@Q!D!"TJ'LB!)"S!'Q!CS*P!'5!D3*REhfmI!GpF@GSD'PNCS0P"'CTD'P +SQ!#!D!&Mdi2Y!Zl,Bi&S!'f8I!"lSh`)I@pRD'KTB,l[Jqd%ePjSD@LB!)"T!@2 +LKIm#eQGTJ'J!DlPm!AeZJ'J#D@,*KIm%iPeTD'LB!!4TD'PMiSEr"q*VD'PSD'T +lYh`'E'KSD@KNeBEr!H*GJ@J!DB&S!'Q4!!4SD'PLiBIr#1TcCfPTD'PkIE0m"hY +UD'PSCfVJKrm"iPf%D)"T!@KSM`#!D!&MiBMr#2&pC@PSD@KiIE&m"hYTD'PSCh( +UL2m"iPf$D!"RK'L0!!4TD'PLiSRr![H)C)"T!QKfIBem!(ZHI!"iJ@J#CA[[LIm +*iPeSD@KVGRYiFB"SJ'N!D)`!"'PSD'2KL[m(r*9MD@KSCh5YI!KpGfKTD'PNKr5 ++ra(LA@PSETZ@N!#+KS"jDfGSD@PSL`!%D'KTBq+-r`HMBQPSD'GbIDTm#(eeD'K +TD@15qB[r$q*HD'K[RTQ6MSQ%IhebCfQ!D)S!"'KTD'2KMIm(XQ*TD'KRFAfSI!K +pFfKSD@PLSIf-r`rLA@KTEk'FQ*11L)*pHh0RJ'J!DBN!J'J"Bq'1r`HrBQPSD@K +ZIDCm!AeaJ'J#D@'XM[m2iPeSD'qNS*bBNSb&IhYjEi&SL3!%D'KTBZ'2r`(1C)& +S!@apT(`"I@q"D!&KZBrr&1*GD'K[TU+IR*H3!)Q#IAPiD@KTD'L)!!4SD'PLhT! +!r`(FCi&S!@YlSh`!EB"S!QPLbC!!ra6LA@KSEkHPSTqEP)b&IRTiFQGTD'L)!!4 +SD@KMfj(r"qGZCfPSD'PkSA`'DfKSD@KQeT(r%0jHD@K[U+DNSCfBMiH!HRKiJ@L +)!!4TD@KLfj,r"qjhCQPTD'PjRR`"HfU!D!*RE1+4ra,mL@GSD@fTTU@MRjQ4LB& +mHAKXJ'L)!!4SD@PMfj2r![1"C)&S!AGpQR`#IATTJ'J#Ch,TN[m9RQ0TD'@6U+H +PT+#DNiU#I(PiF@KTD)J!"'PSD'2EP2m$q*!!C'Q!D!&eICPm"hKSD'PTCAh[N[m +6X@&SD'D)UUHRTU5JQj1,JRejH(#!D)F!"ApUD'KMfjAr!rbGBQQ!D!&cICCm#(e +hD'KTD'5(pC,r"XGKD'KQIDZ!U!UQT+'EP)Z#IAPiF)"SKJ!'I(jVD@PMfjIr!UT +LDB"S!A&pP(`)IA9RD@PSBj2kN[m9fQ4TD'GeUDHSU+HQT+'ENiU#I(PiF)"SKJ! +'I(eVD'KMfjMr"lKKD@KSCfppNR`)IA0RD'KTBU,pN[m(jfTSD@KYTkH!U!ZRTU5 +JQT1*JRajH(#!D)8!"hYmI@aSD@,EQIm#af0TJ'J!ET&m"heaCfKSD@'YNrmDmA0 +RD'KUT+LRTkLRTkDMRjL4Ki"lH(KXD@KSK!#!I!9qDfPSBYZDr`EAC'KSD@KVMh` +"I@q"D!&L[*2r#2KrCfKSCTkSTi#S$+HRTD+GPSf&IRTiH'U!D)-!JA`&I@YSD', +EQrm"iQU"D!&THiam"heYD'PSD@2+NrmFrT!!CQKTCCLUU+HSU+HRTU5JQj++JRa +jGhGSD'PSJ`#"I!9pDfKTBpbFr`,VFfH!D!*THRf+I!"VJQJ!eT6r#D&MD'KPMkU +RU+H!U!qRTD+GPiq'J(YiGh4RD'KTJJ##I!9qDfKSBYZGr`2`I'CTJ'J"H(f(I!G +lDQKTD@GXj*6r#,0KD@KQLDZRTi'S$+HPT+#DNiU#IAPhGh#!D!"TJ3#$I!9qDfK +TBpZHr`,eL@5!D3*RGhf%I!*pH@Q!D!*RFZU8raV%BQPSCS'UU+HSTkLSTkDPSTf +@MS9qHRKhH'U!D)%!K(`&IQYSD@2ERrm)qC9ND@KSCh4pJR`"IAL"D!*PII'8r`[ +@BQKSChUUTkHSTkL!T`bQSjqCNBQ"I(PhGRCRJ'L!!!"lK(`&IQYSD@,EQ[m1qZl +[r2rrrD4LD@PSCh*pJ(`"IAD!D!0TC)MfP2m,iQGSD@GeUDHSTkLSJ+F-TU5JQj5 +,JhjjH(GhE)"S!'Q!!)9m"AjVD@KLh*Mr'pH2EQ4PFCcQrrqaB@PSD@K`IAapG'K +SD@PMP[U8r`[XE@KSCh#SU+HSTkH!U"#QT++GPSk'IhTiGhCdD'PSDB!!KR`&I@Y +SD@,EP[mFqjaKCfPSD@PQBlErrlpKD@KSCfjqFfGSD@KLSrk8rb,bGQGSD'fRU+L +RTkLSTkHQT++HQ*'*JAajGhCfD'KTD'J!!)Gm"AeXD'KMfjEr&C9MD@PRCQ9RD'P +KY2rrcQ0SD@KSDQL!D3&LVjAr"[L"CQKSDD5"U"@RU+HRTU@MRTQ5Li0pHAGfGfT +SD'PSJ!!"I(Z&I!9pDfKSBpZ9ra2$B'KSDBHEQ)"RD'KKiIrrh'KSDB*S!@+rPIm +*r)ePD'KRRkLSTi#S$UHQTU5LRTU6Li9qHhKhGS"S!@PTJ3#(I!9qDfKSBYZ8r`l +pGQPSDk1UU+LVQ'GSCj5!r`MREfGTD'PTC-Z@raZDBfPSCjbTTkLRTkLRTk@NSTk +DNib&J(YiHA*RJ@L#!)Gm"AjVD'KLfj6r"H&JD'@6UB'S"DU$CfKVqS$r"ZahC'K +RCpQ@r`DSBfKSCTQTJDF8U+HRTD5LRTQ6M)D!I(PiE@KSD@KVJ`#(I!9qDfPSBYZ +8r`A0B@KSTDL!T`DSU*aPD'(QJIm%mU"lN!$RP[m*Xf&TD'@8UULRTi#S%kHPT+' +GQ*1-KB&mHh4TD'KTDAGrJ`#(I!9qDfPSBpb8r`r+BQKTTkLRU+HSU*ePD'$MR[m +J[f&TD'@3!+USTkLRU+HRTD5LRCQ6M)@!I(TYD'PSD'alI)8!KR`&I@YTD',EP2m +2f9pTCTfSTkHSTkLGC@KRQjhr)FTLD@KQMDURU+HSU+HRTU5LRTQ6M)D"IR0SD@K +SCh*pI(b&!)Cm"AjXD'KMfj6r%2KUD'KeUkLSTkLUUhYSD'(9Qrm(d@*TD'@,UkH +#U"+RTU5LRjU8MBD#H@TRD@KSDhTpJ(b&!!"lKA`&I@YSD'2EPIm3Tf4SCh5HUDL +AK+UMD'PSEI+CraM@C'PTCBHVU+HSU+HSTkDNSTqDP)k)J'eRJ@J"Fhf#I)8!KR` +&IQYSD'2EPIm4pR0SD@KPDQTPCRLVMf9SCiAmPrm'ef9SD@D'Ui+S%UHRTU5LRjU +8MiThCfPSD@KZHRf#I)F!KA`&IQYTD'2EP[m&kR4ND@KTJ'J)Ch@VHQGTC*VqPIm +'d'4TD'@%Ui#SJ+F3TU@NSCkDPC!!KQeRD'PSD@TpK(b(!!"lK(`&I@YSD',FPrm +'p+CXB@&JBB"S"h1SEQKSBjlpNrm*[f0SD'D&UkHSU)#R#DDPSk'GQC53!(YRJQJ +#D@TpK(b(!)9m"AjVD'KMfj,r!ZlGqB(r%2I9aXMAHQGSCh5NDQKTBj,eN!$r#IL +IB@PTCBHVTkL!Ta+QTD5LRjbBP)KYCfPSBReQD'PUKAb(!)9m"AeVD@KMfj(r"+Y +PBA$AKIm-mRYQD'GhSfPSD'9hhSlr)0ChC'KTCSbVTkLRU+HQTD5KRTZANRKRD@K +SBklIAQKTDS9mL!#%I!9pE'KTBYZ3!2m'e'"TD'KMb)Ar$I*kCfPQIU4XCfPSBk2 +ZLImMrYU0BQKTD'L@UULRU+HRTD@MSCkCPiPVCfPSBRrKrpYHD'KUK(b*!)4m"Ae +VD'KMfj!!r`'YBi"S!QPLZBAr$qpdD'KQKkKdCQKTC'LDe[H$rbEjhV9mBQGSD'C +bSUQRU+LRTkDPSU#GQC4jCfKTCfHir2rrfejSD@U%I)N!K(`&IQYSD'2FN!$r!DY +NJ'J$D@PLUSAr(ZYUD'KPP+Z)CQGSD'CLDRk3!*UBMAeVBQ4SD'PRCiZUJUJ1TkD +PSk#GQSeXCfKTBSRXJIm%fejTD'U%I)N!K(`&IQYSD',FN!$r!DYNJQJ$D@+Er)6 +r#Z"ND@KRS+UKHQCRJ@J0CfCQCfKTD'PSCQU&TUQ!U)#R$+DPSk'GQRjQD'PRCVk +$r`6EAQKTDS4mLJ#$I!9qDfKSBYZ3!2m%Uf4TD'b!D!0TC)[iK2m0aQ&TD'qTU+Z +JJfaQC@D"D)"Q"QTiNkHUU+H#U!bRTD@LS*G`CfKSBSAVK2m&fejTD'TpJRb,!)0 +m"AeVD'PMfj!!r`bXC'KSFRKSD@KTCArcK2mVT'0SCS+UU+LUUTk1K(KdG(U&Mjb +RUkLRU+HSU+HSU+HQTD1MM'KSD@KNY[k&r`6EAQKSDS0mL`#$I!9qDfKSBpZ3!2m +0V'4TD(&pH@PTD'KQG1Z$r`ElIfKSCTUSJDFHU+UVV+bVUULSTkHSU+HRU+LRTkL +RTU@NIfCTD'4jiBIr"0YHD@PUJhb,!)0m"AjXD'KLfj!!r`LVC'PSFAapHQU"D!& +Zii2r"ZPPD@K`UDH!U!#RJDJ#TkLRJDJ!Ti1S#UHQTk0cCfKTBCrhL2m%fejSD'U +$I)`!JR`&IQaTD'2EN!$r#DYND@KaIAamHfZ#D!$@Jrm-Yf0SCBqTU+LRU+HSTi# +S!DHSJ+H!U!bRU+HSU+HHE'KTD'E'L[m%fejTD'U$I)`!JR`&I@aSD@,EN!$r"Da +ND'KaIB&m!'f"D!&NbB,r"[akD'KYUDH#U!HRTkLSTkHSU)+R"+LRU+QCJ'J#CRA +PLrm%fejSD'U#I)d!JR`&IQaSD',FN!$r"DYND'KaIB&m"he[CfPSD@+iJ[m%c@& +SCCZ!U!'RU)+R"+LSTkLRJkJ(UCKQD'PLM2D-r`EEAQKTDRelJ(b0!)*m"AjXD'K +Lfj!!r`5XC'KSFB0m"heaCfPSD@'UJIm'qh&TCSZTU)#RJUJ#TkLRJ+J"TkH!U!D +HCQPSBD6pMIm&fejTD'TpJAb1!)&m"AjXD'PMfj!!r`5VC'KSFB4m!RecCi"T#f+ +Er2rrl@pTCiLUTi5S!+H"U)'R"kLSTfYSD'1[Mrm%fejSD'U#I)i!JA`&I@aSD@, +EN!$r"DaND@KaIB4m!AeeJ'J,D@12d*eTD'KNQDLSJUH"U!1RU+HRJDJ&US"RD'L +@N!$r"0YHD@PUJAb2!)&m"AjVD'KLfiVr$IA3ZVI+lkpMD'KaIAamJRd#HhTbJ'J +)D@GICfKSChLTJ+F'U+LRU+HSTi#S"kHSTkHSU+&QJ'J!Rj!!r`6EAfKSDS&mM`# +"I!9pE'KSBpb)rbEhU@YJBf4JD(GRD'K`HRKfFh"ZE'TSD'GSD'PSD@KSCf9mU+H +STkH!U!#RJUL!T`QSTkHUK@GTD@LIN!$r"GYHD@KUIB"mM`#"I!9pDfKTBpZ(r`2 +aI'0TL'J!Ci"S"@PSD'PSDB"S"QCPCfk#RUU"T`1STkLRK+J'TkLRU+LUFB&S!*q +3!2m&fejTD'TpJ(b3!!#!I!9pDfKSBYb'rb6mK'9SD'CXE'CSD'PSD@PSD@KSD@K +RCf9PCfadIBZBSUQUU+LRJ+J&TkHSTkLSJDF-U+HSTkHSU'TSD'PSRj!!r`6EAQP +SDS"mN3#!I!9pDfPSBYZ'r`c!B@KSFCkUUD*kCQGQJ'80CfPXFRb#MC@JT+QUUUQ +#U)#RJDJ(TkLRU+LRU+H!U!QRU+HRD@KTD'HIN!$r"0YHD'KUJ(b4!!KmHhaqDfK +TBpZ'r`4pD'KYUB'S#UZ+LSq8QU#NTkUVJ+U!U!'RTi#SJDH!U!#RL+J-TkLRTkL +RU'TSD@KSRj!!r`IEAQPSDRemI*%!J(`&I@YSD',EKIm+lfGSCT+TTkLSTkH"U35 +SU+HSUB'V#kQRT+1MSD'LSkDUUS'S!+H!U!HRU+HSTkLSTi'S"kHVG@PSD'HIN!$ +r"0YHD'PUJ(b5!!GmI(eVD@KMfiAr#1"LD'5GTkLSTi'S'+QVUUDJPBf!Hh0ZE'T +RCfCPCQ9RD@q!QkZ"U!DRU+LRTkLRJ+L#T`DULfCTD'LIN!$r"0YHD@KUJ(b5!!G +mI(jVD'PLh)Ar"19MD'5EJDJ0TkHSR)jmEfTPC@CSD'Q"D!9TD'PSD'Q!D!*PHUH +!U!LRU+LRTkLRU+H#U!HRTk4RD'KRRj!!r`EEAQPSDRemN`!(I(aqDfPTBpb&r`E +jEQPRJDZRJ+J$UC!!Bf@"D!0TD'PTJ'L"C`&SD)"R#@PSD'GaUDHSTkH!U)'RJ+L +!T`DSUS&RD'LKN!$r"YYHD@KUIAb6!!GmI(eVD'KLfiEr#TKQD'D6V+LSUjeTJ@J +-CfGSDQYZF(*dGRGhH)"j!RKeEi"S!fH'UDH$U"#RU+HSTkLSTkLSTk9SD@Kipir +r"YYHD'PUI(b8!!CmI@aSD',EK[m5j@4TD@CkNC1!CfKSD@KYGAPlI)*pKR`,IAY +VD@KUU+HSTkLRJDJ!Ti#S!+H"U!@UM'9TCCL2r`EEAQPTDRamP!!'I(jVD@PMh)I +r"leJD@KSC@9RJQJ"FRf3!(`&H@KTCCqRJkJ'UDUMRTqRUi'S"UHUG'KTBE51r`E +EAQKSDRemP!!'I(jVD'PMfiMr!X*QC)&S"@CPD@KSFC*m&'KSCCDSTkLSTkHUMQp +QC@9UHTZVTi#S"D0SD@PK`Bhr"GYHD'KUI*8!"RaqE'KSBpb*r`c`VAKUDR1MQ'9 +SD(&pNA`0D'KPPUQRU+HSSh&PD'Q"D!0PHkDTJ+J&QQCTD''rM2m&fejSD'TmPJ! +&IQYTD'2FM2m*q2IrrkaND@KaIC!!I!4jD'KPRS'S"k"TD'KTCfKRJ'J3CfQ9UkL +SUC*PD'PLRjZJ[ZU(r`AEAQKTDRb@!!9rDfKSBpZ3!2m&V'4SD(&pN!"m"(GRD'D +NJ+J"T@Z!D!9UGRTjF@Q!D!&PJ)#S#kU3!'9SD@CRCf0MR25&r`AEAQPSDRb@!!9 +rDfKTBYZ3!2m%V'4SD('3!(`*IA&SD@bUU+HUG)"S!@ppJ(`3IAYZCfKSCfkHUUH +UNfCTD'L!D3*PGHq%r`6EAQKSDCF!"ApVD@KMfj!!r`5VC'PSFC!!I!epDfKSHkZ +RUSCQD@KYIB0m!AeeJ@J2CSkVTkUEDQaeFfGSD'D$r)2r"0YHD@KTQ!!%DQKTBYZ +3!2m%V'4SD('3!(`,HfKSCSqTU*YPD'KUKR`#IATXJ'J"CRb!U!QPTkZUSR4RD@( +%Jrm"feq!D*J!"'PSD'2EN!$r"DYND'KaIBpm#h9RD'DLU+KZD'PRHBKm!Ae`J'J +#CfqLJ+J(TkLSU@eSD)#$r`(EAS"TQ!#!D!&Mh*!!r`@XC'PSFAf1I!YpE'KTFDU +UKfCSD(++I!"dJQJ$DULRTi#S"DQ1CQPVpB,r"0YID@KSQ!!%D'KTBpZ3!2m%V'4 +TD('2I!TkD'KQLUUMCQKTDiTm%hedD'KTD'KXUDLRU+HSU*PPD'AUJ[m"fek!D*J +!J'J"BpZ3!2m%Uf4SD('1I!YpFQKSCU+VHfGTD(Q+I!&pFi"S"@PSDDLRTi'S"*4 +PD@MaJ[m%fejTD'LB!!4TD'KLfj!!r`@VC'KSFAf1I!TTD@KiUjjPD'K[IBYm!(5 +!D!jTD'D4UULSTkHXG@KSGrk#r`(EAS"SQ!#!D!&Lh*!!r`@XC'KSFAf-I!YpG'G +TCCLVGfKTD(Z,I!TpG'KSD@KSD@LDUi#U")9RD'1`Jrm%hPjSD'QB!)"S!@,JN!$ +r"DYND'KaIBam#heUD@K`UTaPD'KaIBam!(5!D!eXCQPSCRQ)KA"QD'PZp)2r"10 +GD'KTQ!!%D@KSBq'3!2m&V'4SD(&pM(`*G'KSCC5XH@GSD)em!AedJ'J-T+PKD@K +SCQGTD'PMfS6r"1*GD'KTQ!!%D'PSBq+3!2m&Uf4SD(&pM(`+D'PSF+QJCQPRFAf +-I""pG'KTCjlrXf4PD'PSD'&dhSAr!H0GJ'LB!!4SD'PLiT!!r`@XC@PSFAf+I!Y +pF'KSCCDVJ'GSD(Z0I!&pG)"S#U$rrqbaKA9jNFIjK[m%ieeTD@LB!)"S!@6$KGX +"fGH&eJAAR'9SD(',I!YjD'PSGUZPD@KSEhf0I!ppG'KTD*,AeYA@eYMAeYECKYS +%a'"SD@LB!!"TJ'J!BSTJ!Q&JBB"J"@9TD'KaIBPm#h9UD'PQS+Q0C@PRHBjm#Re +dD'KTC@"KB@"KLf!"B@Q!D*J!J@J(D@KTD@KTD'Q#D!0TD@KTJ@J$D@PSG)Km$AP +UD'PSCS@UUR&SD'apKA`!HiCm#(CRD'PTD'KTDB"S"QPSD@KSD@Q%D)"TQ!!'D@K +TD'PSDB"SJQN#D'PTJ'L!DB"S!'Q)I!ejD'PSD'CYUDHGC@KSGC&m!@TRL'J+D@P +SD'PSD'PSD@Q"D*N!"fKTD@KSD@KTL'J(D@PVE@eZFAZ)I!aUD'KQF)LJU+U!CfP +SNh`%FQeYDfQ!D!"TJQJ!DB4S!fPSD'Q`!!0rIRepKh`1IA4SD@D#UkQSU+T`D@K +TNh`#IAjqb3#*I!9pDfPTFkZ!T`DSU*KQD'GhK(`!HiYmc3#)I!pTD'D0UDLSTkL +SU@jSD(*pN!"md3#'I!pSD'@@U+HSTkLSUR0SD(&pMRc9!)4m"'PSCiDUJDJ'TkG +VD'KcIBamf3#"I!ppEQKSDU@TTkLSUiPQD'GjLR`!Hpi!%(amGfGTD'kHUUUSLQC +SD'YpLAcL!!emDQKSD@C`GQYQD'KRH)Kmj3!!DS&S!'Q#D!&eIBCmk!!+D'KTD@K +TD'GVH(f&I1`!J'J$DR"iIB9mmJ!!IB9mp`!#Hhamr`$r!2m!r`$r!,3!r`$r!2m +!r`$r!-3!!Na06-S!!8a0L%`"68f#6!406%a06B&-Jdd$6%e-6B"-!Ne-6B"-"de +-6%e-6%e0a!!"6%b!63"-J%d(6%e-68a06%b"6B"-"8e06%a06)"0%8a-68e-68e +-6%e06%e06%e-6B"-!de06%h#!!&06)*0#%a06%e06%e06)"0!da068b!634-6%e +-6B*-!Ne06)*0$da06%a06%e-6%e06%e06%h!!!T-6%e-68e-68e-6B0-(de06%e +06%a06%e-68a-68a068a068a-68e-68a06%e-J%d#6%e-Jdh!!)"-!8e0J8`&68e +-6%e-J8d"6%b!6B"-J%d(6%e06%a068b!630-68a0J%`%68a068b#6B&-[J!"68b +!63*-68f!6!&06B&-"Ne06%a06%b!639-68a-68b&63K-68a06%e-68b"63P-68a +06%e-68a-[!!66%e06%a068a06%e-68a06%e06%f!6!"0J8b"63G-68a068a06)& +0!Na06B"-"de-68a068a0J%b!63&-6,S!!%f!6)&0"8a-68e-6)&0&Na-68a068a +06%e-68a06%e06%e-68a-J%d$6%e-6)"0"8a068a-6B"-J%d%6%e06%bU!)8d!$1 +"0!3c6da06B*-J%d$6%e06)"0&%a-68a-68a068a068a-68e-68a06)*0"%a-68e +-JNd#6%e0J%`*68a06%e06%e-!)3d!$1$0*N!!$1!0!%c-i8d!M-m6S00"%a068a +0J8b"634-68a06B&-"8e-6%e06)&0!%b"634-68e-6)"0%Na068a-68e-68a06%e +06%a1-c1*0!%c0*J!M$3&-cj168e-J8d!6)"0JN`$68a06)"0J%`%68e-68b!630 +-68e-J8d#6%e-J8d$6%e-6)*0#8a06%e-68a1361-0*J!!$1!0!-a-$![J6!!,S! +d"c-m68a068a-K8d#6%a0J%`+68e-68a06%e-68b&630-6%e-J%f#6!C06%e-68e +-J8d%6%e12c+!0!!ZK$!!-B!d!$1B!)!d!Lh%ji$Q"1IQk,JXJ$3$-cP06)"0!%b +#63T-68a068a06%e06)C0!8a-J%d!6)"0!8a-J%f!6)*0!%b"63a-68e-6M`c0$3 +e+UETJ1B%jqEQabH!0*J!J$3",0H&r`((-S!d"$-i6%e-J%d!6)"0J%`&68a-68e +-J8d#6%e-JNd$6%e-6B"-J%d&6%e-6%e-J%d%6%e06%f!6)"0!6ScJ$3"+lH&r`( +B*B!dQ!!%0$-d,0H'r`,B1$1!0!-f5de-J%d$6%a06)00#Na-68e-68a06%a0J%` +#68a0Jdb#63Y-68a06%a06%e06%b!63%i-i!d!5l'K[m"f#@%0!)c0$54!)!d!5c +AKrm)iN%a0$3c0%P0J%b"63*-6%f#6!006%a0J%b#63C-68a06%e-J%d,6%a068a +068a068a0J%`*68e-0M-d0$-feBIr!GJPL652!)!d!5cAL2m#l%m`J63"4dk!6)0 +0!%b!63"-J%d!6)&0#8a068a06%e06%b#63*-68b"6B"-!8e-J%d"5M@!0!)b31+ +)r`,B*61!0)%cJM3!-id!J$3",0H*r`,cAbf!0!Bc48j-68a0J%`$68e-6)"0J%` +$68e-6)&0!8a0J%`!6B"-J8d"6%f!6)40!%L"0!)`6HQ*r`(B*B!d"MBr4%)m0$1 +"0!!cM!#!0!%XeiVr![T`,)!d"$*#6Na-Jdd"6%b%63*-68b!63"-J%d'6%a068a +06B"-%Ne-68a068a06%e04M-d-c3Z@r#+r`hB*$3d1&eD9e456NBf-i%dL`#!0!% +Xeicr!B)VJ$3%-d"16%f!6)"0"Na06%a068b"63&-6)"0J%b"6B"-"8e06%a06)" +0"%a06N-bJ$3#,@VfLrm1f#8d0$KG@eK98e&26MmcJ$3!-iS!J$3",0H0r`'A+S! +d!M)p6S&0!da068b!63*-68b"6B"-!8e-J%d!6)"0!8a-J%d$6%e-6)&0!Nj"-i! +d!LYrrBcr$pJP0$3iAeaD@&956de0361"0)N!"$-d0#cAM[m"U5Z!0!)c1df!6)" +0J%`268e-68a-68a-68a068a-6B"-!8e-J8f#6!406%iq-i!d!5U1M[m2f#8d0$K +JAPaE@&946da-2)!d!$1*!)!d!5cAMrm"[#k!0!%c1)00"Na-68e-68b#639-6%e +-6%f!6)"0!Na-6B"-!8e-J%d"2$+!0!%US)rr$pJP0$3iB9pHA&TA8dp05dZ#0)J +!J$3",0+3!2m*d$-c0$3c0da06)"0!da068b!63T-68a06%a06%a06B&-J%d*6%e +-68a06%dk-i!d!5ZfN!$r&0FP0$3jBQ"JAPYB99&06%Y!-c3d-iJ!J$3",-q4r`I +I1c)c0$3f5S"0"da-68a06%e-J%d'6%e06%e06)00#Na06%e-6%e-6$JcJ$3"--H +4ra(6*63d1'*LB&pG@PC56Na+5M+!0)J!J$3",-q5r`IS4c!d0$-d5)40!%b!63P +-6%e-68e-68e-J%f"6!C068a-68XeJ$3#-cMBNIm5qemb0$3hBf&KB&jE9e026%Y +-0i!dL!#!0!%Xcj2r!Zp9,S!d#M0'68a068a06%e0J%`*68e-68e-68a06)"0"da +06%a068NeJ$3#-N$LN[m9I#id0$*5BQ*KB&pE@&436%Y,26-d0)J!J$3",-q8r`, +fD#f!0"%c4%j-68a-68a-68a06%e06%b!63*-6%f#6!*068L"0!)`6ZU5raD9+c3 +d-NTNBQ&KB&jF@&4368Y,2M-d0)F!"9!f0$3XcjAr![Yj,)!d#c0"6Ne06%a06%e +06)90!%b!63C-68e-688cJ$3#,PhaN[m'XLXd0$0$C)"L#Q&JAPaB9&"05dXqJ$5 +'!!C06cFd0#c2Prm"M#Z!0!%c2i&0!8a-J%d'6%e06%e06)40!da13c1!0!)YEIL +5r`E0,63d-ceNJ@)0B@"IA&K88%e,5cic0$5'!!C-6cJd0#c2Q2m"RLU!0!8c2%j +068b"630-68a-J8d)6%a06%e-6N%cJ$3#+i(pN[m'hMBc0$3iBB&L$Q&KB&jE@&0 +26%Y,2M-d0)8!"da-6MJd0#c2QIm"XLb!0!)c1Nf"6!C068a06%e0J%`(68e-68a +12M1!0!%UN!#6r`EX36-d0$9IJ@)-B@*KB&jD9e*16%Y,1)!dK!!)6%e-6MJd0#c +2Q[m"b5q!0!-c0de0J%`*68a06%a06%a06)"0!Nim-i!d!5ZNNrm)pP)b0$3c@f0 +KJQ)+B9pG@9946Na+5c@!0)-!#8e06%e21$3d,-qEr`VB0M-d0$-f5de-6B"-!8e +0J%b#63Bj-c3c0#fiNrm)r@J[0$3b9Q0KJQ),B@"HA&K88%e-5NNbJ$5$!!P-68a +06cJd0#c2R2m#j%%aJ63958e06%a068a-68a06%e-1$-d0$-bb*6r"S!X0$3b8'1 +%BJYJAeeD9P&16%T,4$1!0))!#Na06%a06MFd0#c2RIm#kNm`J63!5)40!%b!63& +,0S!d!M-jfj6r"TFU0$3b6'1%BJpKB&jF@&4368Y+5cid0$-dJ3!"6%b"63911$3 +d,-qHr`,aB#k!0!Xc48e-68a068a068Q"0!)a3H18r`D`+M3d-NCNJ')!BB"L$'& +JAeeC99&15dT+5cD!0)%!!%f!6)"0"8mh0$3Xcjrr![G[,B!d#60$6Na06%e-68H +!0!-c-%lVP2m+ab`d0$0"C'*KBQ'!BJeKB9pH@eG66de,5NT'-i!dJ!!06%a06%e +-68a11$3d,-qDr`MijqRlrrrmK#Z!0!)b3%k!6!*1461!0!)ZA[18r`IB-M3d-ce +MBB4L%'&JAeaC9&&05dT+5cJd0$-dJ!!06%a06%e06%a20c3d,-qBr`[+Cc`Z,d& +jhIrrPLU!0!Bc2Nj06N-cJ$3#,A$iP2m&j6Xc0$-jJ@)!BB&L#'&JAeaD99*16)" ++!83cJ$5!!)&-#Ne06%a06MJd0#c2P[m$qRNU-S%d"M!YR2rrTbU!0!3c1dj!-i! +d!LZ#rC6r#He'-M3d0Q&LBQ'!BJjKBQ&JB&eE9e026%Y+5NL#0!%!!)*0#Na06%e +06MJd0#c2P[m2Ebdd0$-b-M-d0#QBrrqp,)!d!M-f-i!d!5U6PIm'pP3a0$-dB)0 +L$f&LB@"IA9YB9&"05dT+5$@"0)!!!%f#6!P06%a06cJd0#c2PIm"VLQ!0!e,@&C +'-c3d+YErrmmc-i-d!5ZSPIm#qf8[J$3!@i4L$@&KB'"G@eK988j-5NT'JM5"!!p +-68a06%e-68a-6MFd-bc2P2m1r%8d0$CIBf*LC&Bc0$*YJ2m)hM`b0$-d0#kjP[m +(Gbid0$0DBf'!BK"KBQ*KB&pG@eK988j-5dY!-i%dJJ!268e-68a-68e-68ii0$3 +Xcj6r"GBT0$*8Bi&L"@4(-c3hq)$r"Z9(,c3b-XZ@raq*,$3d-PGMBQ*KBQ*KBQ& +JAeeE@&956da,56Jc0$3c0S-!J%b#63G-68mi0$3Xcj6r",XT0$4KJ@)'B@&C-63 +UhB(r"1jr6'RIP[m*Q#Sd0$&6Bf*LBB"L$@&KB&pG@eK88Np-68)cJ63"4P#$!!& +06)"0J8`'68mi0$3Xcj6r",FV0$9KJf)%@M)d+0QHr`DS+M3d-P&MJf)6B@&JAee +E@&446Nj+16-d0$-i5df&!!*-68b"63G-6%ii0$3Xcj6r"-XS0$*DJ@)'B@*D-63 +aGjhr"lFV0$3a6f4KJ')1B@*KB@"IA9YB99*266mcJ$3%-N&16%b&!!"-J%d!6)" +0"Na21$3d,-q8r`Ae0M3d2@5!BJGMBf4"-c3UaT[r"m%Y0$3a6@4KJQ)9B@&JAee +E@&948%Be-c3d-cG+68a06B8!"8a-68e-6B"-"8ih0$3XcjAr#iJZ0$)m@f0L9NK +NAi!d!6VZQIm'abdd0$&,C)4L&@&JAejF@99666Nb0$3c-d"06%a06%f&!!4-6%e +06)&0"8ii0$3XcjAr%I*#-c3c-MBe-6)rC&!b0$&DqjIr"XFZ0$3b5@5#BJYKBQ& +IAejF@9C83M+"0!Fk5dj-6%e-6BF!$8a068a06%a06cFd0#c2P[m#iN-YJc3)-ce +P36-d,RApPIm'`#id0$*)C)"LJ'%,BQ&JAeeE@9G31$-cJ$3&0Nj06%e0J%b(!!" +-J%d*6%e-68ii0$3XcjIr%I#(1#SU+5Sc0$-mBcJd0#elr*2r"kNX063b5@9KJ@) +,B@&JB&pF@eKA46-cJM3#0Ne-Jdf(!!*-6%f"6!C06MFd0#c2N[m#jp(hJIm3mmD +aY-K+-M3c2@!e0$3YDr'3!2m(pAdV0$3a5Q5"BS"K&@"IAPaD@Nmi-c3d,&!a0$3 +f68a068b!6BF!!da06%b"63911$3d,-q4r`51,bSqb)Ar"Ze--M3c2ek!0!)`4p1 +1r`V)4bid0$*1C'&LBB"L&f"JAejF@PG"-M3d-bf5e#Bd0$C068a06)"0L!!-68e +-68e-68mi0$3Xcj!!r`(%+)!d!5fdKIm0l8Xa0$*$AcBc0$-YJqQ*r`2qc@8VJ63 +"9@1"BKGKB@"JAPeE@P!f-c3d+e,@rmiQ0$3e68b!63&-6)N!$%a068a-68a10c3 +d,-q3!2m"N5f"0!%VS)Ar$qT$-M3b5f)m-M3d,M0far5$r`[fdjT0,$%d0$)lAQ1 +!BKjKBQ&JAejF@eP#-M3d-M'IqrrrcLBd0$C068a06%e-L3!-68e-68e-6%mi0$3 +Xcj!!r`'1,S)d!5Z-KImAicFd0$*8C%Xc-c3d-#Sh8'KfG@411#XYJ$3$-c01Bi0 +L$@&KB&jGA&)h-c3d+erPJIm%cLBd0$D!63"-J%f*!)40"8ih0$3Xcj!!r`'1,S- +d!LYjqi6r(03Y0$3cA'4H36)c0$-d0$)a-6)c0$-d0$)e5'"MJf)-B@&JAPaF4M) +d0$%`TS2r"-iQ0$3fJNd"6%f+!!&-6)&0"8mh0$3Xcj!!r`@1,M3d1$1!0!)YB[D +%r`Ub+M3d1@0LC&e(0S!b$6-d0$-c-M)d3&*LC'*KJQ)-B@&IAejC1M)d0#YDii6 +r"-iR-c3fJNd!6)X!Jdd&6MFd0#c2N!$r"BiZ0$3r4i%d!Lp5lS6r&B-Y0$0'C'& +LBf0E8%Jr2$e"59"CB@5$BJKKBQ&LB@&JB&#!0!-c,CcqKIm%cLBd0$D"63&-6BX +!#de06%e-6%ii0$3Xcj!!r`D1,M3c2Nj)J63#-86NJrm&q9%c0$*BJ')$B@*LBi" +P!@4NK')!BB4L#'"K4M)d0#p+eiIr#XiQ0$3f68a06%e-L`!,68a068a06MJd0#c +2N!$r#)iZ0$3r68e+0S!d!M-lfB2r"1%[0$3jMQ)!BBCL"emm-M3e+hhdL2m'cLB +d0$C06B&-M!#!6!G068mi0$-Xcj!!r`51,M3d2S"0"d`h-c3d-c2(Jrm&RL`d-P" +MJ')#B@*KJf)#B@*KKQ)'A$Bd0$-aXSVr"FiR0$3e6B*-M!!!6)"0"Na11$3d,-q +3!2m3Mbid-cp16%a066Nc-c3d,E@#r`Al5c3d1'1'BJ&KBB&L!Q&LBB&L"f0B0$- +d-%6FLrm*cLBd0$C068a06Bd!#Ne-6%e-6cJd0#c2N!$r$)iZ0$3q68a068a12$+ +!0!%XRi,r",SU0$&CJ')$B@*LBBYL"f0A-M3d,'2bM2m'cLBd0$C06)"0M3!"6%b +!63911$3d,-q3!2m&MLid0$j0J8`$68iq-i!d!5U-JIm(q6md-NeMBQ'%BJ"KJQ) +!BB&L"PXb0$3UJrf0r`R1*M3d0Ne-68a-MJ!*68a068mh0$3Xcj!!r`k2,M3d2de +-6%e06%e1361!0!SVH2[rrqFm0$0,C)&L!''(BJ"KJ@)%0M3d,*12r`R1*M3d0Ne +06%e0MJ!!6)"0"8mi0$3Xcj!!r`51,M3d2S40!da04$1!0!JZCm"j0$-d-9H+BJ" +KJQ)&C%8c0$0aN!$r"-iQ0$3fJ8f2!)&-"8ih0$3XciVr$I+rSTfhkC3Z0$-r6Na +0J%i&68e,5N!cJ$3)-LJb0$3b3'0KM'))B@*LA6)d0$0qN!$r"FiQ0$3f6B"-M`# +"63911$3d,-q)raIeLcFS,5iS0%Bc0$3p58G&36dl1$Bc-c+%0!)c-N++BJ"KJf) +'BdNc0$3cIT!!r`61*M3c0S&0M`!!6)"0"8mi0$3XciIr!Za1,BJd"$-b-M-cKM3 +'-c)b1%CEC)4L!''%BJ"KJ@)"C$U!0!%cIT!!r`M1*M3d0Ne-68b3!!!)68a-6MF +d0#c2K[m*r&Na0$3b0cFb-iFd%$-c-M%b0$Bm3deAAQ0NBQ*KJf)!BB"L!Q&LBB& +L!f&LBM@!0!%cIT!!r`I1*M3d0Ne06*%!#%a068ii0$3XciEr(DNU0$-k@f0NA8! +b-c)b-6%b06Fl3NC19&aIBf0NBi*L!@&KN!"L!''"0!%cIT!!r`I1*M3d0Ne-6*% +!#%e-6%mi0$3XciAr"Ij20$3iBi&L#'4-6&"8@9aIBB&N!'1"BJ"KJ@)!BB*L!'' +,BJ"KJ')!0B!d!60qN!$r"miQ0$3f68a0N3!)68a06MJd0#c2KIm&k6)d-P*MJ@) +!BB"MJQ)!Bi&N"'0KAejHJ&d$AQ&NBi9L!''!BJ"KK')(B@3p-c3d-hk3!2m(cLB +d0$C068b5!!G-68ii0$3XciAr"08V0$"EK@)BBf4MB9a96N9#2$Jf063c-M%a-M) +e189DC)KL!''%BJCM66)d0$0qN!$r"miQ0$3f68a-NJ!(6%a11$3d,-q&r`6F,63 +a@B4L"eT23MNe-M%bM$3#-c&"N@)&Ac-d0$0qN!$r"XiQ0$3f68b6!!G06%ii0$3 +XciAr"[Fl0$0'C@'!BJ0M86!bKM5!-`%b-S%c"c)b0$3c-cTMKQ)!BB&L!''!BJ& +N4S!c!)'3!2m'cLFd0$C06*-!"de-6cJd0#c2K[m*FM%d-P0PBQ*N@S)d%M-b0$8 +h1Mdr3N4'4dK)58K(3cb!0!)b5@1,BJ"KJ')&B$-d0%RdMrm'cLBd0$C06*3!"Na +11$3d,-q'r`RF,63d-N&58d8cJ63*180)5de06Nj06B"-$8e-68a06%j-0c3d0@* +KJ')!BB&L!''!BJ"KJ@)&Bdia0#pcMrm'cLBd0$906*3!"Ne21$3d,-q(r`HQ+$3 +d-c)a-i%d!M-r6SC0!Na-6B*-"Ne-5$-d-9Z&BJ9NAPYFB@5#BJ9M2$-d+TU1r`E +1*M3d0Ne-P!!'6%mh0$3XciMr!Ud`,S%d!6![J$3"2df!6!T068a-68e-68a-6B" +-"de-6$3d-P9MJ@)+B@4216-b-M9!@@5"BJ"IJ$3"+UZ0r`A1*c3d0Nf9!!C06MF +d0#c2LIm@kT!!56Fe3i*d-$3c2de06%e-68a068a-JNd36%e-68`c0$*9Bf*LB@* +I1M+#0!3c-8&KBi"L"9Jb0$3UUBcr"FiR0$3f6TB!"8mi0$3Xcicr#IAcrrq2,M3 +c2dk"634-68e-6B"-JNd'6%e*-c-a@i"L!Q0G0B!dJ6-50$3c099NBQ*M8M)d05Y +mGhkRiiIr"FiQ0$3e6CB!"9!i0$3Xcj!!r`D2,M3c2Ne0J%`*68e-68a068a06)* +0"%Bc0$*IJ')2B$Bd0$-f48T)3$3c-c3a4B"L#f04-M-d-6)a,#ajmBAr"FiQ0$3 +f6CB!"9!h0$3Xcj!!r`@1,M3d2dk"63"-J8d!6)&0!%b!63j12M3d0f4LBQ-m-c3 +c1dk!6!e05cSc0$3b1&YMB@46-i-d!M"%kB6r"-iQ0$3eP`!&8$Fd0#c2N!$r")m +Z0$-rK%f!6!406%a06)"0&Na01$3c3Q4LC%Nb0$-k6Na068a068j$J632-P"NBQ0 +C06Bq2$-c0$*@qi2r!FiQJ$5B!!3f0$3Xcj!!r`51,M3c2iK0'8a-68e-68a05c- +d-P"LBPNb0$3f68a068a0J%`868Xi-c3d-8*MBQ*JB@4MAMdc0#U`Jrm"cLH!0*J +!"$8d0#c2N!$r")iZ0$-rJ%d"6%b!63&-6)&0%Na06%e04$-d-PjLBMJd0$0*68f +!6)&0!da-6Mb!0!)c19k!BJGKBQ*M0c3c9)2r!FiQJ$5B!!3d0$-Xcj!!r`@1,M3 +c2Nk$63"-J%d!6)"0%Na06%ij0$3kC'0+-M3c38j06%b'63P#-c3d-c3eBf*KJ') +&Bdmb0$IbJ[m"cLH!0*J!J$3",-q3!2m+MLid0$j068a-68b$63C-68a06%e,J$- +'6'0H-M3d0i40!da06%b!63&#-i%d!6GMJf)%@$%d,q1#r`(1*S!dQ!#!0!%Xcj! +!r`Z1,M3c2de06%a06%b"64&-68a-68a12c-d-ejN36-d-dL"634-68e-6)"0!da +1361"0!-eBQ&KJ@)%8c)d-qZ#r`(1*i!dQ!#!0!%Xcj!!r`L1,M3c2dj-6%f"6!" +0JN`H68a0668d0$pN@M)d-ca168e-68a-68e-6%e-6%e#-i%d$$*5Bf*KB@*N263 +d52k#r`(1*S!dQ!#!0!%Xcj!!r`D1,M-d2Ne0J%`568a-68a068a068a03c-d-9G +P2S!d!NY06)&0JN`&68a068)cJc3*@'9MC'4)-c3YP)2r!G-QJ$5B!)!d!5h9N!$ +r"BiZ0$-r6B*-"%e06%e-J%d26%e00M3d1Q4C-M3c2Nj-6)"0!8a-J8f!6"*03M- +d0$N`0$3c3%Y*1M)d0$c`Jrm"f5@!0*J!J$3",0H3!2m(Mbid-cj068b!6B"-!8e +0J8`(68)c0$&8C6q!0!&-6)&0!%b!63&-6)&0"dj#-c3cKBXUJ$3"-c1!0!%XcB6 +r!GNPJ$5B!)!d!5cAN!$r&)iZ0$-r68e-6%e-68a068a06%e-6B!d#$TMA6-d-cj +06B&-J8f#6"&068)c0$0prjNY,c-d-c-U3p+&r`(C*B!dQ!#!0!%Xf*!!r`Q2,M3 +c2Nj-68e-JNd!6)&0#Mic0$&@C%8c0$0,J%d&6%e-68e-Jdd36%j#-c3cI[rrjT9 +E4%TUX[H'r`(C*B!dQ!!%0$3c,Uk&cJ(-bBA)#-Pj,c3c2Ne-6)&0!%b!63P-6%e +*-c3d2Q4KJ$3!2)&0!%b#63e-68e-68e-68)c0$0VbB(("-V)amM,KFd#cV!SJ$5 +B!)%d!LXS+)!TJ#L)+3i[0$3c2dj-68a06%a068b!64"%0M3d-PeM6c)d-dP068a +06)"0J%`"68f!6!C06N)c0$3`J#N"+LU#+3SS+5NS+5JS+5NV0B!dQ!!!-i8d!$1 +10!3c3Ne06)*0'Na068Nf-c3d-NPNC$Sd0$K268a06%e06%e-6B"-"de-6%e046- +cPc5B!)`d!$1(0!ic08a06%e06%e-6%e05$1!0!Xb1'0K@c%d-d0068b"63&-6B& +-J%d!6)"0!6FcPc5C!!!cJc3!-iNd#68h1MSl2NY06%b$64*-668d0$)j5eaLC%8 +c0$406%e-J%d$6%e06)"0$%a-68a06%e-3$Xj0c@-0!8c0$3c0$5`!!026dj1K%f +!6!j03M-d-NGNBf&LC$Sd0$@"644-68e-68a068a-68a068a06%e06e$*!!*068b +$63P-68e11$3d1f4KJ@)%9c)d-ND"64&-68e-68a-68e-6%e06%e-6%h0!!"0J%` +"68b!63C-668d-NpMJf)%1$3c3%f#6!&06B"-#%e-6%e-68a060%!J%f!6!C06%X +d0$&@J')*B@*LC$Xd0$j16B"-!8e-J8d$6%e-6B"-e3!,6%e-68a-668d-dTNJf) +$06-c3B"0J%b$6B"-!%hC!"P06%a06MSd0$9KBQ&LBQ4,-M3b58e-6%e06)&0J8c +H!""06%8b0$-i@f4NBN`c0$3h6S"0#%a06%e06%a061)!!8ifJ$3*-MSq0M-d0$* +)6B"-"Ne-68a-68cP!!%e-i8d!60%J8d&6%e-6%e-k!!!-i)d$$-b0dK068a06%a +06%hX!!8c-c3f28L#630-68a0mJ!#68e-J8d"6%ch!)"-r`$r!2m!r`$r!,3!G$K +YD`!!3!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!3)"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"+QHATUfaY,D +iZEbr`F6'b-c2dY6BfGcHhprIi1$Ji1(KiZ,Liq2Nj1AQjZIRk1MUkZRQd+&"!J! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$TIirrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrU,"`!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!bYrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrq(!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$NIrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrP +K!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!'Mmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqim!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!"$mIrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrpSM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*1,rrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrm36!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!l"rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrk3)!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!5VlCfGRCfGRCfGRCZ$d +$Q2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrAS"!$#`fGRCfGRCfGRCfF9H!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!%Irrrrrrrrrrrrrrrrrr+Ikrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrpNj2p[rrrrrrrrrrrrrrrrpN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!X[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrlrhrrrrrrrrrrrr +rrrrrrm%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$(rrrrqrRjqIRjqIMprrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr[MjqIRjqIRlrrrrc`!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!-ErrrlJl1cXl1cXkq6prrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrMCkqcXl1cXl0cprrr2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!a[rrrZIrrrrrrrrrrrlrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmrhrrrrrrrr +rirhrrmi!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$'rrrqjrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrMrIrrfPeaHA*N,3S!!!! +!!!!!!!!!!!!!!!!!!!!!!-ErrrlRrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrq2prrrrrrrrrrrrkCda!!!!!!!!!!!!!!!!!!!!!!! +!a[rrrZIrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rirhrrrrrrrrrrrrrrrqT'3!!!!!!!!!!!!!!!!!!!!$'rrrqjrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrMrIrrrrAirrlirIrrrrr +V3!!!!!!!!!!!!!!!!!!!!-ErrrlRrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrq2prrrVp2VrrrVjmrVrrrrm8`!!!!!!!!!!!!!!!!! +!a[rrrZIrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rirhrrqRkrrrrrrrrqrAqrrrh-J!!!!!!!!!!!!!!!!$'rrrqjrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrMrIrrk2VrrrrrrrrrrIE +qrrrF#J!!!!!!!!!!!!!!!-ErrrlRrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrq2prrrSq[rrrrrrrrrrr26rrrpm!!!!!!!!!!!!!!! +!a[rrrZMrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rirhrrqMkrrrrrrrrrrrrq2VrrqX)!!!!!!!!!!!!!!$'rrrqprrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrQr2rrjrVrrrrrrrrrrrr +rmrrrre3!!!!!!!!!!!!!!-Errrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrIprrrRq[rrrrrrrrrrrrrir2rrQ`!!!!!!!!!!!!! +!a[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrqEkrrrrrrrrrrrrrrclrrr!!!!!!!!!!!!!!!$'rrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrpjrrrrrrrrrrrrrr +rrr$rrq3!!!!!!!!!!!!!!-Arrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrq[lrrrrrrrrrrrrrrrrqrrrp3!!!!!!!!!!!!! +%eIrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrqrrre!!!!!!!!!!!!!A$prrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrr[rrq)!!!!!!!!!!!"2p2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrm2rra3!!!!!!!!!!,H6 +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrlkrrqa!!!!!!!!!"(&rrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rq2MrriF!!!!!!!!&R2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmr[rr@`!!!!!!!'rlrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrr2rrrmH!!!!!!")m[rrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rmrrreJ)!!!!!*qArrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr[krrq2!!!!!"2*rrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrp[rrrcF!!!!'S2rrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrc +hrrr3!J!!!'cmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqIrrrf!!!!!fm2rrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrlqrrr1!`!!"Vhrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rpbJ!!!!`q[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrj8!!!!!%Irrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrpB`!!!!!!-rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrfF +!!!!!!!!5l2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrJ"!!!!!!!!!$$rrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrl8!!!!!!!!!!)Rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrH!! +!!!!!!!!!5Irrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrp"!!!!!!!!!!!Dp[rrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrm48!!!!!!!!!!!(0rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr)!!! +!!!!!!!!!!*Rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrj8!!!!!!!!!!!!!9[rrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrr9`!!!!!!!!!!!!!Mr2rrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrXU!!! +!!!!!!!!!!!2Crrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrf`3!!!!!!!!!!!!!!+Errrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrqX!!!!!!!!!!!!!!!!B2rrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrfd!!!! +!!!!!!!!!!!!Tr[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr0`!!!!!!!!!!!!!!!!AKrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrqN1!!!!!!!!!!!!!!!!!,(rrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr`!!!!!! +!!!!!!!!!!!!!E2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrq'!!!!!!!!!!!!!!!!!!!drrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrdJ!!!!!!!!!!!!!!!!!!!VSrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrf(!!!!!! +!!!!!!!!!!!!!!,Rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmm"!!!!!!!!!!!!!!!!!!!!HIrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrR!!!!!!!!!!!!!!!!!!!!!!prrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrpF!!!!!!! +!!!!!!!!!!!!!!"$Zrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr5X!!!!!!!!!!!!!!!!!!!!!!-(rrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrL"J!!!!!!!!!!!!!!!!!!!!!!Jrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrl8!!!!!!!! +!!!!!!!!!!!!!!!"&rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrG!!!!!!!!!!!!!!!!!!!!!!!!"Mcrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrml!!!!!!!!!!!!!!!!!!!!!!!!!F[rrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmK)!!!!!!!! +!!!!!!!!!!!!!!!!!Nrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr-!!!!!!!!!!!!!!!!!!!!!!!!!!"6rrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrjS!!!!!!!!!!!!!!!!!!!!!!!!!!#2jrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr@!!!!!!!!!! +!!!!!!!!!!!!!!!!!!Y2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrdU!!!!!!!!!!!!!!!!!!!!!!!!!!!!S2r +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrriJF!!!!!!!!!!!!!!!!!!!!!!!!!!!"Krrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqh!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!#hmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrhX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#0h +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrr3J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!VIrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr3A!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!"Srrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrc!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$$ +qrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrqE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#1$rrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrreX!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!X[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrq,J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" +Vrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrr%0!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$,prrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrri3!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!#1Errrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrr9!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!c[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrmm!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$'rrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrc`!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!-Errrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrr2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!a[rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrmm!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$'rrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrc`!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!-Errrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrr2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!a[rrrrlrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rm2lrrmm!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$'rrrql2rrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrJrIrrc`!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!-ErrrlQrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrq$prrr2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!a[rrrZIrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +ri2hrrmm!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$'rrrpk2rrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrKrIrrc`!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!-ErrrlNl1cXl1cXl1ccr2rrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrlmHVUkZVUkZVUkpcqrrr2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!arrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrp!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#Qrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrY`!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!#rbrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrP'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!#D+V+bXV+bXV+bXV+bXV+bXV+bXV,cZrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrE$V+bXV+bXV+bXV+bXV+bXV+b +XV+b50!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!#+'iIrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrqqJ-J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8CGArrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqU*)3!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#eR*rIrrrrrrrrrrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrq4q'`!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!C-[IVrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +rrrrrrq&k&J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +#2,,jrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrppZ%!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!6#Lm[rrrrrrrrrrrrr +rrrrrrrrrrrrrrrrrrrrrrpGX%J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!RLHArrrrrrrrrrrrrrrrrrrrrrrrrrrrrrXa +H$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!',Errrrrrrrrrrrrrrrrrrrrrrrrr-&,"J!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#l,rrrrrrrr +rrrrrrrrrrrrrqEP("J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"(IVrrrrrrrrrrrrrrrrq,4#"!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!a+KCLpprrrrrrrpkSf!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!% +dPY6Pdj%Z!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!``$!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!D@-`1!!!h@)!!!!-DP!J)!d+K`S!!!!8CR4 +jF'T`-L!!!!!!DR!b)!!!!%pUF$*S!!!!&QPSC()!!!%!!!!"!!!%"`F!!!!!!!p +MEfab!3!!!!!!%!!!!#*MC'9Q!!3!!!!!!!%!!`!"!!!!!3!!!!)!!J!!!!-!!!! +!DR!bBrp2re%!-J!!!!!"!!!!!3!!!!!!!!!!!!!!!3!!!!%!!!!!!!!!!!!!"!F +"!3F"!3F"!3F"!IpN!#-!!80bC@&dEh)k)%TKFe"PFL"@CA*cD@pZ)$%Z16!`,M( +r8J!-!!!!!3!&"!3!!IpF!"0!3%K)8%K)8%K)8%K)8%K)82pG!"3"3%")5&")5&" +)5&")5&")5&$rA3!8!N"!5%K35%K35%K35%K35%K3red!&!0!3%K)8%K)8%K)8%K +)8%K)82q3!!!+!!!!!0`K!!(rNpq#3"ik1b6N0N2HI'jkp56LjL6ar,e+$#4b(aH +&#h8pBl*GY!%Z1*cqF3#bfSC2'1P$6@$4cRbR`4rD!bC*jp&&&GU5,T+J9U+9mpq +#+"ik1b6NE+18GN#'ZBF"d-"B,T-Gm#Q3!'fFd&*K%h46G1!IcTa5l#rVa-8'Da9 +dSZC)p8NEUDGMBccr!UM@U-k-$FJaH'IIJMJH1MXNj$C$d4jpdHJdY&RiDIk@KjK +)91X"Z@H$e-[bk5GmZ53MY+"cGL3[m)TlpP88EiGcB)%Nb3XXBU%DAJ9l-4#**U[ +5Mpq#1!Yj`f@NQYe36CrRG+jZ"pmk#HKC3*Dp&4#$iUV)JLQ49[DX%HlT`DIkaK! +k3cd2@4@r"DjNS8IQ'"@c1e1I*+aKAaKM3kC(hjSPqD02c4aF$3Y86(6NRc!l*a1 +@E-jfHX*m'@MV3[H5r`'jAi8eP&$XUK'X9Gpc%DKAi4cQ`IVG[f"bii9[PiqQdj+ +8VrecPP"h2bP$lfEV4!Md50(K509p@6$pM#La5m415r$a!KVeIC!!NcVF'KL5JZ@ +2j5I(TXaRQ!+Z"#2mhZhIaIeBi*kiN!$Cb4lKV#B#TbJj'edCS3fE823SL4M9GLR +YF*9J6Q34A-'CRaiIUcq1ha"a+)LbIY-3MlpPAG@i8UhQUPai2LC-M1rLSUYb&5V +`&!pXB89rcm$fIJI4q#%!4APPPDU*3M"f1f+d$9RMGrahGm[ESE")"BM&F5Bd1*T +aY[ZCH)dUEVlj&c"4(c89%B[D&NCi")eGS@c[TLP!ZCBRlLk*'m3EF&YbS0UIB"` +IQUJeh'8K[!9Sf2I4mm`+*@0f&F#m8efp%4BV@pZ3!0%#GA&0"Ei22PGdYalM[&@ +4lp-B56!p#dl8"MJSFraLGbjkr-4H#r4Bj80Er*fX#0R`4Jp(hqc[E$bSd[BS15U +a@"(cNUaUM"'pNaS5Mmr"#Ri)dr0%"e8&2Q$lH0k4S+*ePf36'FUbZQ6j%U2lQa` +k*BRY3jT,8&j0'h2U5LELS[CBDZ4"d8ZS[&rM%mk6k4QECCKmPKG,&dpfdTp[&M8 +!M&ZieEVJ9RQMV-k*drK!pRK*3`ZCYB016Qd(kZI@9fR@"AC8q@IU-LbGTZGlARE +HPShpS8T*DH6Eab4@2bm,qAQR+J%[9(4@#ibRelkFNck1aKIB%Y*`(&Hb*Dm5+D! +EQh[fNGk+#kYIE*erRB2%$MMHH3iP,m0HqCfXAi@@2G30hjQeqCV(i'THfS#'B4R +f1HNT#`F(q2aY5He%jl+(Rple%SJGr5)c+L5j4kJCr0#qpmRc`'AP14cRVA[GNhj +0d3''FPG%Ar4*X%hBSEA4i5(r%DN$,cLY++2JAG&,@NHLKT6*U24+l#&0Mi(@Z5X +%4pEQ(`S))fD`A)28NGTqlDDNjMYTk,Blr*FjL@N6aeB9S1jem&6[9$jh%S@hGAE ++lD'p02p8X'+rcm,4[cZQIRCS'U,*b&!$)103U$D-d-E1r5p6DS3M*D#6)+*JYkU +f5q4V-m+GRjA"Rr3[18r+DDiM29Sb'I9lYNq@Q)i,SZ`G)R!GbUV[*SA0!4Pi9jj +QBhXT05N-c%aP`'#,i(e1%#(#5QX2RdG#l86&+RGLSB9!`LV8-X)k5diAI&Z)lfC +q"`iqcRX3f8[+8E5iicRV1Pc8f@i51hHrcKr'F#a9jZ43Xr+T@dGc8Nb!N!"3MY( +M-DP-N!$CPf56-C3S6jih0,q8GS@[hTUUHX!+*!H-QAkbdd"T2jkmd89%4Rq`F(B +eP*b#44YNEi-R0m!5XhEApRPJeHb%Mk#*rA8`hE0eZFJb+$P&Lk'HmA@T*C3Q2UH +N4rA!Ki'qB18CSB92%"'DF*i+ad-%#j+jkYG#-IcF9k-IIDf)Z-'TP*r62F+"jZ& +!f4AZJHD,kaG'@ac$(S,i00ja)'B$SYL)GrEL1PQmTLapZdEUYQ6*43L&STAF1%4 +cNaX!eIa51qGIK*F0SL%!ehSQMrNq*p8mSCm%NfKZJF%Br$`Z5qQ8mR[`Y&$a)+5 +D&dp&96r"p%`L)DR4LlC&flVDjD"4@RCQX)RSNaSr)Yi,"NB*ZC!!SCeE2`Hm*8P +lNI1r@2c4"G)0XhCSP2Nr!ke*`%ka'pYe4U`+Sej+,C@FGHch,bB80kj$G"ZV)#6 +"PEpMTHk3!0PK6$TYC4mr1'5$EabK0CCY-)LEESJR6B*6`$Xq!q'01$jEBX,'T2@ ++,l5SHkM')9CHZeBjIXEIY@*,+''r&QJ'bh,EMQm[l91kN!#HqH&&5!984UJk55( +rBQ9,T1+p3Nc@A+q`mUS&%K9HD&(A$5-%MQEAQ#F!#D3hXmhpaKQ$Q@4md"4A)mr +#a*q&Uaq&HT0Xh5"`q'JpVlM6,Ym!e)h&c0C"Hr(1Q*'cBfCHN!"8l#,cSR*21hP +d(-a9E"I5f5APa`m12fb3!"4mC+`[0C+8%YaS!S(+P$G36X[D)%6aJXjYe0FCF@8 +cm"Y3S6VhKpA)kD1Mj&fRHTXqJqUe8+L(Kai!INl$lfJa4)hQkdl```dp3%p+`I% +Q#)!%rFlNp++AVD`&qJVi$@'3!1#F+epZ,$'N-!(c6ZSJR`Z%k&#iS(R44a5$EL* +1rch10bZrU19M"@U%6JH"J'j$fk&J[fNZ$Q0rPZlK4Y)[[EZ""BjlN!"ap3[+CSj +(!QB0bXLa,CX0Q*SmEDrT$#91GYb8$,6[YCDGN!!3MTLlh[fr6AM!!Uqf1AL'jSA +f9dfM-DGBcbCMDmH!mk``kPBrAiY+8Ge!&(r38&#aP)8YImbCC%lN3T*(,-pcrcm +1`SZK2Rai(Gb-+j!!8SCVH!G2dbM`MkA[VbSZm(`4e`mX!rimc!hQS(G-6h#F8q+ +PcUPNiSFAPjN@$Xrc*dCEAS,2XVB1"NR!"fE[elc)iQI,VmBrVhmLh,AP4i2&M(9 +a5m*G04!RHUQ06e4V%dKL1lpH,SY+FS(QLLL`a8P+baU`PB#3!&G0JHRdJQ`'`c6 +CHEEkC8Y*S%0HdTK%lM43&lRK[-6Z#P$2p5,N,Z-4"fmp'26B,H[VaG(!BLVVLeq +Xm,HfADK!%"ZH**+l%V5N92k9KGfpk*L%MXa6%RZITDJA[jLeSd%HUjN8Q&[QAkC +KF66J[c-T6U"IYY'KG,E4&q%58FS'XCq)3-&ERfNTSDrMTP-[cm,0RiA&(i@@'TU +!Q'"c%*!!PkN83QH,!c1eF$q%ZNXeHrfKEU*hMRD4`6dC'VEf4&8UJ#KB"Ud#`3, +9)IL1N`N!q-3m!@#j83*%GU['4Gm*X((*iZ4da'TI3")[A&KS)&&i@2kdNb`6C&( +P"Q[I+49G1ik('Y+6kNZCm`2YLR`ij+Y`ZCF%8SF,Kb&5k'*!4kHN[1-La+43cF1 +T93@AaAU&ESM(NpXC"&e4")[Kr#SL&QGfKRiJX8j-+#"(`kG3K8(@eqHV9i*rC#k +%%EA#jlSZhmpKC6p@jNIpL9L-TA@Hq"H0qKk#!&GEc&K'@djAEe5Y,MKNB8pHT&5 +Bjb@E`TQp*!DDrLTTf1fk)RGkZ*MBcbI,QYe(bD4*@TFlkSLiKMI,DP@9*LaP`JL +EXbM!HC!!-#!PHahcl2"3QEX5Lj+2FIY#qe9dCb&0PMGq2&,J3YC@VR($l'%'KMB ++SQ,$#8r5a,J$(Nk'Rm1p%DMmH+T4d$KRpYeCqR9FTLlT5Rk@![D%FY%1+pkec&8 +G(b2f1LU&29e#-j8DA!Pf)lFKbaKYk*2e+k&UfB44[Sq$iPGqc)b-P3k-BSB%Cb, +FY1&D1b#8iC&Ze!cS+%4M#Gie+Q9R[%QkMBJ!p!CUf)5pVV&*ZhlR!RA-kBRZ$Gr +pjb!k4Q6lpZM$G3@q@"MX-KN!DG%H@*L&@(A-C8im&EGcj'keYAQ#Gf8"`!MZJYb +#-MP-cE)TUfGSR*,Ji"alIFpUKKI,)adN08lIE-R&`SP%RV1BZR$5#[G`0DR'+8% +#ZQbhPKP[AhMf`S)[k8"1@DqP[a+Pmd4J&ekf-qHAGh-*EfUCKZ*C'AQ6jIk,jj* +)Y1*pYCeqrNTrcm(kr1K)r"l!'GB@&YMXR#(haIJKmH8kHT4+MT!!p'X0r$Dik") +2SkmSI`N"21&IcDe'SPUJ0X%TVf'0S2+r-b,(fBV%mf4jf%mdI14TLNhkIf9L6T( +UaCCbPIj[JF6+jQY2[hqd*1!T2!-2,CLF+%#d$9rA4%9epI4Bf1cmG0bpQ)5fe&1 ++MkBG`fNJc6E(BQR%*r6AV8TZkbG0%@KSf*Za+Y#4UPp3!VF&E$PNVdYcGl&83ce +0#qD,3TirlUheriRM,6KDI[cj8el'p@ZY*&Y2NQ-*KEaaC'JiZ,QI-h+)1Y)T1p3 +4H*I1E16Fp4TMEI,'Ld%*KaH9!QVM$Ii(48aMNhJD)ced6Ci@hf1HrIH4r#Pfkpa +D#jdk-2K0jc-+FbED)Ch@f`IdU9JC3#&pEVIiTi*UFSDL`iME8-SSF[MV0qAi[[P +eU)6EqmDIf!3Q2#,HKRlRajF+Hc4f(jkDaKIZZ&l5$JJ9UIlXJ[HN4Yq`cZEQ0D6 +de[GX!BG6ALBV3pEUG$J1G-r$SfRiG,NIK[+!Mb*B"@IfhXIf6j!!L[-iH"B-23r +,+&MkmlMG0)bTm25-YG`T$Z'T#(j4982rDmQ"rGHkH-N5$6N,kdJ+fC2SaLVl6U& +d&U0!)aLkp-FZ`5fRPQ!!fKPL[&38(I#p(48eVhMk*hkPd5G&lHVcr6U695!,fR` +E1S)kVcj(&4rjQKfX+,G[,E36&95@60TSSj'dSZ+PE*@M3[aA%)U#pHkLa,e,Fbj +K0%EfU$D814rprc'H25Z%A1@mbEX!VSp!3a1DdH+T,66Y)jAlpmLF-,LJ*VcKUq@ +jE3X(H@lMAl'D$h"GZJbRqQGa,QSCYSACdebGR0ib2cYGP-h)"5,6%a823lpVPND +k[#N0XTKN(plMMk(A3$UpflAMpk3$eVC'$m2p%PJlP9Q-&")k,YNNJN&@ImPKii2 +#Zmm+"BaRbr`%QYVNC5YfTe*k2VV3fpHL`Pk-L`*&lN[r*#9T4RA'hDm5X1YkZ0@ +ji2,kUr0hLJFjf#9#S"-P#iZ3!#N%MeeY9Jj'm+I@ZHNVmcB$5"Ai3"YdV3SV(%# +H$qQp"e%Ki`9IH#D@qkMS1Q6`DmBa9E`P)irDkKM6&jP@V303)U&fRjpUIphLUfa +3a,GZ"IB8+NQe3aGN*KPB8)6RG1#iNDMqfU#RldlU"5a`5`h3$Xf'bEf2D3+JrI4 +2VTCX1,P)"[k"R"'jiqb8BFpdN!!QpFZ$T[#maipRrAGX9VXeEEjPrNCZ[IVh[Ur +l@!eFJ)26M4-PrdP#l2AC!+fBBhm@!Rj5Fe2,ZV*r%A*cRA#MIIeZdA#lEI-LRFc +SZ0jiB-`F#*DFH#fD-D@A9SSSMAF`MU4(1E#Zb2Uqp@%bB$@Yl#LYGf(C,dj"5Q- +#i26c1@+dfHe$E+kpc25h5pV@a$$j(1f"6UPI%Z9["cJ4S*`6U+F&`PE`4mbc*-1 +[*ji`+$3'kidi0f8aqM"icUh"SDKMaJD[4NAZjZDTR`(3!KXXf#qdm`(J(6Nc04b +%)F&+BL0h*PBE8qqAFaP5QGQJk%P*ZPa&rC+[EFjFkm!GC[KLNQL)@!DVa!l3V[N +A2j(K9`(U)@R-cf"ShaD00i)A[pAq"*4S0!I&[ed"ZP1b"24Y940U(G,!IY*qc!I +%3N60(29-[PpiG0-aHCi2PRUk`NQ[kZ80E-RRI[hl03K3V1&F-fN+F,c)f1'ba9V +mHb*2[+@Cc*REV*5Z9pXMmJ&+P3hP395-UIM+'eCCqV"baG9X5CrDip1%)[bldi+ +#`K"MMG+@piRcLNq6KKAcPRC#4p`Z"[b"Tk%J3h6J9q*N6%-qaqlp"(kYNNCa&Fl +KV8L6L(Q!`H@1'"2d,XHCh5q[2()KBPNJ!!fCY!,'&F2NA+r(cKX1*bU&$BEU+$Z +I,aC6!ZB5)fC'ai`JG+f%e[#bmQ$qa8)3))h9*jS@M`FDYbpQKi5kpjNddm+1E1L +k3p+9DScc3!AGkXAQUPS(,"@+kNDrQ)Q48r9A",8e9p`j4EPGE'Pr-Gq,&*V@TNN +2SK-)B5-&a)M-ipL1lp'ETri*m5,!LVR*01Q-496YY'!e,f8T5YMYEfi*aVHF*Yp +rNS4hBC1Bbc$F1%045V"Ta+a1"hPBFLHL$LjFb-BCp40fM-m14p)1m(BQU[+(lJY +&FAMqIQ-4hLS@5)Z[mra'-UTqEi'0ShaKL2Q6%Der[#S0jTTGm9A066UFjq+D*+J +9Drfi4V@4Ziq["[Kem@*kABC+ha6SGj`&6mH'!SaA-*[BCR2N3$)%XjL1fd*lmYQ +Hf8Em%#U"Gap+50QjF,J29VUZ`K5&)+rVA"IN%3-5fZm(&dPYEi&*''-1J*1JXl# +r5!NPqZmE+Me%5Q%ZH'PXEcYM+IYkHXRi),4lfm(GX[a&#k+qjGGP8*9qUpcZ4p! +$pPm$!A1RS+!95d3r,ZJpB4HFe5D$$Z8E-G[S6p&'h")VLVj!Q8T1TM8AXQ4+%ZN +XITTe"`F'rLX'e6+UAYY+f,3iDZAp5J5FHX1mZGJ!XQ+M5Pb$$%FSdIH'$,fjqmC +6*U*AfXM*ZXX&!@hj)b-ABk6!m)c3TcY6P,qeCU%I!3MfpXM$Aa+KKk"bFIT58jG ++!j`QF$3NDQ-RFRK"+&j,HpFUBM55'rUdr'k3!+!cRb$pc4&pNPG`-Y5C``"Si2` +aB"a'++FALQf2#15r)P0e,0,FIlfBXUqrie%5UNY5TI-*6C2KqTJZSq`$dVZkXPj +,4H`PYBr9ap[3$2`k(Br$FN!(DdjF3mj9q8NY"TlcKm&[a-pB2TRa!d1NC-e*1E1 +6bq6"Zl8%HC*)q&c('BI!ATS54DM4UZSD9UDQmi%$c#IF#[Y54ch[Y,SCb)9r@[5 +RM(0ISPC4RfXf3[EjqXir#F@XTE@@XKp"Vb4aZa)NGT3jN8V95B-4,3&ZFU05&[K +1D)5+B1*B%jqD3mM)@c0900'HQXG#,d$3QifQ5G@&"-5K)kaQ)D`db%"$[2p3ql` +#LXql#&i@G#Bfp'J*b-M0M`cd1,8,0"+[6@'CX)1KAh4'i[bi%2#JKRC6m!arq-a +VFjblYi+X0%#md9+f#V#LAFlI[Scr@)Kj0Kq"GTM6[9A2YSiN"LGiPc2'$U**H(U +T9be2SiUfEhiSLL8#AFJE2X&Er*EINH)$4rcX9md3Y!9QXM6I"S1Y4Z%plFHFfiT +1QSTFHH+$Cqc)h+(,D'BE!5P4b16Pfi4(G2(@M34rd+#qXES)QCr8SbG#2dQi9Hr +ji3k@Zc'iYbA4EXZe"#2"Z`If$!cjjSK#e4`DBe,bNe,J-,5VI%$1C@Z6,iYd`bj +qirN%cqC%cU-8SH0eH%c4T1Z6mjj#(`EPSpD$b14)ai[9p"YQkTHK"NXFRE5'A!" +CG5FT'C!!k$mYMM#NDTeLcqUAp3Pk+aY,eYkVjr(qU'd9J@Q2-YPG523b1iHG4fY +XNSPHZfRfD!FcY5XAq-b6Ed#+D#A-FbmjhU+m,@p'Z53a%'!8-"MR!2`)`!DGlUe +Rd8b)5VFDYaN'Ec$*"j-9iAJ%$5bT$ld1b[JTS!Q@fY#IZBA`#ec1G+F+bmQek+d ++ccU6KGVQK8Yb8QrYGKc6,QT0,clEmC!!mK@Nllqk2XNL6YN'EYcG5"@A2QA"-lJ +JlBbG*!FH0EV#MP5rEC%Q++*PSm+JmTZ,)@c,LZapE&IrCK9bq+8)2D`Q"&pf"83 +SV339&hUk4qc`cmI*BAKD@',`2$$pABV('k*pr2p[0`mmahi$c#2&-5TE16'E3Di +A4lCJr00,NR[B`i!I)p`'34"+22eM@AC4jBT6Ydp!R*cApaX1`66dFTP46m"&!)c +Y5CJ-Z'fr1QA8fVAr%pp9UZIJI5FGD&%rAZ1$jihmX@E'#H$RB1U5$8cAi$iq`HF +L8jF#-a2)5l[1!KNdT,4%3k4k6Gp$#UZ+Jl5RqZIFh,%ahkT'Y,44H0lTbA02%&K +V23Y*,2RL641TidZKai%Z%I`X!jD"LGaklcU)`E0'F58e(8e4FReJ%C(ic-p$KR5 +IQ1q5U)DD@eH'rh)I)C46b%U4aY`%2pAYkX4mrN(8B)EjG3Vc"G4*Fj3k,Re*5Dm +,&,5UA%+$d`6r@G($L93h'#miHG0qUb`YQBH2R&S`R9iVJX84(,cD!,Mm1PH@a[D +0Qrfl-,Lq5Ca"RSPkl-#'-Rq5KAQ$X#SLUM"YiZJjI[ck"5PRiZmQG!FfP%$6mG' +[kaf0Va[%iCiP(X$D(Z(8X(4q-MF9Fc5@T,j33#1*DZE9Tb'V0jF!l3P&jRTq(UQ +'bhq&jh+&P@bPphBZ*rm$qFB5NQB&9)CVQL`qJ)HT"GrT4[R,[SYpJDDaGq$*L8a +hX#!d)5V`)UqE5L)q-"R+e9*NkR(l%a$X"*Q"3A9c9j6a[G4XG"[$`bqD[D-'ImS +A$`im[PhE#5AKC&ip3S2'eBaR$Yk%JeaECfX[J0*&ZbY!NPjZiQL%#Y6`fl*",'N +"&La&'GR1LB'-Gf3)cUN`CJBb`mHdY)aVfH56B3V6JkIr2RR2Tb"m@*LZJ&@#aUm +S4eU(UP0&,"J@&*KA0`2T5QXUX(N5UHEVFjCP@HjGJdib8qp(I&J@*MEUkK4aPGA +&r"iZH3l*qZj(B8XiLMf"ICdHB%[0bV!9%NNhV(HZf*+,X-GbRMeaFQ(r5qXlG`A +!XC('0+H#!F&#&)Y0ZrM++'1Y@kk5Hr+prf,f0)(`#5PHC%!NXEZ%Y%9!m0@TjDJ +DXQDFVESJFUh1lD'K`DVF8pLh!a+lUC5dMQ"R@XkSQHP!VU1%N3GY4"2Icm1N5IK +dT4q'r`#2,'J)JV1Vr3#cA#V5*beRB)q'B1HX'D3H0Fi'3V-G5AG+6G2lX8N'"L( +QA,J22,6aTdcbQ@RM9#"HfX#+DB`2Z(b[,D0M#ZDUIYQ4,-QM,DlCQ%4cLYG&i1j +r')d4'P[ZK6I',ZEET*KUUrU08(qBK0k-6l1mSE--4Cpp(h19fhZQ4qmFeJ#JNjf +"m)H%05@*cKL[p5"2f,+jNU*5j3S(523pJE-2#S&#!fXUmmUDYk2!iQd2h+U-!VV +TkA6-rTdNm5@HFI-"23N'Q58ST%6[N9$EBdXd0Y4jhCa!QG2Zj%cl#MfHJ58E6`% +M!Qm(@p3[)*[*XEKCKE-Jk"U0bBGQE,,j0CDMZ9CJar0-kDPTi5%U)2%,RR8mCFQ +bkbGi3p5'bh$'B"+JTCP1`h@aj+CqA-*qUT!!%RjIBGAMNQq4*hKX8A@ZjEZ5rU[ +bYLKQ&pYY28$#+MdX0i,#lYU@VjlVDTl(N!#XT)KflK3DaBI2Yj!!IZ#MJm+LJ!c +0E5IAXp!N"U1a1k'b2'J[L&1"dBJSRT6(*VIBV2#VR'3"k2mDK,0BSmZ4jkKlliU +9lkrG5J+6$,FQcATL22+mMi@AR5GNX6prV(BdFZBZ$c#XbAVKKG["#UNr9RS!E0[ +f"84q5lhS3PPS%9D[peEr)&8'F@bL$jl5M5`!X@*l[3KB%&fJ9pcJ',6P-006P+H +lL5YbEa%eA0KN%CBR##a3*DYPKM)H3"T3dY["i,c@Zd,("H[Q9G#GpihkB[EF"1q +cMUQeUEqje3Bf-j[(Zf#%$!EV-MUHCZRJpI,N"U%)JYmPq'N*L!NfY%jN6CCG5hi +baRcXik0epM-5#SMN8[RTE4Dh6NfeUq(f54@@E&V,JE`i!L'MK09h[p!LC`e$UQl +#i-3Cm)qK6BBA30iYV0rSc$$FI9(Ad-%,L$R1`Z`Z(6rE55%M0rPRT"$,DFh8DlU +ET5Al%V4&-8lRM,T"PrE3fqfpU"69E$lhdbp6S#M*TUF8KD&N)1Y-b4r*bca3`"B +ND*GY)2&2$-iMmH%r8ecLKBR!5+fmAd$6X1aYUe%`AZCa0[2l'66C6L(20Vf'q&H +9fm*9N!$f&!2@"ee3)Zi"06ZeEK,FG,9+@MGJlPD%Riq,dGpe(GH`82Ui20Z&D&E +'Km)0@",M1Ni*Z1fp5Tkq(*k*2Bq&TIM(I0BHTj8'HpE52$QG+R0I(@r1XhPF100 +9PBTe#ZA@1U6qQX``#@U'Hi0-5!rm&XlQGY$*)G8VV$8X'GrIXL*j#4+)QaXVeDQ +lfjiM&b@+!5@5G90ePaL"CG8J-a4[eMe3%i8C0iF#BZ30`5b,26d,Xl8S(ke+Bjl +KR4)mPk@CYfc$UR2UmVk-,hVq-!I`-SD%+[emI-!!PMN4$*hiDLjSQ1LRIfAf0i4 +%GEEI-C3NMA05'qeA-V!T5!@GR'DLQ(2&M%hDVeieXKeH*!LZ9T8S$$8`KZR`S+P +HcPEZL+*pYDYqkkb*dD9@ASLcklCYS!(6lKD2'"M-HIHM3Epj6H[eMi,Cmi$)X9) +IN!#@($kc@d8*pTZmi6@!81j&4dpG0Y!)bM35d'R1+CU5K(GKNjM,-0`i3e&,#E2 +qDFrhETlAkf08L!288J1DZIeXa$3E0ZeI1FR9+-#iMYJ"aN4FjU(aHR*I)rYFRjU +SS,3!0IXQYh`K4K)UEe3a+`0A-RPM"cZk2@H'F3@L%P*kJL*TAGZCR)`iG0Mb-`) +j)-DNjVGT'JPQ8"FB3+hR0ZJ`Fd#N%VrQH5&(D#M`#(S@'LCrFCa6*"2C[r1BXq4 +bKE3((lLmK8Zm!dG&-i*$Fi-0miCk2$E$qE9aPB41iGL0dF#V865dL'V4h8NSV-b +N-HRj2M5"!d44ZZM&Y1LG*Z"*YHlblLNDi42jL*+X9i[0S2#I4F#[aGeMlG$,F%f +QlT04k+ZeKCE3`93f440Gh6QfT!AA0Z,b6cNTU-aEK5%d!RdJ0'4YmdEE56P`fjL +Y8*NPKL@Qj%%(mJL-KblBkp*M1(k-9QDMYQai1J4p-5)#!@qTEAFe[[ND"m,30-c +crRcDk95'cJB&L#(Y,PUArK#K+eRai0K"djF)l"Q(Q-br154abka$5[prM[c4V&5 +4QC2[)19aP"D%0UUSG6$8FclqKX%[%,bh(rNHLXp'i!U*"SS64%4,SqkiiFB52)L +0MDYDeCR30ZTZIAcV4a%C)(8+A'N*abDZpP4ZcC3(0Vj)!DdKc@@A&$b$C2KSdl2 +eP''Kq5VhA4jD%**669rIRS,2`d@RjhZ!`qme&9,0hIJPd)44mrAUUlV[S#pI[rA +Jp&adJ!VC#,AEYBlP8$p9QU38S4Lqrf9&BP5JC4PAGiRjb4kIL3eraB$*-0b%m6P +$b3p`A,e(("pDS9D)BPX'pfS,XSY6D`6AZ#aVQDaQhU6h21h3ddIR*F#ad1PKTee +'!"Jl!*rTZdm*Q!bRc8&!#jj2pm*Ym6q98"*MiG,fJQD6UY)daL-+Rm@BBe)T%%# +'%AhCk,JT4j2K!$PK0TV,#l3ZT&!#KTI#Lpk2pFm*GKRH0FK[Lr$*D3`e1Mh6IlU +QBQXM*R&F!6@d4V0b!DE`b&L`TcEVp(ZAjFPZ)"P$e!`Y!"RRlHBA'*8K'qjIJ94 +0@Ap*D!r&,c69"0IRfZNVM-h(%mc29C!!#[[le(PL#9BL'e-Br6-(!"(ESI'Md5B +,,D&flM+)`L0bI+bB'ITeTLcN06q$J@0H+m3qRJN0,(*#MTV)AZ"bq&9H$H'lB!b +qX4XG83-IAU8Pei4%)bN([8NF2XU)GZ`G9T%SZqjhpMM4!3HqlqTAdUU)2c5dqk% +6Hdfk&F3Fhb)U58&1NrNV,#c@"X)@Q64P4@!9rBIb!%F83)+I*Pm[)-e)c[Fp1DY +iS'fSE`-iBR%iB#9eV&3AT0Um9,FA8"YE8BkqXML)JK3KJT14B$CN3BYUr`KAb5B +Z+dA2!U2ZbTcCkKc1R'T4Y)FhBUc$6Z%U+pZCq14AQh*ked`I0%AIJJq)UpC&TLi +2RP[KV0cUqF6NYQ0`-XR1Gd#9aKEK'$[(NC,d,CBP,0M"Yjr$D@Ar'E'SYAHVB`Q +Uf0AAaY@$IBZAf"SE*aIMc!c'-`8C"6CC)er*8MT0(3Si-04mLT54h'(22@0fL8M +LraML@Ai18Cc)c,K#4emJ6U,UES8Kal93NJc%DGkT"Ijb5hSr6UN#&KPIBVN8K0i +EbhS-3ifIYeC@4aa0"6K[G4j`Sj6BYHk")&h*2VHSQ3P'r`rG!*9Z5,kM)49KEV3 +EmmJr@FRhaPFM'*S)adl&&$Y!f"HaDIaK$KjU0e5DbH85'(VC+eVr6[I-IFr$eFl +mr8mMm25kf[#pMQirL*I+,(,Yf@SBGB0k[U01&+#bN!"Z3pe)KPPfr4eQk#[ClXc +,lkHbrL-%`h32`3H"TiC*,)%A*lX'0R2c0(2,NKl2LX4h6Nb*i@4ZffrVbR5hK&Q +kTi5ijfp98*1+@XN!3+"hX(KUX,j$V'JYhXL4I)BicV"%V0JIibHf5Y`%&REACj( +3L'lkUhp'TEANjGSZ6XbH$m$am-PG''$mYeL!KZ[jjFIr3K[[ETR-"!$cpDfd&6U +0ZMIe@24Bd1!5Mp0QZ&S4D6GAm+aJ@BQHq%*k@Rm*eVfr5[R+fdXZ9BZIK41*YYR +F)--G6!F'pB((MNS0a5Uk#kl3UKBrhb)leLMpXHq(qNqh2ZUrZd!S-cN"ercirPU +Mik[6f!XYce+map[DGQm``M-$"KG`P95B(Cdjem[Y[#-LB(i$X!(,6pmYi(r8 +RH@a4ri*+,+&+rK8U9NiDr'2RZpp33FTMj)X+,f$Q58K2VSam@9P)h!0HU,jd8m3 +p(aH!0fqNITLGic5NbVd2l5SE$k@`X6jVCBI5*dR8ETL6Y4cGDR(hL!k(U"j[UTT +"+l![,3fUeRYCBdHPaC!!!E2LE9f3!'rjkpJEU+A(J`UB&#kHjh#0%0QHFr`J`-( +1-G)6J&DfP9-kULE"i20Bh#`rC6j`'0K6PcL%Db#Ep%a438JJU4Z0Td)AG'I&e6) +EDFr#%*61P$&p69ijP#0YS(95#FK-#X,$2PU!A6M)d)a&Nh%,DrBHFI2!1VB2P%c +k'Em!d,b6i[4*'q15AU0*X$r#h9A1L&(b5#,jVS,D&E8-m4T6!3r[MUZZcp9C(jd +[@Nj$9&C)5,Rr-9AY2@bHibACIpNl$D(1FbJC&,@2b%6Cl&1AmS*00LQ0S`T1-iE +jk"Sh0C`%r[,#YGh5N9@Aj`aNa4F+h)Gr2($2E"GA*hI1G*3(,I%[$9r9cS`S25) +5GSP6K5r6VK-q9ecFrAZF,m[%)110`VR)llA[64GU!+9)kNjUVQ0bhHBp'N-*&PZ +r`ib+(j6X##54QlR'AjKbS!@dDSqVbT3*-BSrYdm!)6UJD8dp"p+[BmpSmb@QAl` +%H+$GB+$LPV,lmh)Z1#QXQP`U($GRpiR[+`b*CP2hZXf@&R4CjfSQ!dM#A(N[4T+ +,5[3+RIJ4c[Ph"e"bTd,LQ!$J[-Xi@N5j2PJiLZAH69KXilCpM&k9eR(M"UHeV)J +V9V2'apVF(+hM5LR0-IB19[Y,NUHFd-XYR%XE[4[K,0BMlNq%B56,mdQBGEC%p$r +9JD-!e"S8pV$Rph2FS[UhK1qb0J&bf*ULQ,ESdL&JJZ[Qd!36dG[(2VG[Bb!kf6l +DCK'aHPl6MMjqC`J$L*D3!"[UA&DMkXlHL2Bh,@`PJ"dA@&!qM9$hM)1b300Z$!- +5V+1jFCLrfHP%VV(@6%rlmSH+!$,DHHGE4jjbbP$!HKa)&%J'Xji-%DNEp0i[!&5 +$B`m4QqHq![MmX5@drS)'kT5N#lfXUXPhUP1SDbje`+P-BKpJ!&C)p+KF)Z6a0S, +,!Q6E&BV'khXplcQ("2K6D-Ka-#-03JI9U0'@&S`Tpc3U5+1S,AT0+ZFYd"0'e9Z +!+jTX"8l4mAJYMYGPT)d2ABZ4)3MTS*Y+EfT-8,!Zdcfb0Q0`dLKG0Dm&@V1d14@ +FNJQV-(,+AchR5qGrh0"`PA(S,J*9B(Y0cU%KK8E&Gj&@LdIVYl@DUC1p&YT1#`8 +dNj`l9"9lk1LKl(RB,rHe[[QF4L&!!HbLJ6l-i55rSYR5"6SqaQ*,eKq3!'(%E2@ +rK9U8f8r4G'ZN!GICqRqUe,Zk+9"hF2,B5)fY@ApFJ%d!lEde6MpQJECbbdVB4Na +@K)1p5KPM)!"N[4ehbARhZ6jbA&%$1qV1hUAG51c56#pqMcPJk-3P"`+FZ)&'c0e +6UbQILq(r86qFbVBBHBdmFZiMGErrIZ[cLApTVfN))"I5GfjpR(XH@%"+2#AZ[P5 +e4@)Tr$B(GNZ4r!FQdJ9EXVIj5MH4LBaK-@$BqMLPU`h@j[hUDKUC4qRZLD4bZ3$ +ACQ[q#4!H,K2AXal5GMc$FYBmSiCrR*Ee-FbGa8aG0HJ+R`caaKI-ZNLiZiS`*cJ +mj+al(N3G9E4EiaN)$%UNAZh'F!+#-$XPX9f'dB@M&TU@)XX-%1NC43SP3R#jZ8, +cNl1%R)k,%#E4dKZM@iqb1F#&YX`"1M6qcP6"&[0fB6Xb$c0RMbP+(a-k0%5N&R& +3NY+P"`jTjCj'!mD&AB+D+Rr4[jT58)l(6e4U'Xj3eHeV*%f,Dd#mCT@4*Ne5qEf +%YCmMl)T&i%+!mm4"(#b@J&T3@LDIQJSlB1@!G#9BrKX)4jRQ49)ZB5*p%F4&XXT +&5A"TR%ZiMZAf982%fqJS34Y(&YU#c4H#3f'c[rd&Ff"N3XcP2m2%rhQhN4128kV +jZE&"4Nq%EFHb&I,jVpcTpJp$h49,S%`2-d"c@05XP"S4+U3EKPV!9F4er$M5$8+ +[LP+3!+I@8G'B4(fPTAF(XSjYaH[1Gb9piRV`daik[Tqd6Q)CJ(Pj$UbQ+e!5*I" +YaaCSBqjbUdYrqAl#,E4#!)$+Pbri[@)99Yi3DRSbC*N4k6c*D*-$lH[afklFH`S +`2"Npem0`XV926#26K#Ha@Pdq4Q*pi4X*MNfMkl&ID'j3k***5j3FkMQ'r--aq5& +2'!3Dj*4$k3LX+DBMQl,0#6X18K5-(Vdl8Q%0G@LPX4MmkkP0q5XQM(Vc1&AbYeX +adQ2%BQhpEb!HQ&Ml%X"94CXXK6NZUcRjk'0D2IFK)jYp`dCLrC'%eKKV82f0Qb6 +fV6Rr!KXK"P6`jDQ"3LGCC(J%JE5ZL02ciL4[G)1GIT)ZFLMlfQDB((4d31CF$L& +')A#UJD`UZ+"ZjCFD)"ijifcB$9d`)D@+'+Brr3NFbb@60Sf"f$eSi51&k8jhNZ- +XjreMY[6i1C9iD*[jZ,@Ir$DGUSE,pdG4Sh6&rhJ$bcEFGkj'X!3d93qN)Nmpfe# +l8B4%#b8pI6%'E'X9G0!CDj9B"(NA-NP)*iT4Z#R`3E$5E9Bk@K,l56a01Z@(8IV +&Crird!SZ+($q@9QZb[A9IhR"9Sm02I`i$Nha3,0Z9KD"qQJHAf#K16!3(b&R2-9 +Y"hjMH&j9DQp1E@UX+hVb+Iif&8U0$$jVLXm6%G-i$%CcLP)Y0Gj#0Cr`q(XAJff +VhHRVadQN03a[[`UpPIa[fHb[X!%b#e-*bQR8pVek(%Jj@H(B[dXLHM$c#KhNVDI +5XFqcfSYR@3NATKZ[9lX(d2U&eQNb3!U+9jMSG"bm%TJI#&'F5TepH%c@$PV8AKP +3m212D0qBB`B!aVkE$r$kkl68#6-M"4B3GAQQ#9I-2%B5,Zh*mH,Mpf4iV%p6N!$ +H4mi$$GPr+5EYpYTlBCl,$lC++09`lr[4QLdA4HG532NVqd(c%Y2%NJXjH"im61! +`5[8CYdRZ,UN#lSd#MfiA&[p$)[cjjAdXV*c`V6k@JAIcT24ljl%rPFjdi#YLFZK +QHmIGYFc#a8p%B(PUJeh(-UA%LP-QPbmEhr[q!i&5%SV4mAp"eUHl4qFdZIHk'A& +B4,58KLilIBb)A1I*@qb90ib3!'*RjQHlb[HDd3&$+!,`UY!M"8m!bb*QLKT2j&C +NbGXbRb0j4"RHlK(mpmr&q!@l"i361k4bh0+[SC6X&MDFRRJ0JphM9E43Vq0N!(S +3ZfpUER9#[kT8TijB,%b4#eMB#(&`QF!IY$qb@2pJfrp-["CeU&*9"`,+8$dKpfb +%f[B2-Md,!0rMDH$Le2HRe&*j3G9iEQUDV9U46AZ6ImY%Q6kGT"%68-Z1kGem+8' +LmqVP3P(1INarGhJ(J)mkHb*`G$J$de(5F55kLDpcU6PLEk@9#)XK@8!E8C@E%*r +#9+e"(9Q$93%fA-!DkYd85VIV&p2qb6[NGH3G!h'q[R"2TZI4ra,fBji5bNI"6ai +*rSP)IEY[F'*Y39(If)G15PEk,&Z2[F)q!Vc+eb[P2`LXZJqQ#Q!H-bG4d-H55Df +eLM'dcd`Fm!e4YGfVb*F4Mi%m4*!!FKHAK9f@imfT24)GjLUQCM#&A`&X$MHHHTV +2C!PJ$))0M$HR5j`br*B+(M*VYc!Ndlk25TXB9KRVld6D2[j@jL*bD6C%S3bE[eU +6fX0$9N3-UIAYbUQSlZQ#FG4&53r#b'2'Xe18PjP#C,bK,kNXYV91-[mSkNSK%@[ +SU"U0+jfZ(LQYpN,TPXT#X0f8h[GBJKNYU3&1-5qaFBG6L+RjrbVQH%$U-!$lNdj +&herC)JV2Cjrf[I1STlS0B%*YS22@Ic'-QNqKb+KPM)Md#*E5SS@ppiF,DG5)1@j +R"$amX8XC3"H*F+iXGKkK99DZH4PJP"mleNdeZmEf+La6KEcE92p%jQ%X`"BF6j5 +5J02NaI5T#UJ),6E[EjN%!be'PG6"F-%e`LkZ(1X*h,8dCD`)k`DEq@UBND5jV3d +hH8'Jib,J!)XqmJ1l*EqL4c2&9C`0"C!!J49mE,K0XBm'-P`C-)kfAa%q@8+e(86 +FLkM[#NC5cI&VQ28"DBQ8lreGG)QY"M(FfAJa1akQ'M+lCJDlAHP11RHfKF#VGk9 +YZ'Flf5ZbaBbZ$"R6rQ(-1X@5J-RT1Br02(BmF,`GMXV,,$9jE`GpY93j46DBD!E +6@+9mr*Ya#R0V3%16#j*4"HKE,+*1EAP0[G$AcP-YeN"Qkk"B4$)T"PL*[d5dCfr +Q'qqClLS[XC!!9rQPPj!!&,d@rc2%+Gi28!b[E$'paV*4AMT0&pF6L8(5F,S8`bm +9p6DF[fVj4YqiDPH@XSr%LeJ!lUC,ra4cq*I[MZ`CIra9bqp0mbVTJJG,HS'!,42 +&$D0HS9bak'C"cD3kDKAEkc2pUckLLDkJ,U"mRNd)iRY*5VjBbAl9"l"QhR*Jj+a +C"ATk"*iB@E18faf"ZIjNBQGGZPGU!q5@F$Dml$'Ma63Kd1m(C,)D-RAXbh#J4F6 +6SDL[p@eJbe&[Ge)`Z-F)`L"&U$-LAIhID2'#S8aIGI-$9aA0B9%hKGZ3!&Z)c"M +#[9BS*E,US+#EENlJ*a!8L+Q9NPQ[#8fFFl51K`%Zi)ePbK#P$5kcPQ*[BrGAX2, +IQNTVU,S'$(Ak2%ibmM'62G6me4bV4N`2l()'JL*X,ah[SEpT([#pkLS'3IDGD8S +FaDM!bKBR%&H"k0)VpH-)cr"kf2+Se"ENj@ED&'%Aq@BX853TT4Y"6qQR3!GaE%! +`im+8![(k6K(Db--MHZGUi2Z9eKQp4eD8&@cjRmr$e'Cq(U(4q(T4J2%#MUeh84% +3f)Nij1CN5fi4U9-3#fNX*`R$jlA9+k0dJl`kVi1a[bpEU)mr8iT,RHjMVRq&)hF +IZZ3FXlM80r4LSD%Idfq-KJ9!!)AFpDbhSaq2E9$J-*i)EVYC5Q#CIk1pk4AEAeY +SYm)Em0#G,EPK"dV59cfI8$H6(Pf8e'+&bVNRA#h9GRAE-DJBL`h2a01d4ji#j0U +T+,q)Yjap2BUlhSmc(mB%4$3Ui2TP,`BDNbfP2G,Z!VIb*0GEi%Q@qrUpVX6%!Pm +6%3"Hmh%KbY10T4KhAR`@5Gh99cQ0VMaIJiaKYaBjS[2@2)2'3)3$d6maNbdQZ5f +9#MX#prTI5kNcCIiHP0V4(Tdk3F&KrdFS2DmZ`U@cE*30N!!A9F($Cl1dMNB905* +GR&2JbIRp9JY9aCQ'(NH[m0MM'Y32)m18j"-IqMeU'hTAF"L6(JH!6IeU3fi)mVF +9k3kr#ef3!*1cDDd0YkL*Ap%j&3L$bZ-4&DSX'k3DKal")+&8TU-N03j6+PD11k, +3-rGPTQSQ6ZBR*F(*KNJ3jjId&iP%frNZPk2LQRS4I`2SCCq)[SZp4!Ta,BGP5GV +LipE@2r2KRPfRXGU6'jmlCZ"LSN5i0l$8lSr`*E!fYbaEaEb@-S0ir!UHq,2ik2V +Um"HQ%lfH$3MNCaNaRZfHf3K09r2Q,Z3XZ)1)--Zq()UKDVc$9Rj%lb82SIGCR$D +H(PHJRK3kYGfGRN0'LcM4!A94[VP46AJ5!D&lEAj0QUr%f!GF#)5!''L44f8dSXV +`mA%*SQB)mJeRrZ+PrfM&5Q@U'&RdH9d19`Pi+"pBGrc'5DbPk'RUX(SqlP,ba(- +VL,-YeXeTbr4B26L9i91T%T&)QcJ4Y5BMf9K)T,&9Y9VRN!!B&E58GGC+%%hLN9A +,ZEXBcL-Y$Pid'hTYcehQAkkXMNGU,GhN`BGMA%RM1HmZ5Al,"D[Vq--ZdjqGr(r +@RMePSbfRh#kHV%&GEf0@`Ph8#C9Yep%`a4%*RljP*@8@#5ehre8H1JafRF8[[)d +0li*)DS'Z%!mh%VdpMVjPZMLXKbQ8kVP0Ml%U@2+F5)RT"+A'Ph(h`r4bqrmMec! +RU+32J,[kYd1a*Z)Skr,N8C6)hHLp-+1#U8b*B'G-Im8hZ20GP18F--4A'TIZBa1 +*J4If%b(9+fdY'SHE5KX#i$jH)9dDAl%V!mBB%CkMMqYi-QLem[mM`"Rh+hYS'4c +0"D)E$CfR1Ri*,E"lp5E,bK`(9%'A&XYNqhh#eHBR&dKTKp4$1r@9F(P%!3*1+E3 +9FAG-R2ZMNBAr0Y0'qeA%5VX9#Vi!d0P4mGdQT61*#SN3KDSM`CN-Yq6D+!&MI,r +QEkRGQ+,M9'$qMY[`H[)M3Ji5VKB99JXP3)dC"5r'X-Am19V"B)ZjZc9J-K-JR`F +eKlr&,bmj0MkaL9H8LN#9jK"Q"PR"H,ri(3J$'TiGN!"f+9`l,BV2Z&pMrb-Ef@@ +C5kJDSN5lZ@B8,68AlmBaYVl'*(8fXXraFNK*504BlL1a3LK%04DBq%35@cQ8PD[ +!p-%"@@UkYVCY525-dU-5D#V8#AINHj-kTiCfIVT(1rN-LZX2"GGEk!E!aaTK#8L +*bhh[NDlbl+Z[D)afrH'*FTF'#HAked$YRcP5ccUVjMK+HFp,hANE%(S!0XeFLYS +@kerc22cdqZ$,T"habf8#cC9TjKA-V`A`"[XA1)c+!9dT'DRclIB%G1M'HJC!aq" +A!2('DK2hZ9S4(VLSEIYIqci`!Ur,"C&VXaN4YFI&PA%k,B`QEd#`$'J)p!ZkmMH +j)e$jQ0B#TH`68%i[rhJc1mN1)mjap*KC`$NUa1#,9KGXkj4hf#@&()b-PJ-cTrA +`5ZbqGVLkP!)P[N-[[2!cmHNDr8Ve#paEX3UADIZNCi('DCb2)R(E0qF'Kk@phQa +L'PE+'MhNEJ8lDMSU%cE5EA%*`65M%qrerbEZi',3SJ,hLSD,,hF#Vhqr'eZ#eLK +qk0X!hMmN8LbGH!k-bDV-Dr9qKr@aq9d`rfP"`ZDC)"9-0G#*$l8)GXV*V+G)lK4 +f)f4A44+QpG1kH!j4`!'%JrV2raFpPc#D"b8d!1)0Y(hr3jN9i3l%R1!'@e"V!2X +JPp58(ab0AD1Gr8SAG,()HIpriBV6J02JcAZ-fI!J-1cEplXN!Qrk",3bqR`+i$q +"MX$@YZT2jq3Z,#+TY!GpIlp8jpZ(T(5qe%5#QBmNm)ddE#cI!S#kHAS&#Me0N!$ +JQm"kH5L-&CKX"fmX`Kpk8c'FYZJVbJU3!)UD`1!"kD4X",%9q+ekraerTHlP91) +a'%'K-@CASZPAq4kh%e$+#E[p`4eH""$$DG+*l'EX))LZcj(f*E25[dj!jpY&BZ3 +!fS#FfClb82FADaG-LYP$p!#@&)QpPNY+q3F[kI+VKAICVLMR9Pbh-r3%L-TLmRd +5&IZSH,MHj1IYHY,,`BZ[@fRpDK@1LhE,'lBMd8fHp0qZh3$#HKk,8*HFhcD9H%K +lXQ0!2i%q#H+U-6L$!Iq'"0M)3U1T9K"23E3"P#8*d2ijfYrQG-FRXY9H@CYpm[c +h,+(-Y"j!c(2"2j0"J*k)D!cemDIDF42b#I+KMk4[YM[NkT8R"*PJ,01#*J#2FGN +iDdl4$K`S9l8GGkbpb)feR[@L145E`YHrK"k0A3`Z1Gf!KqZSl*,"a2&C$kDGG$` +3j#Q,GDZ1P+a`ai*VdS'R,'1DTUp%JF!b!6MF[LZ#H"PMqhj2&"-')i'HbME1Vrm +1YplEQb$K*&QB!4"0K+(jPF%c(2hJ%*0'q5m9iNZCU03q5S!!!!!!&$MlbSQINei +p4"`)U%9Rb4l8,mMe+2Z3!*c`4EQeqXhGE2-eq@brXJ)MpJYP&0amK0ZT%I!MIjU +&Lifi&i3L$E%mF2QrLQPEYZ4q260#d-IaelpU%"6c3[Ak)X6!E8YQ@T&&D)Ia@ad +dKDX'"kSrj)TB!$#3!'rY#-`2d!e4d&SLBL#+#kFihiGdZN[Ghq*8a[Uj,9R)5bF +!a0d6,e%8D$EZRX)!IHKFbqX@Ur8Uh!4TmRN(J92(3d)[jh[IZ&!HUVC9q1UKXME +B+$H6mc-BPU-#DX)rXBN@e&LPT%'I2h5K32DeM["FJ[j[++[4hIeUaPhiL-K,QX2 +HRaD*!`0Ze%DpGVQ(JDC69Mb&KLI[rEUUrE"R1rBJehdqR`CLaYmFr12KHY5!d11 +iDkmG)J692Cb$SN)5-P$*Nl*p*Y6H3T5G[@jVL2L(Al#M[ZbZFbEL5LU1TCMqA,h +pj6)3@&)kkDF'fL189J$rIf6ZKchVQ`!K6*Z(CAAGPpN0R@JI#BqY1`2k46-G`L* +b!M!",ffNkh-*#pkDfi4qRrE3-0NfZEiTYAfVe5SIb-B+@kir-MrD!mLr#K5qA(j +X*"4K)1f#YSjT6cm8'8pjhVBNM$UeRB2*5,2V4ZVbp3fB#BXPG+dJ4QL5e94"[k' +CL@JZPGIrImr&jR!N03dKL2V0SJ(%2MAaQMjZ,k+dkj6Xb%*A8c4+-HMS-29!YBS +ViFllF`4pm,+8QSLkc,GZ1e33%$K#Re+VHm6-Lk[8q2@!Sd*6jaJ+L`BS9KBI+3Y +(KTmEX9rD8jbM45j[#3U&"im'0Lr!lFMerHke)FK!0D*CNS`QS"KXA@2K%jjrLiX +`km584)FKQ$jKD@U'J-c(1jPj!ie6Pfbk[(IB@#bSeM0mZ8e!YCH&5H8GNCHAU%R +X8,bK`2fGmMjTX&QlJdFlDSdMZERQd!HG%RQ[XLe[iRKq[dK!*d3)SqdSR2%3aES +Z$ZH(ji!mZhELG(m+CD,,A[VJRLE'a1'(elGk0bhrCa-#pd-CpL9TeZK#frZ-`%X +9-YL&GB@+mV)a6C,T,m,GrPlbZ8Hjp51eSKD&3N'DSjCCaXZ0L2*D93NHc"FNL*b +RGN)4XYjQY6IMGVAGm3ldT[fheR@%bH*-mGZA2%,DBQPl`8U0C'"1i8Njf3YJ5cR +FK-5Q'N6k&B%2M3P!4GX('[5R-PPh*L1ip)'-MVkScUpipT%GhRp"25Rq)cP2&i4 +DCKE(Pmd'&+ZkZi"9F"CAp"#qB1*j4P2R(r5J(&KI!e#e'rM2l-6!+"#)SUTG$,R +M)"Gkd-1jZ3-Er0Q)&d$(Br(q+3BKT%,UNFVh86m)NXFHm,lbG`'A44Jj+Y2FG`X +&i*ckE6!HASeR2YDN`kp91crqeMZl,363hX+TZL",*rQLYXHklEpCe-8iQ#PH35G +L3MGB6J2QY`HKZaihR3EBVAA&LeAKaFh,Hf&jq@I-36BXBd!jKXS6&mQ%Uljb$!N +*S3MEXBH09$83(LM-KM$J9GKb6(F58#4FFd0MNaRi&NTKqGTHYpNXMMR#CFZIFdA +P-+ZQl1JU*V2`8I&XTeaQe(2q-QBjNhCHp#rr&BV3q-EE&03-R"ESr``QerP3@*r +9'`a2ESRS%-$mL'#CP)Zk5S+QQS#,@"*jF#2`LaAGNrKeR8U,h8I3l%Ac%m%Ep'9 +3a29jQh+J)h4E*KCDLCf5,&24fi5IAb52FS,c*98!a*F0G+aPRf06#!rf,ab"hBJ +G'&j%HHAM1b)Z-%&MP5q(9q(+X46V3P1q2N8BFVEQr*-Jb(NihIKYrL9mXkEB4ka +LY-kBp9#@-&"3#6P*Yk*'p-FL+#SQp0%18A"PB)-[`ME64#4I)&SFb(,AhdBPlNb +)ZN`6Ph$frc2Ec-[dU2L@@T8L2d(A2jHqA0fLCb)LSNXVGL@(MlcGqL'F0*!!'#3 +"mEUCj,dmT9e+VZT$R'rLL+&TX%('$Fiik-DeIjHB2,KJ5[J2f)&`jY)*M[CM@V3 +TRqkN0pIm["UDp"*@hl-@+IBpAcP'4`[9dE0d@Xa-e)h$'c-9BDB&5YPj[I$%BUK +*Ld,&q[[*J`#K#`-3A$(,8+rXH!4`0UXh(f[Vif#S[R&+a&m0QPQaZkCSlHICUC& +UB#BYI4h*NZ(&[#M-UU,E@jNqCp4d""ZcKPi&&$f6L$&6PDVh1rdIbUq5CjRT"q( +R*bhUrLTA[pr3!(rU-4F#,#q2fSH+Z(@PCS(YCPr13RF8F,-JM,a%+'[@Mmr$eeT +q(VE4q(Uk!1,U[YcQ!5hFd&Q!8&KJJHNpr8PTpAHIqRUGV*QB&$j948[Nj)G[$*) +rD#Qjh4B1$HdP#"`kV-Y5#4rU&UkXK!d%id%#D-`CIhZdN[MC[!JrR$$clVTb9V( +%9rdFjC&kmFHRLpA#YNN[X-pf6Raj,jCK`)HV"l3d1B!&m4KR@(d8GP,VhP4`@62 +a,"Lm(f230S$b34LfqSL%D9kj4ecQJf+-+"EK"(dK4L3pJ@F(bVK@5S`5'l$%FJ3 +UDd6drQ-mk4QHHG*KLa*cGpH(&lpZ@0B($cr6R9KEY*fj0f*2G4a'RH"CJPUDECL +p&qZC-"id6f!G+D"#'hPX1T&RAAUU8lIGX[jQlc-R8dV-!l0Y)8LSki"V8dk1,2e +Kj'jJk&()!L6hl'(1NF(("B9Q81(QLU#0BA#Nqp!IBp2+FXQB[V2Tif##j2hK#b! +,bFQ`8%IQeLD"'Q-,m&i`D4E(r$mJ@qm5-k!1Z#lUB$5hNZ1HkQ$`pCT'b!Dc`B" +Xd!4S#F5Hp!NEj36AdEl50B"U$$BG8GUN`brDGJAQ(GG6N!#jHk,leMNp)##(BUb +$6JaQ3L,3FJl%()XA)PCM%D,@ZYiIThAQ,kJ@l8PMr5SN[l#MkVq$NTmP3aTFHj3 +LSRF[2Q&VkcQeC2IZAdAL!2X#$Z3amr1@*d!ajURba[5-!2&CLK`D,6N54Na%XTP +1TkA8c*Khk`bX5D(pENPd--B!j!D(XlX)PLU3!!*$k+emkYJhmh)PLIN`I)B+3[` +BULdcam2*Ef)bHjRp"SP-NcX1a55Hq(`YB9iUPAJCXY#1Q1f(a!*rGISliCfMD1' +pU1)kc1%rS5!PDXH#5Sb`1k@[4(XpM@0G-eZG+hDGkYZcYHYCF0jfmCQjI*VC"lf +)2G946Rh)PX-"U-NPc`8-4K#5$8I2f6'4KK2iJ1"ff8ajj&*d#eh#VZ@PBD,NV#` +C1!*e*ci'%KGJ$"H!V$HS8rkG%fU"d"iNrHVHZ8PHe3NThV(r!2T4N60RAe,ZhrK +CSr0-%mQh5c+FGYRZpi1P46Zp'#fFdPj9!`X18Tjd#EmZqqQ)PR*aSXhEM-F#HpR +6%DcZT%Db#I,cZDd-mKAIJY-#QPJQ(p'`0HGQ#bQJkXVd6IRBB9!JXke25iI4!ZU +&1)UL1YiMZl`GSdhe!STeIGkiqd2#&`Q*Efi3L"Qq@(63&Xb9`[Y46UM+%b0HJKK +VM6L%8Id0FYCr"e+qi0+j*qZ5-QejAiDJ6+heE0+pPq$cRB&TS,"hd53!""X$lbC +TiA3a"AKe8@IGI(LbrCYp"fEe+1b1*arLpSa8FlmP9KS()`e3@0ZPY--&-DrX-L5 +L(18F4!FT1r$Nq*8"NApMM,D#13L*YA(53fNTGiqUX3--H'%kURV#$X'Vk"QhE@* +62F%IMN*VRrbJAP8M6)LJpMrj0H6Y#B4c4ZpFf!VjQ'CX,c!D*j,hjD8,3(R3631 +3!&f0#Q'b"N(mRrB$@Mm&#I9%GB`p39#Xlr5+XdmTKM`@+DKh6JiE$+&HBj!!$f* +FfHXRpPGmieq,L+X$QD%I[dlA'AdM!)kRrbY,cT%r+9YmX'ZS-cmk3+*P"2F1A"H +VcE,MKjqDr,5TRNVbS!-TH0R%I)C3CXG0%Q-30afJ#q1T8$rC`+6RP+"r1HU5+GM +3lI1kUDZMaMQ9[`-CQC[#Qlb%$NT'V1r,J$iqp1hNq5'J*ArqAm`#ZNSL3DR5"e8 +a'4GliP')QVrm$VKA%MKVh2ZUETC@bPDYkL(a1d"meNL"fkGLiKl`38[3XhT4!Cj +jd8TZR4h[$pFYSGGa2mZ-&l"Eb"JKlL)k@G1SXNf%IfhL`IiYBFpe0*!!1k-'6rP +qSC`1)&HjiAlcYMj@iFdRBfdRkl)E5))hk'XFA69l42jIkH"+@S!A8T!!eUF$lkC +NKGbpFVbZ"YB,i`[LAF"$l$N"D5I)8cH6$B!2VJ[3Z"ZfQ)*3KX`FLh*b6PJ3262 +!aKd3QG,-%D#RhJp$KS@2(5G1IqhU)d)&HEc&VEUFF5$%&!3Mq5I&ARaDp`)*UjI +ZG1[rIrUiUT`5L83TU0f1Z"*a3aJMS%50b1bf3pcGA2pGV5F9ijhTK2cf#2i4-aT +e[UET%5GE)K5QlS0*AiQZ*$P,'(epQ4`p4Db`JEbC!09EAYLC##KH"61&Xfr20)' +J-Gr"*'AlU5SaZ"(MRBIp2F%jMp,XELKr+I(B5AAE`5RY)%E@*amAI0*BbCG+-TS +`f1%mS1`(-Gh%9f+C2e!c@-L3!&QX,pQXa852N4"YZ`i"Y4`ERUlEqQ1kafMX0"% +m2DIFaRJ!CbeC0h+l!EbKG@)d3RHAHj*eG4ZaF+*98J)4Md-#,5`0U@6QYYcI(5% +hCC6X35kU[lmhUm[MEU,qlk2[@FrBPAY8r4lM9cHiQq8PJH-XFA&4%RKLac9Ibf, +4N!"[bbj##("-R5C)%p4hrhVJ+Dr+qb)Qqabh+DI,ScUd6%*L90rqKK#&9Zd)6Q3 +J0#J(ZjVST8d*GY8ic")DJl58h`ZPCV5ahK"$T9YXBM`K**C)Z&22&U[b1j+hbRP +9dQZ![dKI4G-U*Qh4MPpVA6((p`#rqZJ5G8l'EEQLQLF0ZNi4QLmH"3)@U&Z&00p +DY'V-&4J$*YMb5LTr#%X90B#m9%#1h5MbVeD3!-+E2-U5&l,'P5pd09)bX)'rh1M +R'6,'9P$!2ACCrdY(3M&aaRDJi$cYS,SV%1F*Rc52601GDH2LU5-HqIcHl$m$mKU +"peIQZ)FVLfFhreK%d#LMUKmqZU$AhF$Df2RbXiR"c$$CKqVlaF2RqIITi5!Ai[G +EZ+P&2I&#p0)k`292Adf`",r,qaUM@M61#+@`dNE[L-+ATY!A'CG&JV!reA0c4l, +#6R`U*$rR!UU0hGDkNqL5F508H"mj2*X@@$*I6%ca)*4#&UY2$%JICaSF"#@6I9K +#icbPi2Jrr5CaMYQBj`H+@0DkV4+m3'[J-GBA)h1R@"[#LQJD!8Dp[%pUa"BY,AD +MK5P06e8c*2lRRj+e21dc@P#N0mGHE[Br@-ClBZaQ2,Sm,q'V8jJK'8SL1jpF%jb +DVcjkH8IE5&F0`T8E,85ajcjZ!8T`1!0I2aThqlYAV$bp8Ii9MljeMQ91XQpcRJ4 +`p!8amJ@a68Z#Mc!jh$4r!D2(2XQklaa8b41SHIJ3L1Ze)h1N!R!bbRPellS5Xr% +GhGrH3$,b$6323lba'i*%HNbYB&3'8qkV$hr8HKaBAV,ZbCp#$aKB-F,bqD"FeAl +$)DABUTS)J$*Q`F!p#k5TEK!!!!D4CfJl2p%2c3EJTai&ZVK'kpb0fJhQj5ZES1) +-@)%M)#"P*LLd%#%m[kR-[PVG!+fIUfX)Lca,#F+j'DM,2Qjk,Imq[S*8GU)hUHc +2c9+qiANiX8lVVHeQ08(,fCqXPk3"QFa#JFQ%kM4@VJ2mHie[J@DUb<NFqH%Eh +2T2H!&AGQLj1+qM,3'1#R4BZHCaBUqQ-p%%-002aCS(%j1TX,L+r%$!%1RF*D@DP +laT%8`[-)Ti4CZk'rJe"d"QTFhMHR%L[HNH0'J6D@"jH,AlDSY#3V*Q,8lPHJ%Vp +j!Ll(&'NepSr%1RmD)0Y09YF5Y%lprTj@SFkS`8HC-HEPFKe%,fh4!R#-@T3"AB0 +P$00A#Zk90C%rdZ+5M*&3'JEFC$#Va2J@mliE$JfLRmJ[XRp%rfHi1li$c)meAb3 +#+XBGCiL"X5,1NP3h8UCk4'P3Q"b+!p-ZRShi9Xj0NQULE9fb`MpQ!ESme9*EKeU +1Vp*NVm2T'+1RVKNIhNVSeGIX6ILH56MV2!%D*'6N`-p1EbPGb3MLJ"[mpC+EH(B +[[IP$i&XE%9mardi'j+'kV3J2-&'AYi%NPG,l9C6d3RZRAK5DTbHeHC1bP6F5md` +bj@KIqG0%d'@!J2ISrKMjjBmq[LA&-[D51Y9*J%"TCDV)9%k&b+Mr!hl"2Rr2aIJ +0kqD%kV+B2R36PTkmT,*+UAeZe-''F8M9+,a(C%+4UUS9jbLm@9(BriCr5L1!CM) +D1XF)(T!!1rC*h-jckmYNB9$c,dr+,+#Z13pe#4jV[TF#kj[%!Mb"kPpBG4H+&Ga +-1F$rE9A)J!2T*3S"!5JA$mK88c%qM1q2mY&8F"VTTh+)S'HTe3AZ,XBmPldqlZJ +Dr`G1GR9pYeF[#4J6%&j2)$#RA'3PSX&CIAlh,9*'Y62r9A2D3m#j6+1GAU8JIZV +KA+V)&erp,klXkcNAHFcbfD8r1,c!aLASJp#"85d*fr0bUmScmAbZ-SX2jkVFr[0 +rLClq0)MT'DkZXcEP,EI2DE`&TC)'EIiQl!4b@GfL[p`2HhSJ`!qITd-ERk61q*! +!-!h)QQ)bA-$Q*DL$QK3GN!$rC6R2dlcfA*`XMl(3q&ZXq`!V@IfD%b0BmHR`pdq +83)"L3DL3!-Jh,)$FS5NJh4XKVMfXP2(+fTP%%am8&QLb'Xe[MR!cUM*GZY@@j8f +2K0Sa)-0%#&I615TmchS`!-GTa"a&92Y`LE@!8d6era&cN!!NRCX(()rp(cQR'Qp +"TSlCHH)1NTJ@ZECDC1qi8IH-hH[-(ee4HNp,,BPPf!$q6K(qe0BKU[$m,'K)Qi9 +lKkBbYCe!`dS4*fclrcB(&dk(,kYkaF66F-bjc,Dl)R,3J*!!EY42R#mEbmDYSrY +@H3NZ*(4*UTr#[,h05caNXd3Ff2!GN!#c![TFji$eJiD`R"!!0!jqq!P5bCeK02C +q)eXp2!'ZKedc-e$SPf,YA'bVS#hLj[6bJ%NI-`I`b$cN`Zr6S*C'I,LHM,hK!Q, +XYeF2@cdC2QD*kVHeA3Qp!M8JKbNXGZmGRVEVIp"MCbQc+TC!-$mG&'D[mJCBd%2 +hJmXT(PTYQ)L'4c+"J9lI,#H8m!!IBCN`Y`bAVEqBe6aB1%d,BZqT5a0*(6@bm!k +J)HCTBlY%2@2Yd6I!9+ar1r#b@"[pDL+dNQSLV4l&cIJ68,aCX)RcLP6*&d`&+aK +#c0C"I"iTCar4DDKhHE0AAX3JhQp!@Zh[6qNpTPkB@8fpNbZYmH0mV@QZ)-SZMBZ +qfA[DU*U2Lj2i`KGp$3(jZr3!@C!!9j3pX)E4-(FVd+F`"6V+!XA)F1[46M@B*Gp +&[Mmi8Jk4D-*&!+H[13IiH6P"31kQR&$D1V9@iG,2'T!!X1EkTq5X6fpK"2YaT&, +5A5*V5$'9$@&S@EUAP25`(UK00$,RYQ,P#@k[HLQk3pGF`Sd)b[$2N!$`Ae8jKlh +a3JGIE#&F''-8JjVib--X)L@,J42C@G99p[$[F-'XDST"p-5VYm1'YTHQp0c-GM$ +cf34d&'[eJrTB3%kX,&B+X,YmE+f4H-lIbBZL5NR'DDIX!JMMiB+9T8rh0i,f[PJ +CHAX8Ajj*C#pla%jZ4p1ElUZYT`Qm%#jT@V'mi3'CP"`hD2TePGKG6a)-@HAM98# +qAhjCQMJ@Z2JU6Ke2fhI8%!@&-$BBZ)8+@+&M2RNHpBIEA6j$mUe'Uj)SG5p-cKk +D@`$MC#mLDUrXBqI5HQqMKK1dDADfqi`8are*,3-)"hqF0!,aSBBjbUEc'9A%lr0 +pr-ipTlUEV8@0h8IE)Q`1q#l('DYN*ql@[T!!PF%*($kGED"TXB,K3C4SSKFk)lL +KTZp4rafX'LaC81P8mqRZ6@`R6Nc#*+`J5m#`K[PQrIY212R"90#ThM'qj'd#jmC +pb1`eD,6@6KIlkZQa%A[TRkbMRPcK#YHrieEaC-Lie+PX6Ej6-'pPj[pcEDQ2l-0 +m+l,0QiESa2GL(8qQkZc3lMff5(lH@@NXD,CkkYJjrh*AbQ'L-#A'+*[+55lBH!M +2EF0C5BHIY[i%qArIRd(cm1K#2`frij+jrPbAX1c5b!P)9pc%j%2"BlU+fFTahY* +(Yc-SXjHe96PqMkYK"&pdI3e9$P4R0mVRZiD@dE$1mV8@Z+,jH52#GPX!jaJj*Vr +G@DJX$3-642-ES8j'jSiJb5`D6Ik'@mbfN!!Q"dXjb)$%SabZ#fLImL3q1$dJPM6 +f"`%IY'ZRh,4ieG+G[%0*XD[!&6XP(!-jcUlqk(DaY'@bEk!RSrebPJTI13bLdaG +#pNV!E+aD6rYSN8JE#d[dj%E6*#ar'5q+$8"ZEEJCJUV`[iKmSiM*fqP'84,6**` +!ZdI@"!F@,h2TK0kUCa!4)9CP*+jUT"F"Ul`YVc)+-A'!cIX5i(j!pjqQ18fXTJQ +UZqaeAmY"[U%K8Ll8M1p21Adm3@rMRKk%B!UJi[8ahmGZJiE)04aCiL4lea@AiG3 +AeaYlHBcI$mrqLV+cAGQQUcmCc4GGXP9piq6C8biT00(NlS&0D8Ak1K%Fd-l@3m* +C5B5K"8DV-ipVa+#VAPZ@jd'5GhPQhJF!ab6!AJbGQeJhlfRaI@daa0DUf9Qr!j) +f0PE(N!#M"MG"P$3BlVD8%4QddC&Qkjkb!8NQm)0e6K*ZaK9JH*d"6MLfc1Z-Bje +GhT1,@BJST92%(i)DlZ#([e[8h'VR&pcUQp%"S$3J@M)X*6B"r"lRlRi#DdLUiS$ +8`!A&3AU#"emfe1iXC3%%1%X"!Ii6eXKcjiqYSe0'*-pFhaEdN6Rf5mU!QH-Trdh +X#@p#D!2G9GPb3ReiIAC%rhPX$KN(`%qdeJH44*VAlE$#R`m4S@NCSCpG3'Ga!I% +X@,IP(p&4JXRS04)qRFS,@5*0B0S[%C2G'#4rS&9J"%)TX#3lK6*@MZUQabFTc-U +N9422CqdJX10@BNC8EJA2!$bc4@ZbCIV!$q8E*mKhAd&rrV2C'ImQj"*N!-5PrbI +)p'b$8YC(DIXEkJEbN!$ALUP!H)'R%)SV%Ce63QT!RZrc&5*iN!!iTSi9""ZRk`0 +`dXi#meEH3!%Tj[L'i"ddQUF6!C0PLlDNC&Q0Mf)RbG2CjB(QJ*@`HDq&YL(mc`F +HpkiYl(8JJmX2XqmB!%qASI1fR%qrYRKjKZ[RFPG[(aF+CFUF8E@9)IEl(d[89'I +NUGaL--V%-rX8KiM`'cK"`eeF'XMGYfUABVQBM4dQScp9-bTrc@GB3h!dhlc2B#0 +9EJbdi`QF!$SlQZlqP2pXh!YHA,PlA-[bV[(9DIc)UI@4`b+l!"BcVLB@#L"@j9p +5fmF5hr),VJ3*9+e4j#0BM@F1`h+Vd2PFUqCDA%[++d'@-$6H,T8VH3lSZP10lAZ +JGZ-3`S"#C[%GpU!aGe$L8-bbKQ3@`R*$iVVGdPBamm[II%3GZMPQ&2L`V`+c2%+ +LJ8GaZlF(,KYV%K@2Iq(BhLYTU,meK"HaCiq6cY"'(!C`VUq*VV4F-cdR46*,LNF +JN[NfjEe2cU5mmq2[I$MhMdR'H(55H%DDlK6SGh3Dh$iGZE&-A[V*UcShe59pfl) +ISLXb%hRU&%8EkG+Ff$pS%4BaBMYkV(2hDb5E!&h8Mkp6K($P@H5(i*qV""ijBJX +aISr4FE*bbVkP6@QF[*l#(5cPE+RP*&,(6Ebedb%((P!G8#-d%-U&TMfK5,*m-p4 +dTSThAjc&+-3lq9XhUZ8&AVm*D(q*U)ccr(fZC9i$ZmjNPZc,)8HQZqF%l&D1FN' +`K9M66r+e4hAp5dR5Bk3I5+,jkN%`UZMk-UHkU4QkZUE@%0V5)m&fdD15JYJI(f! +e,q+VLZj5$red6Qi`cj5rf6Z8#UqrU1`jaA)C%[9jD(*e(!6a$d`R5XGGd)a%Mc2 +3"VP@[dEHj`S5N!#HARQ,LC'BpAECQrc#NeZqV33J20,G"'G+KY-'3EhJ!R$FlDh +95m1Tl&BCS-5b1($hpX2BEGd`frG@AYQAkfCmrPH,JlD`VVU%H9d9*&d8GKG)`XN +*i+GYdHcJ40,3[*Sj9rZNZ38Mp%FX!A1%McPr1LALQeGXCGjH[fd&$q2fpJ(lHdr +p[HEqhUQaqhVRrEh5IYlDIfp6q(lHYlp[FKqhVZrEde#ZbcY[a(pR-iei+G8"USN +#kq4j)N)DiB4qjC96hD[RBlj$Id4%GQDK[-3mV)fiYJ6iC!`YD3a@[%AK1VL-%9Y +hf6HApFJp'Hr4UNr!EhJPhJ@SFjE%HJH3!($PG3[Z8lDKbF#Q%#YXE!p9A"jLb5J +f-['SeVQcaSS(9q+m,q3BI)rLqY39#pB2H23[Lh08jp3kC84"J`NJjA03CL)0+Z8 +ZLSm9#DMAJJ6j"cB&a9C6kr1$IVLp+IJ,EqR-Ymj$Fq[-[$6jfKq*AT0G,V%XKh` +'@4#3!)80+*p)#X83X5Mpj%f5X23ipS9bAG-'TI#!+`VDKkaMAK)-)bpT0ZjQa0K +9+4@3!#KkbQL*&2"3-E&d[641qF+AMK4-2ca'UK`XcGPqc0dbSdhPQ)BD@cHQ8'8 +kd%&%f0FR@M,5K1BaPm[!b[0N0D+'PG"ASNl,6iJU+!``U8MN3RdfrVLa9LeXYlh +E*h(#ITjeQh%PG*@0KPL41B13!(CR[RSM8A2@"R6mZj@R8PLrJ,L"'kf*ibZp)#a +01#*JDmi$$J5j)-HfD1FD-MNcq#ST$eG&h**cLjeFHBqA1,m$RhTX(0lNd4J"Urp +kLZbEVH9Fa1+IXjk[UJ8-X4@MY%A"L$qq2XeV(q*Y)"0Bf4$5Z`mJFl)$@LirD)I +,@c)KmDPPrPdG3kXp%m8Lqd@,`rj`I&@B$c5b`TP!KIEr8QIlr$9(Nci*a30(H&! +")M3&RP8SGmmV3[Z`-h'h$["d)k[EJLAN4XH$D&adLqYKAR8K8h2qU0mM[%hQI*K +Fa!Z0!LPhDL)lH8$F6hl,K*!!kC8S6V+IjY9Y!PM8TKb!Lf$HkR3"de[Q49j@H(D +ZqHlhJZ&L`Bf)[!X6X[0aA@)9#MTL,$0HU6JZYdIeNRVIqVd[C)[HM#5-j(YT#a& +BcLerJDN68&lG&@'5r(*dLN"Q#(k%RDrh'("c+F0pDAqXK381H`+N*LF@'4"Sdq* +'+qXG$[f%CFXG[,BP'!pDE$hFi+JF$TrEMq5arX2V[22a&cE4f2(PpZ!*J,K%#JG +%%)LccP`hA#4R5+V-J`V5ha!`@$5f-0[Ji&Y%JHhP@$HZLVqdfD%VjR80%TS!*9i +eCM-l[aqLbPj*)5ji)c9PG)TSTH*&dId*rhSN0q`QRqlTPC!!)R`lh%3#h#qa&), +&&F6EkRNQ(-Z#&k[I`TX@bXjj2BN`Jc6Jb`6hdkf8*-rA+'88NZaDTSe-'E%(l)b +,,+Rca`GBP,I)c@M8mPj2p!ZpfGM[2ck+0q+RbpM"YVR5GlSm2-VfN!#8I!bUpDX +i9C&NLfRU92@#'I5),&4V9,*5E(TH+GEB[,"%BX`e,SVeNY&YC`Xekm!!4JMhr5f +HCP$#+G*T[(5Z2"h#%mJ1aH@,P5'eZ4im+qDC8S"LHA#Ba,a69Ek!31$f4NK[h8! +aPK#U'GLAc)Lb"FDSh6k0L!RN00"FYQBaJUT2Nm"KiN!`Gj*&D'Gh0d(3+hMR2ik +!6cd"IU$SJ('(B@pSRmj#Rqj)-KQ@ET[1)Y@d8DJe$9&'Hef3!1@Y1ccf+(K&62) +lkF*ZmS#q%pGlljdJ(SIc3ijUp!%+-NjYY"@J&(%0eT+`,ekVbTm'PCRP,SJ&m,T +)TAN5NX1"D,38pV4p&&4[C509BTB1Nk"c'm&-FeM29&i`H50,pDElrbXG"YGY1d[ +fa!pZJpdcIDK)pmQ`,-[0@1E(Z9H)Y'5dYRT%Ar(`STS2NU,[Y)C-04%)#Xk4imA +r!KV!h"[2%M'qiKDYk(5IE)jS2,'"*,h5HEQ%9Zk'aNk3!*KVSQ&cN!"4plVQl$m +UHaiNZU6d*rD`+eVC5`Dcdk0d6mqAS3JQS591e9DGdT'f3Djbd5A'5reS-r"+@XA +Y5,-eR9B)rc5*dT!!rhidBSILTDZBJ8$cqX'&l@bF5F2Mf(M@3bH1dmU4FS+i0-e +A@[S3Z*4rpD[E$C&'CHSNEL'BMh9%NfdIel-&K1Gal88R(-bY[5GRX*GM#e&`V,b +hNGj0YTdBfXrfNTd26-KbS*0qYSYBXLqGZ-GmTq9NKZ%EhB10YlrRikKJmc*A*J# +6ji%(m9j3cc+8+'a2%&bUpiGU&03$Q2AqdBfHXM'EcBX$VjSD2PfiFG$E(h,eI+Y +1"$5e0bak)%'PS#Fr+DSq(!ZUM$T!ZZlHBPm4D+rS2Ic-E3-A9TR3R33KEZ4edmK +GfkG8AR3&q+V##%8SHM(,CjqXL"5#-ZJe,9(Lhb6FGe0MB'Z0(%Ve3XDpq(810S8 +b5"M%YikD9Pm5Y5eS59b2Sa9B,jc1FlahJP#EYS*pa0b$'bm'pA-df'Hb(8T@S"c +f3fTNGidL!aD&RSCk(T9fFYI&"`4EZY1k`#AG"UeI5H65$5D+8VimP9q4)6c'R(5 +dSl&8KED`Km%aTI)CfS"qAA+!N34aMDE@MEN-qd(*B"J,DJ&PQkfchhar8ppM&-C +AC&Nj9$-IeQFHBelcN!"DSVJ5b5-AQ*pUDFjeaG6lAhj(-LVd*,N9kFNNUGKC-IR +IkkF*-fkZ&l)+[MVH!6CehKSMe`pi,h(3q`m+dpS8`3!%YK[mfXXcB'QeJ8[cP*% +)P)D54(V**#*9iH%c&,IXfD!3)*&8$l86R)VaL@aaYpYS'*bq`Vd8edr-H@KE##0 +Im[B@)d)A++D-kaALS283T(4bS)+S8ASr!A@Grc[6"33$J,LpjkeL!+BNp-"&D98 +Imj*ijk9CEX9r`@Z!ck+q)0MRMKkJC&%`MF'XHC!!TBGeND)YV2[%85Pj)Eqhrdc +`M1Z@)B!qKaJ3Yq&dEP@9&`-2LMia5CQ#5LS,R5CpI%K6+CPU0pC"(U(`pSpR@SS +Aa&!-G`EU)rDXjmcla%CNN!!['9Y'rC4-XXrhk([fMIZMGCi5mb`C86k0HV*frcV +(dLJXH3KCThI+[A+9iR6-fjk)(qC6RlqKp[fUDY#5d[p4@EEREV4YfZEM-jYqYHk +Nl9IfpX8B`3)Ka$Y+N!#!-SPE2S+CR*5Z,4DBllr`j0I%R&4aa([eE@#[q2#D2"r +*mSQ'eR5H96k"Y3Cj*YIDAHfFI4'k*E!20'#`QPF3"hqkD[Y"3r`heeUpBpI[mXA +'J0D3!!3X#pQmYhLUSq*9,*qmf0J"9fI5$)k'e3AQm3[fqIA*iC&VY*C5D[SN9[m +YYTe#Yr#pfb"4m`R#$CI'L@YXQI*cR82N[I@6fhSPlpMm*-c[SiU)LdVF+1N0`BC +DPPqAmdir6lc,A2'*rc&3`Pk6%N3[rd5L!B#p['B9GkJlYk,J$"R!4M[cVeipf6d +9(Vb4A`68dpD'"U3`cj*'QY#%qSUYTNCfGV!m1"b00[Q%J,[[jEK6B6ZiSEJ2#cT +(eYjA&-(X(+"AX3&#YNeZ+39XbKR@6[dA6j!!6L*-(F[aP46m!T3BTLEZ#6GV,(r +,5AiEmFE*-5`8eiQpqhAN&ZjQFIB0pTMVU9*6YNQ)pNkGLM(P2@%-D@K2qPkrdZ& +LLkMp!6bVCXN-b#Mc#ZBPkXR@jJ8+d5qk-H@8eTe#kh5ESSD[AFa@N6em$2P`-N) +G'PLP+#$TJi`PD+l2h`L@$[$CBHL3!!b&`395q[q(M2PFfTQ`[%0M([&'d1#@j)k +@)#d[Kk[jJi#$r4Mr4Tr0!0cRL5DcD+qP4NHe@SiCa6+[-"qmSJq[reRJ+K$d`QG +FEUIe2!c+Nf'8(V"AF!3D!a+3!+E2r')ZhZJ$4D#&6k(jrB`P)Kfa68ZDi&b4fEi +L,U[Z!IA"3De*jY$db$G-YPAiVrJ,abbrqmPB'6fYHUmTc%-Gpjl+`!hJL$8e"9# +q-"GSHBlQ8r5DSmNlH`kpTJ+Y6$3HFBSm6HL-Ue"3cYY,&U8AGm54+NhGK6VIIRI +T0R8'ID,HdUKPP5jm'CM3'ApbGPTi49CP"L0Sr306*(rCc#m5MRT#Vla[K"13!09 +FPCJ6FqaI&5@V&h2K$EA5[Se$,DdUJV(LM!4%pfQrUpIBUq4Z,f"-@piUXiHpA@% +LT(H(RPGlla9-2k&Tm!%'XSLBkD@(3*TC3fJlkM6!RF1)hlGlpNBHf+ijTB-&d9+ +"T1'S!N),&R+,Cp!S[HY&kT)NiE'jR+*'9leZ3HR'$a,ki3,Yp83-G-dfpXj&0aA +TfPC'K*aAa&Tdj+[lM,eF$[NA)RZZX-&)YP1mE6DFh-RFf&FNBKp"!LKL!3Br`@c +[j$',YBa"!GNfjGpYCpEp8iDYPdd3T"aDcYCB'YMLZp%S-3%D!Jmh%3I"3jQXqDZ +%h,BMdAmYri8A6ilKRZL9(2eZ$&T@heDV-0fJ+38[L![Z5ABE[J0*BZHZ8`V'I"U +APfPi`!NE%qRDZGpJGQ3eV0faj$RG3a[ZITSP3XbKFdpJ`,(',r#mq*MNCGK88(j +8Q#i,9JD!VaJ%EqrP%K[pZJ6m&cdp'FHc%YD*h&kmC+&mN!$36hr-eib-mL$043I +DTfmIV[&Fa1!ai4G(',Ba`,F+mZ2`HV#MS@3rNf+"EFJ'%K,rHBNlSSU[mNCR03d +`BEXPKH$K0fmBqqc95r!DFbeHR'hpU)iMmJE@#kpFmJ[DbIZ`aLJ!#j!!JLfd"1e +VqXZh)He#TklD-5`%5SCYQGb)ZIV#mZ3`#V$UX2V$F[bbE8d%ZaT4E8`TC"C[%Qa +JSh16A4b1,1HKca'SV`cNMh5mmJ#RaJlCMApX"llV#@qJCmrZ1AHZY*c)-M`l,Id +Bj'B2A"6Z-8MYD4bHGhAcj#V,CFCH'aM+'`e5#X,5*4Ccm)8@YLG2E)bI8D$E4!% +24cp'31)X5!BVm"L)4'Q1QT1h)rhRX1i[f2PBHe@M%VG[m#QYUlSq3j*"-PpL&mr +ec-l2k-iUkmJ%$6Ca(VdBKhqD-Rl(Bb90VMKNkEh"cJE4hNkKqai#dj*TdLlhqr1 +iN8+dYJTH5+M("BNMI!PGQ9T*%ilrJ&QBq'LRV3Bk$3'DlSKS'$H8e"dR,J1rT9[ +JHHHVa&rENjp$TXNY6VB-9"-Jal1iCXM%K!)[b)DrBI0R*IUi6MLZkdT-Xj8'15r +5#AUART(HbZf2lb`95l5pciM,-0eR+F9mXSCdl*ZqANm&*L3fK#G5I4d*MYkC)), +aiDj68Y2fX)`p0V%Db%Q@adiYD$,Fk+YHHf0PhJj1m0RMaTVG9qKU,kVhAe8E*k2 +L50eMq8)hTe&l+N)(!fF"BT@KrURSMLa"S2UhV[C@VVqa+)h8*#k&b,Tal823QXZ +@Z-H6,hMCK42Y[(H5qZ!6A22ST[XQc"F#&kF4MQ9&3ep%qBpi95A'QFZ8ecGqZ5H +6UmA#-AG3J$9jTXPb4+2i5NEil,@3!,0*pj`b6&*FF,9(6r)Qrcm+S%JDddFF8A9 +%#YH`a`JLM!NKcfrlf2K1Vi$kLUFjGZqSSP960""!5EqZ"i4[mF!p$piVXrlLZ+" +T'DPfJR"[4-!Nd5Mf81GFN!#Pr3QC9Sf+8PH[I#*Cr+5B!RL3!)k#VUZGApl`"f! +3$#1q8`N*Ij*(&'"J1-6$F%+@MRIG2JdYS*)-c9C(Y,K**rm*,pj$TBpf,[AG@l* +Fl)HEJ--24CbMXQ"CHf9chCS(83!V!@Hf[dEEU5J6I32h3'rc5H`1DE,Dc)epG64 +2Tp!br9M)!eMhp*r!0IMic8cSD69ZXfNLf[ekU,k*$L8+LN"`M-c8I8UURqG6i(& +Cek)1V4plH9'"MIb4Udi0%Sm$Pl(Ac@aq(HTDKI0JfV%E)rle&[168V1CqrP,l[N +1Y3baJ*K(dDDZYXCP&aVaL&-MfT-FGZ2pSQeE9(#f#XSUef9-kpdR8Eaj40"1lZp +9Tf`#I`rLLP(XKQ2PZ&i!r`$N"A`ELR!EK'R$P6I-i69p5JqcaH)p9UAh&ZU-cU` +*Z[,HrbBp4m9j-FeYl"$0GM`Si-MpZVLATdZ,1LcX*[4kS&`m!b+09B5VLa[01'r +NdT!!lUCqYJF$rSZKD2dF!NVbqEPl1A)di&'5"Dk[Lckjf#fU%,MZ3GHjqB3ie1k +1VX5*1UB+Q88M(qEI@CN*1L2+-5l)iFeU3qbD!MU6LIBmXd4JIGa'(4hiAh5mXlS +qCB)cU'R"9D[9f4cp&JVr6G%!i1L*kpTEGq"Zdi`Mie4r02&K*JH@H[CikdG$)&B +ELXBZ(1Eb*L3cDXD2UAGPerKfR1M!Vci-&aCMYcEmC'6AFJ8+j@kQ,ZNUm*Lp2Gj +a3h-'1ZhH$!NqDiPD0UDr43m9MY9aj&98pXX3Qe4-,,h52pS@E`AlY!)4X@)RLiC +5K%FZPh#6YMB%a1QkZX9,cpcPe5!#-!p)4C0q,b1Thc4[f#[el6'kVJQkm2VLLm" +ppr(A*dIXLkLP$5""cS&1)(cfk,V')krU,lF*j#-fYkUIH0h6(+3iRk",lYI8-L' +3!$4d@HhjXBS-[NK)Pm)pTGCSfcCP%qS&NKUle50!60rkbZQ"H&GE-Y$m`*!!I8@ +kKd10P-i&$Z3kFZc@X2EiS`A+0%pM!H%G2R-)9&S%P$b$)Ip'8G$hq+1I,DBY@"m +"b*ChHQJa)JTb0ZS$1B'JkPlGfTYS`a23jI"6S9MfZbk4iC%G`k(@YT,!SZ,E,lS +4(qMhlQ9la`jeKc5%1a'q1#S+SYq`f%hmFJ,TfU+GJQ+!9jI(&AS4!,CEcJ,2M-f +0e#"mm'MRE)&MQ5&da8b(1L8@-fUfi8hTb)&)*c-0p#(4(rprp`Sk2lEI6VhY4)$ +A6JLTU,0`MlP0$cAb'a3djrGJmeMJY"`)lA8Yl490AfV1edb,jh+IlS"Je&P5VPT +B!$r$pfJNV`%)rH,[@6rLZ"'1(0YP$KHGQS0iPJR1iEE2qaXNCa+!@ZY"3Sel2U! +pdV$e4YJ80qe`6f`8A34+Q9TMFbLr5j6QQaGarcL#fi`@M!23rR%HrUV4iUm43[G +I!#fQ&QSH9-RRG3cSQTIqJj!!9&AS5M2l!CZ#ViKFB6(1j1#3!1q%DbQGB-m[)LC +"k-QY("9G!U8-)UX#kaJLG-B20M&XN!#fp*ME`CqCje[i6+K#*Nl[1`Sf'VBVPh( +IJE&BbBM)0"0CpM[Z&KjGRbq8"&21Ka2Rmhbc4!C9$)[TTYr@'[V@D'Ie%dNabY1 +DM`KGSAQpZV2e`Tkc56Gm1R5RM(PC`&#*bih&Y)M[2Le",-jf9HRlqUma"DEKES8 +kQ*Qa-mjD&`@rRKGiGLF@#'9QiJ0`c8L4r!T!R36PTY2-bFVNMMRUS!pa,2VH%1B +D&L(j5QEDQR$*S5h(H)GaLRkT40cZ1[[!#PJJ5,qi0`12-0Lqba0N@AH5,HMQBqE +1+L,!#,rBc#")rc3S9QF58jX@,35b6MDL(lpmMpB9T88bN8QpCDBJXfiM1-dECB* +)@FQH[Ib4H*kRq"q6P`jH`UqYMDAl2h*Erfi"D+Ar4HKH"RP6Ceje!fKk*1PBVrQ +'iXHi9,`&MH"1Ii6+LHJSI2@6TPB3lQp!fj3JIIIm8P1%[SD&2M%3[p4cH5iGaD% +F4k$NU20##@QP8XeM+Fj592liDD-[EII$qqPc1-+T,HRbP"`Z`Zp[E2e0P+LS09i +H`3*2'A6V+1UK@Y%@Vl%,,qV"r1C`*T*@l$4NX6N*ePPDb4BE2!*)-pMTSKf([Ve +ki&BL(P%[[a-lh0bYT8X6(kr9YRck*ASq*e[H0,M#kGSjGjph6YB*&afGDX#CY62 +c(Kkp`Ve,2EA-&prfcp35S84EliqZ!LhcUEqY1hT5i&kB`@DQ#JA9C0jmL0G6A55 +hHS1PdPEkLRR+`pIPe&TTXUbNIhFf1VX@[U2ihre8m+R#,8'lAF)*Ljc$1,+5*,1 +Y`X+&1Pf%1mYB"d)hVL2i9HS+$p1rLiF1D-HF*r##!"c3"c3[LGAYpXUje*i[rhr +kT*!!IqL[repERL$3-h0DXr'j[#i!!'%Jc@6iq+Al%5[i2AQEeQMrK$I6Mq2rHIZ +jT#LPXa`D%P%b%%Qj@Zb+3@eCL51$(G)rZe(32YXk(BhB-mS&lTdJhlp!K%%Z9R( +2CqqlkcLC&I*Bf0H0*re+0qCmfK[18rhG$PH08K6I)HPeGS,lLLiEA#5e'SrQ1r) +&9JJl)qmBh'`&"2&@D8EQ(rkVSB'(I['+YPQN-De@i@k'(jHiNJYCbc1RYGGkS&2 +%JSi,%+$`43r%Z&4`EZm%$r#ZQdI@Adedi@U[lREJ'&eENdqp*,3lZEJ69!)M+S, +39bJ#c'[Bha*lUhRQf)%L6qhU%B@*X8'2k1'Z8b$"da56FJP2p5R3&Ck8R[4m@$+ +cSq8f)"Ba*)N19%kcN!"K1M3FqY)I'E+HeMNSfX4l02N,k$(9mAC,+b#BMq1NZq@ +'d+URp9EhXldND`9amqHrR31)RV[i2+JqkDP&%GH4&082C+aLAl#6XY+JZ4JC!Cf +NAHVliQlR54AU3A9C@"1)UaC3(j)F32LF#qCLZa8!,eESiiUr(Alr*$e3JpCm,Xf ++J(qBJ(U2I#4KJ18*Z0#2"p)VEb,ZA-*G@,HbLJ)eJjRd)apJFUb5lFhp1kadeNe +ID&m1XCF+(*SL[46ajkl9L!rFCBFT1N,&(QVT3F1`iCBH1a0PEIFpjmaGl9m(liJ +GX8Z-p,9ck&@4Z@K'qX%qpkLZ'jBZl(5LFp6eB+8R1jIP"qhGcE3)2Bjr@p0ELK5 +bV@$KTf8j43hmk%2-33&2!U-@KG5KBlEVRljZc%'RqM8pjZEpkkG,jieDm5Habr1 +6Y3qN$$TU,"h2I33NZP$*CaBb-DJ22q8M)Yh'E$3frb$%dA#4LK4Hbmhh2!0!+5- +D$N4!HCCC6A3q3A4afa(Q9FZC5"YeFr+DFm0$ErS#@Q3I!$`&jq(f6!9,M[3!k9" +d4Jd2bKiE)H`#eCQMIqiUU4+5q*+4TL5K1J1%[H+SA%U'mT)j2ae6(M%DI9iJ$*S +ZN!!E+%+!irp#)C0JqB@VFp29rAiP10AR-f4,5Ra$Fk)kTTb6-jr%P`f&iQfiXh+ +JR[,M`hTB&4Fh*h(X+*!!kdpd34Q[BFR1V$kdXhR"606pKPGDT5)MLR,l(kXb34k +mdY)$qHe2A)LAm&Vcrd9fBL!iL3l!N!!K-N1-BMBVJ13'mFp!r'TA-6L1EQ*4*ir +N1(UX&Tj$Gj5fqc$*D[393rKPa'jAR!C$A,9Rk`C#UMB"&SF+4Q,jYF38S*H2*iI +VcVYiQ)2XcAUqAS%*Vemr4)ihH4kcreR0BB-pR+j#EqA&L[J*KCHfdHeje"JMl4H +MHI5ABP#)k!Y$AQ9EI)VH4K$Ulk@)!K3qNlFcEBjP@HMFi+kK8'(-PbMQFeKr"eB +&bUZEYP3#Q6[&0EY1G0(IN[kb+3bKb5-SXM'4CThYaMG-q(LRH+kVdahS*+KiViA +r0r9L,@%k`TV8Xf(,9eCDL5-!N!"d"ViKf#-0QN#lUr52jqq04RQ*QP+QG!JRNcV +eF[TCeS(FpF`C8C6*IEhr1HJN2%&Dra%VhA*QXcGXcJqXXdVV52-Xe`GeK'9-6Rm +54LiKN!$9NIA9b2#UFX0,"3e`3pYk"[)'0!#fJc"lZQFSGV*Rji[8"LLXpFQr#G- +-ZEeU`Crr!mql*`1Z!ie$df'cHYkNKJ1cHqPQcm8R5H$%5RchQ,4I8SV@dicIN9, +&d`9A9@VBmfcaEPIS`11bflcK5@KS)J&JAq*TNqZU4l2E'`@6'TPMY9JIlp'laNp +Z&CR3jB&IIq5BMFclI1TZ20jVHL"dQp1dAaYkNQ@V%dT@dVkijmeJrhrPa@FbLq, +AYpCr#5q8J[-MNaUrY4IA"kC2dH#mPAqIkNL6&dZ6S+(`)cZ8e[+,3F$PpFY3rMA +'T@HV)53@qUkdD',$N!"BA0J4fp-`AK*L[bF$@(+9ZQ[GAkDL[#G&94m`HSBM8RG +Y1D9'XYfj-DdbXA#d9R)J&6rPmqa5#bBY$4'[+F$d+T,lb`PA"ddXfKmc2V(P!lm ++Ek#YC6lf5@',llEpdlb3!!V)HC1BSBa2Me#cS"qKD)TP%QL*@ZeQT,Q)6pb-+b* +#-X9'!+ZE[XI2bpMP6D!`89*VA0(`4M&2'pNL-J$Ncp(%A(-'&X1SefPNZ3@m)[G +@60#Zp8KX"I9f@afp3rAMM(('02,bLrMiq-Fap&k1MDq&bE!0fMRC-[E1D*S&aI- +eCeN4d,0V!0-e5p",*VQ+(aJmY)D)+kM0d+964mir'YabpXJE,[02XBAeVb%N'6H +D(-HCU8c$-8I!LQ39hQEQMfA!Ap+`M-N!*Q")F%2(fJD)+-58qC,jjC3Z@F5KeBb +EGX%2SGrL6&V585c3%&2,++Sb5XFaePMqSmUNljX4''(PBHN6p*qGSF#DYGS2$FX +&ApT*eYAB2pVc,[jVZ"h)PUAHf[+Z(`pUc)MU1,13!"52C&$2lqBT8#BdkNa)Yqe +[0f`Jc42k9bMr6-94dde`M!aI'qR,JLqkJSDihcb`%!J@VGB2p`Ep#FADLUlS--X +1aVA4eBr2)6pGV%T%3@TX3GIfdhHBheGq9Y@1L8b&CbZrEZ'DQQd2ZL&@E#KYfF5 +3!!2i,SHC")hP29+CHp9IfHA49@"QhHM9G"EJ2R4GLecq89ek-$U#h1S[CD@%cq2 +!N!!1a'l0*Z&)c(4KNiAdcMP2i9rJeKhjK11Z'FJPj("()4UlmMNfX62lG3CRMND +%'IQfi!3RVUch)SSRjPNP9Hh#+QE@#5*R&ca&mcd@"lR)UpfG!eAhDT5,!5A'M%" +`I'FCJldTMQcmBT%#F+@Ye-de,5BhaL*j5186V"ZL+DqET&,T8UEKND*3akd-!LP +#%aYTdG-(G@#6N!$Gjr8fdC+R#"&chl'emS%mDSjMS5a[kpZ@%4P+bSpkY3F#AAZ +q#T+[kph9+J%h0DL2X[&H[Q--4fh1Pa*5#'rR9"X!*!&b+fVFU5Y!QHk#TP$Gi`a +C)TL"SXPhK$q"J&@V"U)0YF6qp#9,SeY'R6M@6+hVE)ED98)25`hm(b"PbfE2H5Q +Cc9jeXS-99fYI'+M3kXb$'rmp"bkR+0DQEmVAK5)966a`Jr(SpZKqK+*aTa"2CV" +%'Ea3[0S8jQ`%PY+FIHKQ`125a1bG$qc+"hBjV3@lh-q5MRVke()FUBP3FTKreVE +4%a,-R[00$IESK$5ZRI!@9D!46hXdi$Ii0(e![IlDAJ34qUXkbm`j3"#Ch8E2Uh* +(3)#-m24&GJQJFYCJ[@Y)LJEP$649PNbB9J5Y6QIMcGVccciAG'IljQQMb*2"EYc +6h121-#fAHXk,Kra)hN(K9VIYBZqhd)NihY8*&([SQ3KbB[m1Y`"ShLNISkRr46' +XlibU,PJ*#Cml)pqmQhe&&3@5!%0`e66$8M5MK(DH88BF'K"ZqF44mb3JcIiTq&" +1JZ+&eljAC@eHI1D,0k8FR`MIPP,,RK,#8URJJm,LT4ZJkDY`#4Z534Y*48lLi5K +10N#S6iMi%T9)FP-#`k@5#NBZUTHVXqmNa+cliY"ld`'A,%N5CDEY!)q8pJ(k'$X +aIDC2@X$FX8E-4#3NPi1-,r8bDrUCj-TFBa*JR(Tq"CqRZ$bfmr&59AJRj'!iYNr +pUi%1Y@BU)@2UZ0q%dPQb'$'2+bP6cl-jlCBeXNk0k#G)P@H)2ZBB+#iU[5&41TB +N3Ze8%U3EbDjPd*p!&j-A4$KhUDIeS$9Sa3I'cmX#2l5&K4@1fkD@Eq[U5DK8Y1Z +6+TehY&p9T1NbT(('VTHRH8KKMc6%-KfeHacmSIN8R`*da(Sc"1Rjl$A+e(C0J4` +p,!"2XeTTRADQ"L1`@UH)JLc")F6T0prJ#eal0$j6II(Q2KYj2"A%q,`qZ(biL'm +4%SlFiMH4NGIbNM@PP%J8$$KLC*+F[HI-,H1U'M8YDc18-EE)h4+&M@'+J'fc#a# +)Z"aiJT!!3V,mT,%ca!M-$+2kfM!`4L[Kkb)QqJMhX[AZd'L$iFR*i9fQ1BZb$Pm +a5$j4'IXR!&QAe!2`6JM*K&P",(F*G-hpL,"YCq)IMNFimj()2*YqeSImBSdEV@+ +"d8`Tjk0"[,KieaaL8CaUfeiEKl&*qpG2[h6,8J0&YHVLq[1L#rTISD655'2`1-i +kVVAd'H(8dr&9aJm2+P&$i0$,0,hSH2*F#D9mrFiIIL!U(L5+`Bb@j5!FDak5"pa +hG)!)L-"lcFRYah1RlReB!U5Jf((4qD4B4S"idN%qS)FJVVpJCI)8#r4%A6PLreZ +4q0GYT41T8$i3+AdQZ-keEMI&BN(cMeN6%`5e+81()Ic1JA5MZ3L"%0)(lAS`L*9 +06(Q'Z1#"#31Uj5@qMe!Ge'pP'XA%J+ZL4UC4',6l4@'qa4@K@mZ,jB3!8MpTT1T +4@)kl)F'GcC9A!SlN4e10`%pkR6VlDjqQ6DIR'B%kJCQ9T*NG9N5mD6QmqNfMfTk +J3)FP2a&NFlUX'E@LcQ3)Kd&0kS0ZpffPMPcNGGGiS,p0CU@jp2V&a8B&TCb`ahe +Bq@0[YXhXA[db1U)X2FkG5*VD@JQ(S!l'FDZY"i*JF+6J+1'S'0,r,IXNJAd&R`a +34SR9IHGD$49G@B`D)#b6d+,BUD,I%I&kr&9kcc9cJ%b[DTZ%9RI3ZfDeHm[L!"" +P8JaTLZ%'0,%0qPbKU-qFm,"$*ji9([8SjpQT6c9,V*RBHeYhhT3fLD))`90)Y'A +Ji1($BMe6kX#h5eGr15AlieXjb185VDrm#SFB"Z$UrGmA8p(1%M,HYHVA,4&6pX4 ++G(J"A'1%F&!N6Z0q)Yb46"0PC`91`"l5#J-p'!m[r5mNAI11pG8&BL2,0&,@2TY +*6d6(9fC5VHqe8b4,-i%D%IhZY3%[*NR2irEf#AeGV[lHlhp[B"Mp[CCqhZZrEfi +IYl--2fpRhlHlLqVXG[UkbDl,1jqr"p*0-MRE2Em)1Y@dN9r3U'G3S#,)dAVf883 +pNeHaXrjYiJhYV9RC6K$hh@G61F)LRH8G5i'hJaaBh,dAB-f)r2'PeYP-J,e5Y2Q +JD31,j)b"ZG8)Amk-,V8'CXLjQi5jQ&kUF",SI$'j%K4qmNAD-D[E$QB8C82*`fa +#FS3fKPS&QGQ&Z4XEPRQNi9MhhT[5NSh[AD[IEp@(6[*XbS5X,H`&%dAA4p#k`bU +GcJr#hJYQeZ''kej4`!!TP)bYcEqYb((SP)jEE[66A4%hY4b6`6KCbM)9#Dl)@PQ +!Yp#jYaM6CdGG3hq5lKjrK,a#FJ)IjFlYa,5IB#`Afm!2,QH4e#UQ0cBPfEbe"A$ +2(XK'!kZ*YSaeVf[P[NN&P!r40[6l(jJPPSM%1jdCdcXM3P&"c#S%r'PZc4,3ReF +F5p%@D`#l6Bf'Za0BN!"AC5S,e)U$A-GYS42i3JZjP5UI38S(PAj2Fca1!VL3!21 +qf@RM&flEUDSNp,$r*2hSqV`biQ"arBNCM#IZXN`D'4)8,&f1'D3e#V3Z-9dc*T! +![6%m5lQl8qB"5PiN6M"#(R8'LdA%!j-IA*b'Q+qI6b!X0hd*I2e@eICC2V[226m +,b&SI58pb*bI"IXRS(&6kBDm(kp,$HiYeB6T#Z,Z)0N2CYL$mcXqjM'qqXd"CB'r +dMB69h,SH(L8*K&L#rRq*(Q1CF!VMTlT(d4Mm$Z0kTF''c"8#$)#JFVKbTX[6a,* +Ic%NR@ZF&#K,*`p82G0!3HN)lLJKCr'i60Ta1N!!$!RqeNUH,DF')e2E+TK[#eaD +A2ZTY+dE93(q*Nbhib85!)HJa"`D(US9NQ'4JcMV#)Lj0AaN10q2NBM8q34IKF)p +A+eIBa8KAF'%lJIer0Y26%NGIP5@YT'D0N!$[apXrJH6h*'FQ[[-Y`1(,*FLK101 +5H,PB99DRH8R*PjYS$X8m@Kd0d#$D3*1f`!LUT)QV69H'14XI1E$3m1kL&jddd%d +pV'!Kl5lkIlk)&V"&&RMQJeme#&hVLkkFIqQUa0hhcMcjhAeV4dI,IQRNiJCcF`9 +E8[IeFDKB&(e-rZFQ[8af5ZZ)H3#8&,1%Ffme[C[KLl`UAK@1EK6,8H8JA@i99kE +l$MFe'Pm5S$PjJ&r,Zcc1iXA45a0X3MV!"bmUhfh`D4L3!'K0$)H%%4e*(+@[3S" +9aK`bZLqkeQjMS1)(9p[XdFN!!0a1fiq-N3&*$bVSIYK*"hf2Ghrd"A%6&2C9VC8 +SpG0k",U,h'Zp%TjrUdPChYU3!)0e%cJBC9eDM,VF&b@d6)A0p[[lX(qNFILdrK( +AIAA)lBZ0c*MNS&#D-HH"$LVT+IKb(%AlVm8J+l6"UHaT-R[KcBTHc,YY5!$YVBU +Z1ZfqU5bFb%0Um-Qr8Q0*32k+VM'Xdk2I'E-9f1j%JQM3C`'Ba0I#,%L#`+)XU8f +6C3$JZ5HGAJr(P3j!Ri&'9(CG`#hl"Qf@cVBph94i3"-"9,"K#PV"&Llf1mpBZ(C +2*+ddTqRiBq@,rN[MShdm0'2R1P*LJE@Xm9JRHI-Ee25D6B%Vi%(A4NT%6V(YAeV +S3*Qp918TQBp"U3&cPCN+dDV+jeCZBHT@%Bej-TfMk32*"JM*J)Jb82eEG1R$-H# +KVKES+UEB,UclJ@3HVZp9$3"he%""@A+fM'DPadX2H-NbMe+dihd&bQ5TcHr,El` +UK0ei)[Ur3+QPC0AkT'hZ1(2FK#fj6qT@"XRT(!U9m93D,#h5)EHb`$jPG5ePJNF +l2BrHDaPd`4ml!2"C@JZ4!4Q#LNFfQp)+mc4@pj2Pchf$e3ILZjPq)rk($#YF-'0 +Q5l[eIh"l4@BF3#Y012BH%@"L#L-XPXrF19-JEK,d%&q8`Q+Eb*hVIePf$5HIY&h +8KFT'li6BcXkXJ@p+kQ(42'lF+N-15!`2Sb##j[2I8hhAcqem0`-1aqPh0VQ1dV* +$GA8GV1J6Q%%J(TfEZaL%eJcVE3h)pSNH)JcFR%*EHR&M0-dK$ZR-,R2#P'4#GCU +cAP"T4l['h2M4B5N1C'h`a5"@R%iMCl*!@IU(iR`aI`Ljb5Yfb1JlIfEdcVhT%+S +$Ma1f)M8h8F,GUmqY`If0PkP1TC(MSh"A$d(lh*eRhZTANIDBrG1HR$c*9V2XFHm +Q&Cb4jVVb#[H+*0,k[Y9LS&Nek929Hllh%@Xdrf*Qf`NmM1*L%fVqRc*3AQ4I#E9 +3MRd,Pa$00+lZBeLImQTXjrQ@NIprb$*Le65'j'9+K3(GaLIfp@S8*PjIAUT&f"H +%FhQB"#(0!V-J(hp,hI*1NX"MAr9(l2mqc(aaPT3PJQ,YCUGY1jH'$6%q!TKR0(c +N%jKSH(HD8B@3!&3fdF3k-%&E&A8D6@M%aKR35jqF(-Pl9SFfTIaNiS1"d-h*8p9 +jiSk4k1+0lQMjK4'!Bq-KEqd@PZTB6R4LG)[U)b&0`LB!j-,)Da4,1lqfh"*JKRR +Al3$D98%8&3(S6p8Xeel(rh&%+0`$2(pf`L*!LKf44PEM1S@2p!&,0lF-[G3MaJe +`h1+M%fqma`HVNYYmE4LKM,5dA3!E%%D@3-@Y@YP8A$8VZU(YHmYHM0)pi,4d05& +dRPb(m%p&@(RhfacEM@V(pdi*DYjr4Fq%&h6'b1ah(QYrQ*bF`VS*hD4XR#j$he' +2'ahqEdpMZ%*aNQP81(L6EYbr6$2f$5(lJIDd#Yk40@rl2+iX9$d1q"V3UYBcE`! +Iab68RB0Be+))UbENP*&1X20$VJc*LhdHLHFK06SdNJi6#)VZeZ,@LV-"*bdZp9h +m!QP3!iJ+4IU05k`BL&-#Y$SFT6efqd)%dmKQSe'"U68P(CBJZ3Z`442pVN[Fqk$ +jqJ169(&[1jLd!K%3PcSBG6"dacdi#4E0Md-9,4e@aekh#XaGXEkkEJ!jcRdMS'H +18,qTHF3MS&ZRAPc2q+PC"1U8*C1$l5Q1JeX#JMNS#p1,PGrS(I[lhT2[Af9,Vh$ +`D5BKG+a,jM1"@(B'E)A'9VeT2r,2c45dMGDq1YYE"bE2EA6%&`*"allU,'AG6Ji +@ml4U(Vpe@ZHZKaEX`VbGcIp045fa5ddM2kFqIK"YmCNE*#Vh@2KYhR6T#fh6P2I +"Sld$aXH!)L2SpXJTqMlAf@NKT50I6`QLU6iGAI3RM5Ji#X(qk3D'"@*%%$D3!-C +ip'qQLeXiHiGQh2ipH[+I$5VSY&Z1M+2)-0E[Y#%`cGAq&SIPcaVpjiqU'ASL`5X ++dVrJ!+E(UVlA$(cFfh,MpUM`Dc*Y2)9rVDMb%r!RM'+QP)M45$PKk0MRiLKfU2j +0-)S(ZHPB"j8CmBIciCV6#`fB[Hba(N`Z3bK6-2'S9bJB%l*GMb,EceS2AF%RBFC +JQ4UhDeBL3%'j0*+kqNhH8D$6486"c8bl&9351KK-fXLhf&8hfpS0X1K)UF+iRq# +C)6D(QYm'mS1"9YjiTl@ASp*0bH54cErb`D&)'"*38V'0ddM4M[P,#Mb(,lPMlT' +k6!j2*Ci#%Um((5TZ+-B2@kcLD+YCU)SZ(X*8p(2R-TL4'!QBe*crHX8M!`Z!VP1 +)+#B4!24D(JbEja0U,(DlAii1iQ4**VMI2#f5jJ4N3#qb$hcXbDQ"B!9a(#)rHVa +fZeifcJ(XLhp8C9NUka!$!0I8R6[8F9LZZX'**MaSJNA2&"a0'G*$@5rHPAGfA58 +%A!*0)68S(qdE#,CDH[JHaZDH`TU5f1FJZ6'*X(EcmU4V6%dA[I99qlDY4$iE1'G +aA9N[Y3kc@E(K%rlH0X9H"lZR2DFmFKe3')INLh-AdQ*hG`&4d!R8'AM5f9AeE2R +F2cTAqNlb,)BKrKl(40XNHjLq3L(cH!TL-'9Dq$GQL&'f$!Fl-jD*i#rmA)4*,M1 +KqG`#E@Y18+5U1&Q*R#Y4-qi,[[)Z)mVje"d6482e`kY0fNVq%Fakf,Z6K,#9+4l +L%AQ"N3PDiqdlcK!"dkiHeVrm+HH)L!+5%pL['C@QFiirdJ&(``,Y+&khh5N&1Dl ++If&pdmr4i&ZV*-!IFSTDYM#Bh3Z)BPhC9M@dSlb`M-3#b#UL6`TKR!6rIQ9UB*Z +8pR%+XIi*%FBec'iBU@GJ)5",jq!6Y*!!$l94X"6&q(bC0rDMUjLdFVfFB0LPZfF +P,pYU10a)CHYf+!0rMI8ma*9h9RkR8A1Q%ZDhp$iaEBH!qEhHRBETc,&)EQrr++` +0!2"6@QfFMVd!A'4+%Y1ddEqXC31THa,bX)%"`r'-*"N@,Lp1)Te!RF#T5B[G01e +-Gm(4#6954IIaU'H($f2M`DUlLY5KV!4Nc*a@jSiP$,RlF[V&jQceql#5SDKhr6d +N@d'r#"KDi(&Khii2Bi5R*[S-r'P)hfrqlmbBQlEQeYArFTG!jCZDHVKe&,,bcL[ +`Sml%p@dc#,JH"ZFEE8i1%0GHS`qVMi+(NpD%2EdE&1[aJBAMG`)T3"ANdpN0hMV +iSJeR3M3AZ,+NCQLAci4*+JIr1h'`+0q2VaJ%Eri'Ir%X-a23!YDq3MTapZdSiCc +*Ek10&LP'+GS["@TAr"Ue[jK66mFLeEp+rG9A`DPfh*CGiFf*S!JX994E6p+eiG+ +A0K'AipkmDQq8kU-QbDj*)!%q-)L,!Q)rK%c0HSDhGRqQQ2NDL5"#-20)k8fU+"6 +-UkmF!Ze)UEj9XSk&rIX54BX(#NVa2bLUSr25VR3aPG9BdZ9qU'23lU+%SA4fRd9 +!!`Il%S,,J'iNeTM+#8lVC*HHqF*0[8lM#B3LprSRbXdBK)(dle+A`-m6p58I+p9 +,K#+8PdeV[,Q2mq'+Q0Zj5'!"Pa#0j+V`IFM`Q[GQTJa!jZJ`N`K`T1cD@60@KS) +F!kU(@FmTc*!!&jiF(G5#`BA#V+S,ZKbG0H-#UFek@9LZNaaMI(d%mp4Lce[ch)2 +N1'J@bXFVJTdULrCGf*@KNZkqd+LE36J5S*mQ!"b[#%1(p@,l)i2li19EQc%$)2! +8jfek*BS[ce9$m"E23&(!-1R+8Ib#%Q"Pf9[iB)M5Nd&5&aRh6!m)LZlZEA9+QiF +ZQIFfjlIK[Qm(9EbU#NR&d1(p1XAlpckk&%D9Pr')kI$(EC5Ek&!T),UY2[-FY+& +eLCY$'m8GQNBFB,%`%0&V[cAKG+rE6ferm&'JC4aV#9PN)FhVfZh#Zd0&lh"Ur*r +a6[!qZjm2f$V+(a-5+#[F`T!!6lT2I8ESk[QhJSX@#qlqFHT2D!N!Gck%lN4%LTi +NU2Kh,#"M3r"hM6%lKG2CJ0eU+6R"`-J+#b9%m2&bl3IEe&3X4#`S9mFS['#*e-p +c6E*X5LNMJ"iJ8`MU#J@4%"[M2X-G5B[6ejij#jBf[G(1*T+SN!"!F9H`U5N@hR1 +YCc!`9A)QjS'VC(iK+2J[&5,p#TYiRC!!4J-"HlGm[U+Z1mBUY(dCRpG,I4@4eI+ +5R(PV,q8!Z`h2rd)VQAUhJV!$9+KUiQ6"3IDZ6d"lXM2dk!HQMeelZ!qD!-4E5m( +bVrT4e@eK4mRUPiCm#)C&kJmE-R*AXY`B&4b[hK!&1hHjr8(T2Y8U*HbqMjh)-15 +!&-MYX!3LVYmcLXC`@P(08!U[(VCF94prVJH%C[XD!rXHYLMKdkK4f595pe0US$5 +Ab1fP)FaN$(H!+Y!1Sf,T+Q6DE+m`F,dpX2%4eccN),FV5&idL1iEm'0"jr995(k +lcmD,F+Q@QqQqk`89FPq4#$HqNHi1a!&(rbY3)dCEPLhI-@(U%KPK)iX#cZH&KM9 +XT+Kp*ZTC!NA#K[!5ifDdR'9(VCB5Hl""+j3G$1++FX9&L()##bp1U`"cYlKVpT( +cUHPpmCa!!!B4hSif)8PMT4aqMPV+%EC`G@e'$F,)VG9&jY-2VHM-&&D+*22GU%) +SEfj4cE&+I#Q[CVk3!!"TS8B'ArDf+f@M22+QjQJ@+4C`Sp)L(DYL(Bii00Q1FJq +TH'a1(efc`ccpe1P)fHR'MVAh[r9G6MV$,c6A[bFT*+h!)@kSh"[,8YL1q$')2HU +L0YQ1(M"hDDRVM@)jri6,kA+i(e+14S6)8N0FIDk&9mU"LV4,aT&8S&SKUM0T&62 +rGG-rG)L#)p"[#XBH1-j8*d$QX`m[QZIhR!J(R4mXdC++MHbedk1EEmc8&-f(Bqd +3+#11RLeDR+AjHZ@d+R%N+T%9QkJ'8G!K+C4eVbGS40+8!(fjUcUD`N$VT1JRTDb +X3@CBCKXZ'M)528F'R2VQ-1*&NAE1CB*NUeH#'ZjV"pHqdX!m+RSkj,1H9mTa2la +fpT4Cbpa$NGJ"5fhlhTS4ql&-[DI*Cc1)e@(#@Rrj5h$VZTIe!K0Le)L2H&l8*D2 +Q9mS2a'&aGZ(r8r8iBAa`(&Q#3EI@GrFhMejL[B`p8N#4XP-,*0AQd+XQ033,VYN +-BdjLNqBe)1T(SU8E9J3U$FH4455EmBe*lRX3`Z%94ZLH(la'HTYD6DUIBHQPjS4 +QK(6Se+e55%q*2-IqjF"VTZp2F*2H!,P)HjKrC*iEfKNjN!$S4MY`YlfUbS'6"$U ++4X'rV4e'dja*EL!+`maimhZkT%[R10"N-()M2N)-II,B%9*QT!"@8S003rFK9)` +NR5E*mbe+VFH+p%lQd%eT%)4AU33*dJ*)rar!$pH#IH*hhrmhpl"dJY5'30Va%pG +3bdQG0A"fPdlK1L3XhI(l5qd`$If(@4JeH#fqZ-T1M#DjT3bE[$3PMH6ckm5K@8e +H'G9qAq!)j%H411cmJF3mh(X6%cjL'3d4X4)HVm#m"3N8P2jpTbHQ4r6KiD%j'qX +2Sma6XSjQe8TaQa6ATLCPeD`"Tj5$9fVS9dH#@86#+46%4-C#(Dfiej2"q&#Qm*E +"Zje20KjZQHri"j+'lhN+DJKqa3(pJbTYp$QZ`R@V9jR,)fa",aGImPeeQ'$RZVK +qYm%QRmf2MC%XBj92e5GXN5r*jc&04ce`%-l(M`pH0ASc,q"*Rmp,r&f-Xe&%PHD +d!b)JDE9B0F`qE%6%M9 )MY,aUV+FRe%&"bGUJjD3Sfc,c3CUhL4ASlN1m2c6 +A3j'F9XX6M"S,clMlUD4!L09P8k",eZD55ZJLGHQ-'e20q!fP!Y-)@h*`i+c[$R@ +%E$K(0lDpaGPh&rD65IEb@8qT2f-"Z5hHml*NESekY(,'X1j2PQGFcJ[Q1!35-0b +HI8N06eRj5Ul,DrK)Y3%S)[k`3LCP@cG)0XhFdFBHd&GcHQF$H8DA@ATN&5DP1#8 +d`MHEk8lA2ieJYV`Yddpr3T6S%HJHE(d-R"q*`+Ga'mFG!YSJqNPdE2)ZSPlLjR! +-2iX5H5M[aRL%EBYplESr1Ij6RrjKNi`+Lkil+p4,UQqdFUaLMNrJ!q*5hd(45c[ +!QKSaCFNIc,'NQN$$BUX4*XifARlAj"iVdTpdT$!q22@ciQMK$8G[UM10'Pi)ZGd +K-B5dLjlfC(N5c3bBm)VP&$-'['E"k&3$E!YqV69EfS)-#JNVDf%iG3(5h6*'&Al +G5"U86aJTVfS(J+Mm%mr9Jblm)hMcLEfY4lKT@XPLF&X"PcHp##qjCF(q9brkVVP +a2L*YY'-KN@+$erB$bhBqdKe&Z`YrTmT(*MkqVLHPTB@[4q`AZ5j($XDiH`JTf$0 +TIhp8Y#'c#FUGiKQq,G%K+"pP,%HT2MXhj1paG$8q)'Y4BkcZJ*i#cC6a"!M5b![ +Jk[0"2ZMN39d+!E10"DGqA+Kal0L5AV*`D4Y`Elb1LTBJc99+rB5V-RXr*&`B*Lc +"(X("ehQ6[T6Ad@dr8Q4hN4M4mpeDL5J(4@QD4Y9r)kI8f6i8'6U`ITd[ZBi,PQ@ +UZU-V*Fb"iF+cY4RY018KFd$4@'`hhlZ3!*EIFcV423q#kN)L5E[J#fXjpYXVQe* +%dImkj5@1f%"2,eN#dK*4*#fB`V%QfmfV-3MLTq[em4ZKT`!LdKZj3Sc`8EF!K[f +aKPFBJ%k#Z85m1M6LXB4Q0b3YKe%V+*qcQZdXAe5#8SSAL"$l'lAbK2V`eNpHNT9 +F0LZk$%E6[mPKc'PT0Dc"IB8MXhUr3p&Er2J'DSE[k`+b,j+(&cPkSk3YpZaebrB +HL"8Dm#!G5ch8@(9FiLjAKR'dS%jCIA%Q!e*354NNHa+[HdDeMGGjZeIc[KFHqfJ +Q19PepYa-XelXqXi2AV,a10(40TYj)Y%QZNLe6MG(M$P*qHf3!0#S(ZNKR&$F9!V +8VY9k'PU'+PT@f%H-C64m*rpemY)pX2(0Z)JXU&YDL#K@E&3%K&ApBb'!F6'faHA +Hcf30al4HbT!!21%M&)rQqdkA,"m@KrkCM0jXHfTEZZ&Bd%rGGkDh8"+Hf`@pKc5 +Ibfk4Z4hA-r,VVbJE`H[M`4&E9&3D(i26ZrAF(i)3XY`EU*ai,KY,H2[0A*4T,Z" +BkIM`qYq*e+RbTHLI3f0F3EI3Rhkh4h[`[dHD-[[@"3m4iB&G`hTQ8IJ64KC0*km +,2,[DkYBQl#)b)6cfaD5e"@LT%)H)$*!!YH$Cr+PXA-I#�PQ$4PH&S62JkBYcf +KV(`lqQE889J"j0,DL'fS)a'k9"V$0QlBLRC9H2)k@XM2#N8SlVQdJ&#bI81cCdF +kZR2!69M"JNZYp6Y'm!cPXmMTUdGCc20aIP%f1TqmNP+T--$[6b'LBhV3p4NFCYe +Tlfk'lGU[TVQQDQ8dPMH*IGi2S5YAcAK*kdFp@j05A1d9BHj9Rcjd("j,XKfSlpc +dImL5!8FeSLb-9D-39D[p3(F-IeT!Ej-PGQ,Km%#GZYcAJlY#!-r+"6KYY2'T#F6 +BGi&BK6LD"&MRbM#Y#mAa5'M#iXA1k-",N!"ICGN6Z'mp)X)Ba2'M*K[EBEm*G8" +AJQEZ9cJj2adG*EGDlBj53E&rUpV6"%K#X1QMjRrk@4ME9%ejAchce[PSGa%q`eJ +qJaJhG!lr+2#"l6JJ+cf#m'1mD!!#fH9eVCam*Qqf@VXr0$H`EYY2@i[Pb8HVTBl +r@3CiKYS5"8*&jq8#UcSlSC)-US3J&PEXKl&6[#N@Q`Dk,AD*R,FG$bE*"$Hf2bQ +iGF*+D)drcp`+kfk1%#fZ'dF3YZcD6LC(1Z(-(dBVL3e'NeIkUKRZLS3cY*m20J% +c@P9[SP45[DHAiCQ+8M8cF&6#!M0DjF1Ud$K-6LIP-,$VbPmBcqZbiYX69N(+P`# +Y-TGepXL3!)Ij4H#3!*-iNjJS$ja-TkNk1p[CaZ"YdN-KT@+6!['2+T&fZ&3&2@4 +lA6I335i(Q9Llf[8U19ID4Bq$CFh8I$(JB6L!PrDmd&G2kY@b"U1%r+J,RhL*@q' +!rakT0Ma1",J(`i'QrHCCMH"FNMpTX5a3hcPpCLSRH!N1*Zbrc$KH!P9ciBA0c&8 +[r,,f,qXHbJjm6($a35Q9H%PD9iq,&M`HXeL3!*Ij[ISU9r3IXHQ8c[dYTGNQ1lA +`a(ARdMMlPdAaL!ArI%`J%I8qX$&i"@fM)[$@N!!YS`+jGT[9*&dj+bSb-1AJr-$ +i`b069Y+pH`Rmi(hLB)Jbr[j8RFS@+5GXee)bIH$#0*D&-1,"A%AUMHA@e2kVDpp +V24GiQqD2S"6SZj`MH3Zfk6aIKf&%8UfJ8*e@6[@GA*()K2)cEdjhkR(+TJ@(2I# +8(!T*"-FCced5(JfNj9q(M2#J&pp%maaLEY[$,8JN[BlkTf)BYC8+Iqh(CNRAF@+ +C3,+G1KHPM)-QHaCffV%UUCK)'khST5)F9RGdA@a,2Gip9b0T&rLl9HqGQ8`BrGd +3#!h6VCCU1Jp+dX*Q3MLD"kAr4Im2PIVq(AHXI6',UqR$(4Kp4SM9#HBDa#@'$QT +4`2#PVEd%DAT8q%F+)'Q6Ijm-8e434*lf@%JLSiJHlHX0J[0-(EeqGID'-I6%S5U +56fLhMeLKk8eLU&%3+K1#kH1eLF)1PMri&bCK(#"rrSFrbZR`XDY3FCTQf"IBDJV +b0%CPi%,DQqTFZ,XmmceZdeqhebplCU1bGETqY0jX!@L0Jm)a@!J0e(XdQQ%8k9# +KhX'QfLk`+1i2-@+Hkf9+NbaA(N2rDfRVmflN-$QQcdi`4T%*0ZKqb(9i4DVa'U, +kmE0akY&MLQ,Dac2l)2ZE9F'XT&#eGS`j$8M+kG3'SfaJEMh2jBQGj#APH#jdqVZ +(6PVG$cNcRm(%06!J-#63Cj%Ce@SQiI6Z%I"!*eAT$1LRJ@$#Vdb4p[PeDYS@lDf +L*!0f9C`DFKR0'4dBJ!K*SP'6GB5N3lT3631Q[Q4CYQQm,mN"(6f&DfPZl0,(p&A +YUNGdL(,mMHcA`1)IXX$RQBj`95RH&R-RrH3Ck)9T'4lIj#UiGI3*hdk5[2KekT3 +Ee9$9a4(iVYQN$9-34-Qmr'pKM-IM'@)D'U'M@"8Vi6SSAi1i,Sr6VS`1[J9HlIb +m(&di"*UKCpcP#)!6Uf&`)`"+A!dfZC5JpDHmRND%ai51YV3SZrm%d'[D@3QeJK" +f$dkC**31ZmlG+iJ9,2*ZF!*IP2B5(LLN%qj%Q!jRa*&[&HS%B2LeG*VXZ3(fNa# +NCpSCU8[$ajr%62LdHl#'(e+Y%T(GEFH,FhBaSjN691RPIJa+drp&k'8mqi5iMkD +L[R-k$NkRl5iYT[YR%+Y0Ia6q-)iea!MilU[,aV9JEU!N@&A(%!@'jip9MTi3GYA +RI9ND1A1p2"A(b$6Y,L,Dm#GriXV"+64(H#1IR'kP8dLpVEr@@i%'qIM"0dA9G!@ +*5'""*Im-C9eUA*0jP6V3m,L0&jRS[P9[!VphrKlU9"35A%,`Yqce8Vk%&AM&NpE +XfjfSfb#'Zl%UpP"e5GEAq$kR%l56H$fTHN"L'l"eE2'ECh2T"q"#ADXG%T!!(4J +CXR4@1mE-d$q6SQ%Z"U1UDUf12LPNG![)EIm!G(I&(5rM8pkG4L8[pQ%-43fPlUk +Qd"li&5&29GYBqFE$'iU3!&+9P$r0)FZL%cQpEZR[(PFQl0&G,f9V"NNe*@26@HJ +$Vf)V`XJY25XJ$&GHpN2qmN"kZi6YD)6T%1D#Y#Vj2)A"FUSCQLYYNjD"JAJTl", +&5hfS2TUF"&hhAY"5i+bR[d)%&rBj1N-INJBla(LDP4A$CMe!4!mXralRPpKCYQY +SSZ(RNFJbjbZkPEmU&Q@d"V`G'0LLq`1*lXG@lQde8($@`SD2AD(9DLh(eql5%!j +iP1RX4)B0IF9`Jp2r4T4LN!!9E1UF,SSP4rk,KF,bPPe`"8elP!R8,%J!JbT465A +-leTjmNC5,ib!P[Y28Z5j+H!11[V(h,Rlj$T[NH[aTm*,lF-X+[Ubbf,23RYY3*D +kYrV"QI`RS5&U2*1ldqkCULS)83ek"NG-A,H8+Qpk#%iAMLT,S6C`%G!q$kV*,eU +cma8fN!"qqip1lF1rLEH3!#I#eUZ$!LKUbbJ$+-8Up[560`r[b+&cmJE8SaclU0l +#hD$ISNR@a1(UqYU[hDYA0ZNAQ@[p4aQEQjV$BYMr'hHEF+e"J'2`REQ[HV2S"lH +*-UH8$*baNmI#Z&*c6`fQF`M2#%l65[4j![mq101erGbrfNH-6aG&3&SD2''C'#$ +SVHS3j(XI0BA+,mVmAPCh49b!me(Vf6A"$lTZQ'Q&5XB1HS3@`J3Mj1#DIi)Y'H2 +p+kqb$&aqZZ6i&IIc%`5l@[jPGl-cTS*Z!TRDi0jZf%K6efhkUCIr&b5ZRUH8e&3 +[rR3LQ"c@T"lX9CJ'"4Gq&S)3a!&82I6mCPHiDTEVBmiIXr1BN!"%%S&&RI40pPf +UPPI-0@0R%aYFh"(KT3)JF$X#M#9D8(E10ZqIqEl6R,q53Lkm!J(3!p5[C6*"6F& +hf[Fq-!c[LG&DiL1jqfJ!(I6DB@PF"N+`UQIBeCjFV5FPLVRk+4rqh"FBk$QVe(F +NCUkDN!"+b@Imr&Y*R*5K#+ZX(M&AMEQbVakJcUS2fk%Fc0%+b)Si#5C66Im1DXP +$bfT6SL61Tqdm$rDAX8U$hTQ&hd28!r6@j-[4lCbm*bJA8K%fBRdhMaGN2CbF6E* +jH*'!"kS5k-@'5N6-2$Aac*Ied+4kf`iRZ0XiJ22JPC8mTYaGTK!e"Era(TXm)a$ ++ippIkX"0$jD*E1SBT+CQePX`Y3&N[FCG`E9lK`0+AKU&3,35ZLaa,BIB1`!*VF* +h9VSeY,[YFVak'14S@3e88@$M%A0')5%EU#D(L'%0NQF`KLXaHLGF8f$DAbdh)X9 +@EPi&55![,&RjkdXpG698+mR#iiYmd$PV6P+NK!h"@[Ifcq8'!SbE%*1ECaSAX&I +T)5%IklEZrDp9FNVr+#,MbRc`)@K[`AM!9XXdZ[6T)-(c!9b*$YPSK%-SR)3k"Mh +pra8TUb!Bm`qEdq9*XPiMU$AMIcm2rR(&"SZR--,9eLaiQX65cfN4Q@,r)D5p4pD +rMa2Y#%1LX1&c5p4XTk!LSa13!26r&cZB(TL+3"mD6SdKKSR@*5QVjV)FPY%#a#Z +4Kb43-Ic"FL2*l[P8S9ZbJ4@F8I[IFelDkS(qK3jR"42QmK%K4I&T!3Mm-IljL1M +MLAR&DllAHdKh0V8")Ck3!*MhB8hR`rmSAqb,R1G4L#GV"L2ULpbYkD*`V2m,AC- +eSc-RXV!9XaKA#mJ+%F-d0EmZp(3SaeLSCekSdjq-`)9$9[mHVr4C@Z'9dGH,Nh0 +ED,,,bp$JMh2X!lmdD#r")VPCT+B$-bi*!DUNTB-l3+9ac6BCH%5rP"IPS0rpJhm +$r19Q!-qZXk+f`$R[qF5J%@a["dX(VfJc[i@-C+V&r#lUce&JS$*#HL0*f$Edh*` +G`+kiJ2Y++X"NpHk9E*jJM'C6H`hiRk51BB9I%2q-9(rV"TjARk3+jQL@GM`d!0a +%@i4"2jCf&LU"a+PSc8Y9VA3Nif9+peC%+(%Gp5&`VAr-ILGlM39E'b,6&9M$BC[ +FUJ0-F3R!5*a9$HXA2D!$TV`[*NEq'QDf#k,6YF)Zj1d'*crq&q4'q*(J@5[LAf3 +mE[#F(5-M,)+-AjCjFZ&9+#A#a`lGlUJq[hi8UKdKr5GHJT*QLJl(rS5ZP9Y32ZP +aHeGIlRlC)'GQB8j%*phEC1!#jHA,m@A5[hS&3F-e#meqh[Q(8lE8Y2d1f`I-IL* +V(Y&Hd0H,T#d2)SHqZ`rpRT9fMNGDV*-)*dR8Q%SQ9QE@H'(HpS9H0ej2+jT%j#[ +`S!GAaR@iYPUJmeVG+eDM6ce%GRImFRCVP5C-ImGY*D``*%HY'B,F8*-dADX5)EL +"Bc6pAaG(HqL&'2H-SI%apF&ZhS!j*qD-m6Y*GMmejXdB33%(9NJVb8-IIdH1R`d +Nrd4fT`pKpq*Zbm"86XkZlJ)i$GC$'6"0EEGi-U[B,Td8e4IeKV0@H#LT"k$Q1KV +Ih(Ppml9F+@*l,A*Ah*bXV-T@ZIi@ZZYf&pL""jAdY25aid%(F2A#Z%[6ah3L'eE +VPDc9IBNqG6a"2ckB(SeFXASLKUJ$*%lEH2Yb@jPafPrLAJ%B60RbI!809CEA#RC +[je@0%$#ID#1TT'V3U2(Jb1FcTRcJM`NaNGf`)M"PahVZ`T8eDhPl(f5)T1!(5m- +Cq@iXj,MCEj`(p$mhkdeT9,$0aeZ[Uq2fppAlHqAp[S1IYl8-IYlSrcI3*rEhCIY +lC-2fpa[lHrEp[D0qhVp!VXXlEm4rS)-($Z@6TQr1NN$TCbfSEMe6Q&LB&$5di)! +#)PrVPXq(@!B@Y)BYp*Fk6k@0d!SJkhK(jeqrq@L,MMNQmNjUcQC$i%5fNd!HR&b +CbaJQ2a5e[XQk!Y2Eq12h8ldC0$#3!-C(E+FcTY0'DF@KZ@4G!J(Bd)dN[R5YMKf +0+`jc1#&hqP%-KDl)VDq3!'X-'D"T#!pGe5[9-FG+'*PVa62Hb$%E0mFmYHX5i8& +qP)haTjdMEML$T)Vd(HBI6jhih'N4ekA0qZ6XC'h6HRCZr(FGMDcbZ`Jb#akfiX$ +&d+Q$M&[EA9jHf!HSi`GAKI6Pbri)4hCQZp#lP#"6cA6Bi3GqLSU8RlIV&lAK'[6 +GAbq%VrbTmp4Mqm2!0Eq9&Srf`RfT2eDE45H9Rh@UIQ"jSM(VPmANLDp$P!QFS,j +Z"#ETAB"JMVE+J@66MRq3!"Bb)r[(h[3LUU)MmF`*Qj!!TI0i3DYQH[&Iele-ZYX +%[2Z'C3,'iEABpN@-Q'E5jFP#,pb8E$X9LZN)a34#@S4M8VQTmaRh"L1Zm3Yak*A +ih4EDhM(D#6#E-PB0)81Y4KebEYb#b-9rH9lSIA!D2QrJ[%eFcHIamY(f63C,+Hp +XBMSl"aj&c@,JIHMGm+qCX@&LNhT@6$#cl0)b(pF%NV3M+JZ@"1I6M([CL$bII[d +VrcAVS4fX8p52mB@#I!K$+`e"[MI[L[DhC!3#+Ta`+!iB[@$rC-FCckHb3EZG3[Y +UGd"L"rNPKaj!A))+358%%9(bFD@ClcH01XD9F816%aV8I*@A29E`e2&q`mMkm"@ +CBe4BZFpS)cX#46S!QbHUAGD&Q!+$#a+3!!Hc2F@ShmYV-UER0crX9iPdaUBUfYR +cjM!!9&N#J$jl)#"J2Y@0ddAaF%Gfa(f#2GYd4bbpUB2*KL&SDBkT%TJ("krC5m$ +EIGKG$!ja,8D["6e61XdHU26Tf+NieT,T6,iiR6k5a,bf2VdrijmU4K,19Z(5['U +(&qZ0HqFN"jD&1fI)'q9aPiJR1V0Q-U%&91e`rNNk8[G2BdIfK6)k2m%NUL&B#F4 +#`([JBeKTcRicl1ELD%D00L[FUfbU2Z*L4)A-%*6F0QXerN9qq-C8+%HJUpF'cAa +lrCZ8aQE#JlIm(9j'SKH[h@(%P)[[qR@(YZ)m',9P@fk5NRKkDfj*3c'MBNM[CDj +'[$IBdT1GkjKRrK-3q2F)G'qAAJYp"d,+K@%RTLJ*c0Appm9SPX8!iq&3h3NKeXc +m,&('A`##(piE!cBK"&51Jh&%Ef%#aJY0KZ'a)#T+Ahje8pVjq($H%r(AY'b3!"' +1QM0[J$Sem96VhGHSC&`Cm`(r8D&Ya!mJhK`,N!!F1"dV!j8-HDElc[m9VZA8+VH +J,BVZ1h-[Uk1S+#5h90LHC5p'Vm&'Y4#0VP@aGV1ETS&'VXk#!6B#D2SLi*bh-'- +6%mrA,hUkc1JH3C-Mk[NbABFVC1Y!&$D&Q*EZZJK`Ja8KJahml(QV5GpeI#ia[G! +b0+bL@)#(XhTU!pl8`ff8-kj'b6b)'C`GJE1$4ZM%rY+%f&Y*2YPkZjm5pAQh@9S +mEeC5YfZlZpp9EG36IG01LA"12*YqTUH49LcaiMNS0B*pZHUS`HL1JqF$8-M"Vlh +45Aa'%B&fd9mb2qM3RJc`lp62j[+C%efdEjGAUUcfie)1UEiYNJ)*ddDLbTFKe[[ +,c*Nj0$DL-&$eiP03pZdpBBLTkJ(6I9fB2fV-$8-F'UTBl1Y,!ScaLfN13`(B["X +kkPp%PJhQRjUl!1UUZU[#V4$-$0L1(ClUl!FQ"Jc$I2mBVdjRi&ZLTp$G*!q3!!Z +QMjbJEV5CGEZ'Jk3pAXS@jGIY5hMk8e1hTi(Qma9843qHNf0C",)PlNS*')4LM*h +YYq6!VqP`N!$4QqE%@FJd,8i9P"T6aa+1jAd6*lP,mq$L"X((L5kGPj%@hF&+2NU +&K'X[X`L&ZU-@m#I6iA9Va8X`9N@*+JAY,@mqef@q5c1L&Tl(eK,a`9-0ELU@%bi +9b`DKVaTm+p(mI+T`KNkMm(d`&B0$@"aep$%jP#bCVXrL@Ke3%*DXYN6(DlM6+d0 +qi0F+'%)62,"$$XfV++JPbeLIN91PG5`lZI6r5kR%(Npj5qFU4E1""P[%eB38L8I +qG1##jrI&3RbX5EKN4KRRqU2Bh"+43TeY(F0TQPM#4TT+40FI[IAfD%D"885RUf9 +Y2ekilBpS#"VbGT5dKIRX`)SN&BjkK`85R-q(-2Ib,DHP,U81QdkTT(6JJq%#C,q +afaB+r3e0IS9(&c62DlQ5NL59dT'qHk9-Th[F28"!2rfDE)P[)QD5N!!#[T`TL4h +Z0iG9llS&!SE@fiL-YkBm*"ZXmicZ%,D@Ii@j+)K,%*XViX-43PU$4mJlKZ0@BkJ +fIYC*CHi-2d'4!e&*,4i,[P"k5[i!EBJ$j&B4&`SQ*b'!0+cj'LE-E&q+[$L!+KC +ff'k)'#3rL[,9+E8c#d[0Z-GJAkdB"H5-fr3(jr@mEmT-JGr#beP@jdAai8`H)Qr +L,5DHXAXbjfi(+rhXH5"Y)%1AMLS92VeUemHMG3BcB$UHl-rXPIpP4[FI1RG%NAr +4LhGA*qmi+!U1*VSF4T82Se3$A+E"j,k2RL&FSQERc'9IGb0)pf%Z0-haF+peXSp +FeQQ6Dh+G6Fm4D+rS2Ic4SGkY6&INj"(1hq'jMqSke)QparmblQ'jPTJFHb+k`6I +eDGl2$rT0S6,-F+5"14maV'E!D[ER#5Pk9jp!%KIkY20-'6aI#0)fY)&klc%F-l4 +105*36bCI3L&l9b[NcBU&qmeQU'&C"ScN)GCG&a&9fM(!GZR'9'QFd`Y$%BG*QTV +ABl'd,mqX)i-+G@[D"+!NH)$*$E$1CGrGN3,APQiQXP(a@3XZ'G0+U*MF[dQh&Rl +[643`d4IcC2)P!RBPLX2QBIdY9hAYmZAFRVqI8jJ@$UJBqc!lrBCmEZUr9cIA@m9 +D,+SCYpT8$!ikZpJ)+m56Sa%382Nd"k'KCCPS!4`F8$iBPjrSl[iDZX+KJZPDB@J +36PRMPFNqA#*TLE&%$j19c,GeiR4-"6X&Fc$FV)B1kfSlCF%eZk3NBECrG)kbeZ` +)Brl#00-$""+6F%9EL*rX%dV"Kd#05+6Z5a%$j[mF(bN9#mFQT$UEkLhUl%p$`"" +GqGD`F[+D,+M48XTKUCEf-j,&`-!&cV41Bj)YJ[IN*8D(V0C@SiUiTZmN[!&4ZV% +4X!LbQQmfR[9YrZN1Hq6@K-%'&X0UiL3hek'V9@6*hS1$N!"@Nj&V9GrGV8mB1@G +Y`IE+d&XF(UrUUMETBY+kXQ,VM%%lC,hpLJDTRf2&H)VS$fEj6DYpFS95!3,3C[j +#Tj9D`X$a"N+rb'G(p,Kjj*j[ZfpY16&JZ[BQ5RkUh5D9FTXiSf`[VN[m)J"@a68 +'E,Qj-IFCk!VVf,a!P0A94N6lf(k'-0'`R6K*DYX`kqfFeGCC064G#QDp9r,aM#5 +kRDG!pe!9HI6mM8D&pame6(dG9GC5L&Ue+[b2D&p$$iYhc@6QLUcN88fU-$80l8D +qBQF"j0jjBdE'2GZiRMLe*+ThC8,K(60CqGdmlXXN(dU*@[$+ZHcZP4MV,6*%`IF +cbq$J13*fFSG[SSjZXNAKfGX2'&`PkKqeZ)4PZc-`HI31RZlXdG(Al6r8+#RF[#B +@C9bNE%BHm1$Gl@%NG,[BbK!"B!jqD4)emKq!11eaS@KadbTG1@!Z!U-p6NUkTbM +)5LUZpK-"S3)1+&e4*TrqI@9RR`Qc3S2h[PHe1IdYhZ"G#`3kUpc!FKDXQbR9"YH +XeIiJk@5q%a$S1MF00&%j3&ID669MSc%LTAN+i($jb4NY2$XZq*!!8QQX3@CGpLj +BLL3JNkrZaNd5#@JDD"bhd5iLVM2fT2V+9+4S%B58Q6`*AG3dfFa'jD*fL$r@*Tc +*GVjP93EA@bqD+RK!K9kkU`2j5AF%KledZ#G#%Y$5LCI,9L%mdLQqF8,ElI%[65D +kSFi2jTU$qDM99Ch1&2GKKAQB64V33cP3*(c8$U%e&,IH*eX2&(6%YP@02SMML)C +qQFSk`-b2dZ%CMaHV-r'UMS0#i8CG1QhLHS5Z#+i%+&f[56LS*+eN&Eb[l4cl*+[ +MJZX28YAA-b!!1(M&M-C!1c"0b+#CA"NV"Er4")ri8()@86ClL@*CG@$bU$IR&6j +SQC401F#iX+(LH9XU@M1L"p0"KX(0G1+ZGPl'XKLR!b,Q"9Z3!0GR$K&e+Ej$EXl +-QCPP8BZrpfSZY3iqjT5-i$6M-9GHDTD+V1r5HIV01'$+8a%I0hfZRc$bq#(k'8( +dXbNIdVYiBCE3UjpkN4S@Vf92CJSbUk(BFK$YPGF2E$II2GE6U4d%L@fCE@6DELd +k&cXI#AqhLj`j1))Lff'8`0rIklXQS4hf[UFCB38HQa,MY(fa$&QY0r[D#2TD9cp +&HecSXm'pj)'Iicj&Gq+'hPCh5C&6XLaTIYiJ*i51(ir0Dh`MLGSR+U+kMcb*qaR +&*TJkR*56hlr2kmP[SRA9AkF0MK*&1f$-HTBLfECbI1bm'LmhX9M#5ic26GF[RQ[ +GLKIAj[c*d(4E$UE0(0*ZqK98h'STH$XAeNUI$MM2TSKTQ,4lL%`P'eDf5qRjFI, +4IeLZV%86L`)%&A%r`jIJTVkPjme+j8T#0K6+%%9N`+b+4TY`'l3IB`BUXSXL8KI +Uq03il@BGZQ'S+,J!LEAHH%"MjRQ3!*!!2"d'"*+f`b-hhideY,Xr(Cm$U9TYr"L +HV82XVAi*VK,'0Z+J3FYbCAFQXeUc`V$($Kd5Y$X`aJEY`-KqUKG9@TEI%b2j+JZ +KJM&FBd**Z!6$i&V"9k%$Q-5e+"d[(j,T1lU50pl6G$3+rYQf$BAbb2-CZXlB)"! +mbmJIHMk8eIcNP8G%GB2-"8f$2V&GmLRR("cQfDV9Bbd1!+Y5qa*V@#c+R(DjcpA +KqLk3!(N##q#Yf$&FT9M-Y8LE2jQFeqc*')XV@[QE@EbMU#i*&6VjjHiH`H(HVYM +1D(FQ5B[AclJH-Lb&94&R$jE*[jA%r8(#)6lK%eK#R+e$mQ'FVk1ih28!QjRXX$h +NXm5kkCDDH,EUrDh5UB1TdrjPbJDBqkDcN`$`%-KJ8-Bmc[`qpPM&Tmba+CYX(&V +"8Y"$d!K&cMhI#'T'e&$'NSce+b%,V)&"3M&-JkBUVNR(dQS0lb8AQr92VaJ%Eqr +P(D8$52hU*SUC!UZ+Y225rVQ)FZbN@kXHdAjFr)M3I4YJ`NCQLE,K(d8&6*FGHJ' +%K,qD%e"5Q%#@c2e[Kk62d(Ar%0+$5rRiCQF2hl9XJNCU*'Nh)AF#A&3-U5daKCA +8mB5"$Pk6b+C($(e2@C1U&J&1`b'-e"e[qfeB4rh)NkHFlj*M+5YlDcr%dLiX9KR +)*8++"YlL#[$GR)8rDHT4H0c%fKqrckM5,iAekG*rB$c*J*5%NpbRKXKBjd#3!0' +ZTlFhc+$K6kXSQZr-QLN5SY$`Ndqj)emA%5N#QZ[,Q*,S%rSYL5EarJHmm`jRM53 +dk2FlA#ir*@A5YjqFAD6VG*)R3HaeZVJe8#",`kE*(E`KdP@j'B+KH4l4B["r"@N +jHBSK!qJM$`PmK54KAcID&4Uc3m4,,h28p&j3GPR)Sd!Mf-Qc8C2[BZNN&fLhiEa +@$Fc*iMZe*T9Yma&`h'E!Z!A+PZJ)Kj!!e@P(LUK%2EEbSfqk)!R5a*NQ8Y-2JdV +Xm9*m15kmQh*jq5b6PLKmSkTHHk"834"'9bPIc4e&HSK"*m6SdD$JIDE!8H0@Ir8 +BTNS[NHGLpUd,NURD%l`1A+B$H15EAT++*8qdLF%@ai!VUE6E&EM5a9H)4V+&8i- +L0@#D8fQ1D20ca@P[rE"ESVYDG%L)ZiF@#%16Bmce@@*Xp'9f-*%"D@#DJp"*iI2 +Kc&)r0lL,"E0V3RaNGZQ03Z0-Q(1Z2H9pi"PMAQiX0pX+YQ6a%U"JVB*&%F+bh&) +Zp+84Sp5K,F$SKHLC2l,c%4c$YZq1-NrbTc'L"Tb4TC+Fk$3JIh"jN!!2FC!!3fA +6-S@)Vl%qq69MMYbpaL*i)1&$aH+jHMUl[#"Jl,rGI020B$IVE+lK(`@+UN$r"ML +PFG'p6%c`N961K$DBj9kpMD"1969@,jaUE999C!QcpE`eK69+fmM0MX#aC@L)Nk@ +`!e'Fk%I0C8MR`&bH#R0M-i!BHdAU12dP"G-*hpDGd6ZS62*bESe@U8c-M28%(SF +iVZ,L5,bdQJNf62CB4#$%-S)fMbTa'BS,)0&Zf&*Gq"BPD#$KU&b4C%+Ac9FJHZa +4d,N0@QJdkfVMBlipj!1BAS)jBKc1kT!!+(iC'#)'1VSPpZ1@rS8iPaZUM$S%YSb ++qhP`jG5I99P`jCc8%k[Q"-3QQNBm+r2+,M@%c4p!bL8lM8jS0EXCH*LK0@fCQr` +@4(*H3cc5mbVU*[YkC@8+h(ZrVJH%Er(!24M('H&@!KIRqJPGC9f#U8Q%fE9[HJ1 +SL`aZrRJUPhr56DYdrF5QGL!-)lj6#3NPi@`X#aU)!ak@pBj26')D,q-*#IDAFfB +k#(k183ELj6j2HArc!SB8c@GM),%JD'BF1Y8)V`,)kEL@a5R1a!-)rE5+6V)rFVm ++(F*YTpF8BYqX`4emPb58ANG)!j!!RFZcXCpBQDTCN!!5)$6+1b&E%8HCQV'5dLK +54il#kUB(@2k8m4q#61&$J[LG@4S9hjFFj",I,IbiX2S'j0#,@eV2q9&B-%6flCD +)Tfjc@E03X8X60a"IGf5Mr3ZaK9,fN9mfc,f*-Eq-d*604i)U"Vk5ci"A6m*CAE5 +X+%1)cN3D$GbElICL0f'&3,I86LEXfre)G"CBr5b-#demkfr"JL0cI,S9'@3dir+ +B)jlNRjfrF*PrIJY2HqK(R,lFB5!8NB+%2,C`Z`NiHqA$AQJ!fD-6E-,ARU4GZcB +i-JlU**@R,40Ii`!qm1-pZH&ZFGACqJbp'Cb%e@GS`lk@0e&@X*cY4fp[&-jY)PA +4TpRL([4+@Q!II`e13rhI'ABf@e%4QlE9q(ZaMpUlGL)1&2!pN[eFd&*&)rVq6@) +cqlEIJYA3iZT%PQ&-(,0dM9ES)m)2KhA*H3,#@r(IZXP9e`*&'*J%9CY%mYUmV`b +DP6@e[U4lLq@`J-pQ59KjKMI38DL'*e%&QPb21pD)#6L1B+0NhqG5"`X)6&Aj-EC +qZTcG)%cPHBd#4*9jpEfUl%KS2&"[PF(0,KmN`"33Cq*KUJ*J)6pLE`p`jRA(l#L +jN3C"1@'2Sh,q*Ll%G,i-h@b5PEVE'm[NHaXfq'NrY35"&K++l3aG+-I6)JR9EZT +A8rpdC%$&d!c&P+fi%BIBqN,5Sk&hU#YjXEE&CV-jE,3aX1l"'*M,M,+-qP`J!ep +h5MUBbmPSm)PT*0(Qf08`8N$XT(Pj4)R"'DS6+cDH0hbR5NQaGC[E'"RaPYQ[T9P +HS4L'!jU&XT3-2*JrrSJe,9Uhi4,+SL4PT44HGH3aaHKGjdPDAD+DYdYQ19A)0G) ++JdqA(E3BR!4[EJQVEZe515kMSR!DEHYbB*QmBQlR"9ab,eYM+c2k)H%6C%K1m5! +MM3rd"eEA+TbEicb8GK[GMRTZDVE$[1$iU2$jElIL1a,8"B%JRR+ZQ3%12P0MEl4 +N2cf4)pElN!"hhdF6)(AjM`ebi-b9(b8&jlka*RqpNr!)erfeIH#3!2+B+Sp[QPV +DFQ!(TK'@$XCRr2K"d`fke'+VGEj)eC1d8$qjZbHF0j,JEd"(f%Tl4aReECp4e9c +0lcV`!pf*Upq0[$8T`$'&iZ!%026Le`*`R0)BbD@V%5#N1Y3+S'lEf5+Cfh8i%(r +8HC'lRHV(Cq+-Rddah),AR2l@Mq3N+iG"GRmAlr#2Z8d20j!!Y'm8m)NiMh,PaE+ +&p,+*%#J%lq5fM3%E#"%ACJ*MV3H403UEf'maHeZp"-*UQX'e2*09qJhRm$p"BKD +%JKJqE3CkQc2$BIRhX'&KAk%3$6L&e0)I!XFNG+lZ2-#`8r!L9RT%fdilRp0R%C! +!DeViA&PP&E%8!A+qr6fVTa)l#ffic%0m5Yj"SaM4N!$*HVQZRKAP$AEB!6H$EF% +DN!!'k!+YPl+@ha!#[1N0@UDB+(@0r46!R+Cfb#FqUkfUUA"!,-TQ(AVdr&4l%j- +kL8@)BRcMXeFdcCq,C[K,Fh#lXfeh"8rqRT1,Fmi$EfCI[P`UK,`H$iIbS8+D[Tl +12LRfBbbmpYNmZST1CbfbR'IDNhZfepFeVh-8K'8lF-1Rk+F(Qfb!5$,)b&NZdJF +YYQEUZT2X2B9[iEENk'5)dbiA1D&CBqFZFEelY-EFPTEdk(kY[36#"K(QK1GX4cf +!LTCQ`NMJhRI&CL+'MYBYiPdc5ec#V5',Y0NrMmB(rci!2&bZrP+ZaX4qPmmcUT- +r2-ZjdJEXX$E1*5$X5RF+&("U#GE)C0*S!Q$1M(JZfQi8C25(K&!D[(LU@4Y$@pA +Q!%`BH#c!QIGkS@e5AIYPbE@J10DlQBRZ)M'#@+FSeSQU9dh-2B6b#9r2YZBQr`I +*YkGBK+1AKIQ&8+A96,B-'9#9![!$NNF%XdI4m#+YhSp$3MpmG-T$'NTZB)'1"rj +e%J4+0ZM6lJ`!VZN8!EJk"3!)j'RR2Mb,&[(58kM&rccRj-hQDMqff0Ib8DY,pk, +1mE9p&I*LC*%'SF"hZA$,Nr2TG*bS)rp4"E'4$#Hc3j!!Xi@+MT%1FjlHfRkE`h! +JE%r*f)VA%0dYXqAYFjqRaF9MqT!!J*2L*4lD!(dFC`XJ5CK`9hE44i8ZMl[)c@h +L+2!A54+4Rc9k$-C-0eY"IS)b!d)MflL$(Vmr%,"$kj)#3lCj5Mbq&+4Qjl(ep8e +r'A#@M9iD#1$0KAFUcEJ90*!!DYJYVH)iF24H4AJk29J4j14+p&G2`rd2r'2r(8B +Qq)+X)VJ('[V@5(KH!HC8D+iV4(mh-pe'6iPFC`!5a0)9qJ$pU%Q1&XJ*,c'&!0H +`A#3P!``m[[VKA(fQKZGllXXS0*d&8c6@`@+0+D3JC[EUPc9"M64DcBa++bNe#S5 +#`XD)I&[Y)"ZDMAhjkUq"J1+qXd1Tq*4AIBC,+"JDY*p2`R-N833ATiZ($QM(V2h +l5iZ@E2kDfbIGkPiXBc4Ird6dEKeAY1(18+p)S1Z+d@%3Y4[Q!!"K)0!QTJTj)XP +#+lLA03P&[Iq"K$j&h!r2lCa9#ja$c&1*![Q'BbQr@V!-0,HZFd[GNibU#a3Va4l +MLIE#L`L0R(BN3NZ-ZJm9Ck9(fDI2SEL9*d)FR-`YS'GprP1j,cT8bkZE)8!CF%# +NRVpi+Ze'S,V-C9Zi(fm+&4r-*"IMCYl4UHBU01UpeD9hr3P1I)SdU3FV0lMf0G" +DkefHDGYKkPbk&),&pp+AESCD56(K8UN$I#N#!8j!IGiiJa"a@RNTU+3bNcrEl+C +Y'1EpS3TGLF&&-E1pfqkrNNCR-1[adlhc-")aSG'H9ENr!("aVQ%Je+B)QheK)&C +eh9E8KeljN!"iDh%lEZcVN!!+Gbb@EMX+I5ePQ4r*Dj!!P',da&aU&qfNQ65hH)b +FYh9YZ`*-RP@q2T+YH,Sc#Lp(kcd2GP@'a!-&Z*&R,$1iI-aj&'T#G!ZBZ'!+I1h +r"MNR0i'erYP-!ZL!!&'q%mf5aCVj$D`,rB$1iA+'eAT$iL-AQI'+R!k[%NR&&hm +`9k""INiB(52e2Ga'*PL'QJpV'dLlKMQYcGS%R)V4)Sp!'ZVc(SmLdPYka6bj@V! +CKkI+J3+bH+Nd9bj$MTpPYK95&BG#01YR5'#fadHdA9aM5$JiB#(1dd+8&1i5JB' +qdCKq"LqjaPR9-d+@"1RDdP[p6Ip`IGi@LMc!4dHCKQ&2Hr`Jdma,FNB#!9ee&$8 +KJlQ`-T9CFkdI16@HTS3@m4-U43#9EDQaXrHe0CbG`1R9lb62hc2*+91`$REDD+2 +r0L&I,VClJjjFR,XN6hmeXUbM'$L5BVZd&pje#QhKeARFLfiLH-b6kia3U'0L@Dk +mQpreVj6*UMfRMZA0`AN[H[c#$0jI26DE4h&E9I@*-#),qVEAfEF(@p#XNk*$ShH +3!)Y%HTcd3+#*p!5TCp#Tk")&4@1Lff,Rp&DNJlMJelhF`H6MG8m-ZQ[m-m$cFDa +Kp'VR'rp8+"K2`!X1LLbmeRhE""0ekeirpDh5K1Em-THjbYkR9ZR'6YBbG%PmFJ% +1b$cjM+NAS'`3j-GSDG8T`fIk)!)l"ZimZfd+TrX#flcN"[+FD-jE9`M+"EpM9Si +2j5-Ljb60IaTmbVX"R1[1Iq(!LCm0B*m3HlE@l@)h(GAhXaTG@qTKaaHG!N3%Vj3 +1*VA"a)I(Q[PTEkdF@D14-pMF[iLTG`0+V"*kYpTZd8+UhZ`)9Rk%lm5e*Sql@a4 +JImU@+#c3&H[2Sq9"2Dlc+,kRU6L'QR,9902U15N`aTPIXQ[4G(f25#,-3cIKa`' +@(dP)KeCE`T!!iJa-6G0GSeJZU8@ZQKZ#59BXQafl1mj1ET8dhd-5!K+,+-jV9i4 +AFX[-iK,-D,#YTL5@1*Yc0&S3I*(5&c!BA2dd9*ZQJ(FSCDL3!&0Fi1RkGXbjj5q +B@`C%(1,aKl)fFCG1Y*VVYM-'5+64h&l46@b+*"Pk4jFp%B!*4KA`iHRDU6bGQCS +)BGN#Nc!k!Y%eiUQXrTIbIS1JQa0[4)P&GH+MZfM,er)E!fY5ZfZ+-cILr"jH[F` +(V`a12fG&)+H$9Q#9cj*UiLfEKfpJ!QHj+hKNe*8b%P'U,+S[l1+8%1$2XP&HY86 +"-8R*83HkdcT,%NK(j0*a`M8i`4Xp&P!Lq,kFc4'h8b5Y@dXG5bVbD5mU4(V)X4) +!K49dQ#pPQMl$RPqRY0fpG,pc'%F3QAb1hY5Ej91VR,ZpYP[6Tc!1fFMXpNRD",[ +lklF,!HIjEJL6"YkqFa2Z9SDZf0efRbDGUML6fX4FdLk4IEpMSAUqDjZlX2YiMIM +a!3EhX4IjrUHhDYiT*i82Im1Q$L6N0%DU(98)CRFckHAr,6q@P8STUEVc11N2'Dl +k9D-G3K'pDd$p+"Vh-rBQ0Y@d#!p'2CXM*ShE+j+@[[$BCYr0lr'bV#B#CFF$Gak +8$&&Qc59ApSUBcMTr$!qiS*Uq1B*FD+Sm4Rr@GMlJBj,ZcZ*T9D6HG%QGK2C,0,b +6r52hb#lZ"Dk5A0!R45DlD%0d%*F19"J1P[RF[#QMG3A*PlYkGkAK&2%9,Uq[kf2 +eGEZHFm9)KQP2+@h9A$S-SP589fQqe8eA1%LEKDG8+APb4-XaGmG+E)5@(P1!qJD +Q4a8eE-A$mD!q-,5daaPClS#P3EYNmK%0p,DJ[SXTl'cI0@DchAkh('!6'`6R[r1 +Eb&qT6YrjNi+)el00'E5pFSGl-,UF(X2ZGYL9!(Yr3e,-M#,aihR[p'6)YKVbXQ@ +2eqShaZ@&G6ea,a(BFDI)m-jl@q+IQ&63"LG#dc#&Qh+Z@c0N)$%hp+QU&dDYVJr +Pa@LbMGEi@h04cP[X*BMJ0h9X+,YFQdSllmGG3PBhLCjaGQRUkMI8Z%Hc)ANk6ZD +m@mR9M-6"QE`KjA&B'JqT$S)FbC3B9MDCXKq!&5J8e+r[ZM,2cS+Ch%[S(3%!6"8 +,l"22[+aePGXQ"Em%BKbK22eB1)MTeN0*`"*mD`p6BXVR5jp4(FYj(&S2j)j6AjM +pF"F%rK"X!5kV'9Bc8&eX$Yqhrhb-450kdSMfX#,`E5KA80$HI2[iKXBKh[dTrcp +pS*V&IGHdEci(6$@iV%h$-BT*TS"!Ej!!aUC9i6a*8hkGjImR81F!-Jq'MK5U(1a +NFl0T-e46b#P--Y)m&HLlq,IMAAUdc$Fl0(R&C3LkSZN,VT@[e$SJh`%d@8r9@XE +Qpj36"YeeUB8,2k+#qkD"I'VQPXY3b24TeY**VYXJd#F@"IpLl&@9lUL'm@6aF$V +mA"[m[Um"jqIAB["F!#DbH`%emh693N3,VQdl%B,G'kLb3i$UXA-aY,ckNB#k%fI +-pS!PjCHDPd$08J*"p@49*BG,)R'Y2501c%bEKUqQ(L,*%$j'eG"#jEVAM$pqS(F +Bc506[L'mPZd,qi&8b,qG+KP$i((*G)Dr"hj(%%)Um`F)p`1@cm"hbCAG2q35VEe +5N9F60"R8EG8k#9-(jI'DPpee)h8e+DPCCIERZIJ,&1aTb,hJbFG,[UIeBp2ZkDj +hacJBQB'm+!e1C#!c&dN[D+P+&aBa2*'ppA+peL,XNPPM5"Q-iTA()5BF-S!8PR& +ea+r@LarmqdJHf"U`6i+%q1"2kLjK%9jkMQ600&CRd6Lj'kAI*Ne)Z-9B$(If(&9 +,k+"l'"PDK4f2Pe%p-ajJ-CFSAMBN1%ArGA-)TbNBX["2rb%a&52Y'ci#)F)rhC6 +20'GH`qa6$`pVe!'863-G,C1M!K05@,6&!0cT$F2qPrE2FNTYj5*X8D'NU6CN[Ia +IU0!LQNd*9(*Ddk192e5kL(qcrELXC2BR-6T$*dll%Ke4*!5)2Yr@PjA!T2%3m`- +#e4Q)Ch@-1b!lDm!l9c%)@mq+%Xi+"SkJIp"AA@mLAN9Gk@rLDhee#8YM"i8Rr@+ +P'e*+*4N!dI,YR,b#j-KSp)E!5eNbd3aU[a&SJJ@@2`li5Y,`0q+&-65J2R'F(QQ +VrbGiGTG%2JU`"M%3ENcG!PK6&5[h`6h2J-E)plZX51ic&1'H'aq'E*IbIqAi@cD +U#[3l38-ZLZQ*1U1ZH-V$#eeJZ%lRcMfK+9SFj[L+#hhrBrleMN)9FCV%2,GeCVH +jpjX&4Y)@6p-1dU"i[pC3UiiR%0YA$'M)FfG&NI"k[Z5l0"3BiJap))UhQ+GrMH# +k852T15iIQFeHFFpMamXHSN0XqVJHLI(fb!cr*Fq&F4p'k$UPPQmH#Z-d!k,(I(' +kaGTKArCNm-Hp`5Q*5JZ9H`@TZG6`'#QUif'"(j%GYXT9C,,-YYrCr,MUbrZaVL3 +U64,9hQXS9"R%M04VPIX2hH9N2F@(1STTj*(HC-[V#!peVD@0$e-ZXAcPI0-$aHa +V["5'GpU,8%$VAN"(R[,H3-6l0krQ+5mhVTV%#+46P1+FrI88lk#"qh4DfX90,d5 +9NT!!aJ5XN!!1Ml3JXBm[[IIVaAbS(C@,EJJ!Qp2$PJ!D@VML(C0EG"mkh'NKlJf +jQeCiSkGkpS(5[+pq"i0rCKZB"L`hE"9('YZ#B89$["N5DHAEfaAP'9G6XddL44& +j$D3I0"4@RqjR68%TqZ$Tdc)$dESHVKCIeh#$4A``ZIlUkPpVra6!cLjNU*pN((G +B-D5B3[ebZ*+b'[#2A,KBQLD(-A[C"ia-L#8DkGrP@S[-F$GBZSeJd9bl'Bf%e-d +jcX1!6GD+NeS'dDmED@0XDlY[qIPYQ"*+!%02LJjliX#6k'43K`bY1bLTY3H8d0l +bZlX54HC*bJ*Se)0""!2J`HhNEpdkI4&fLf[N`UGB#@e0Kf$qZ8V$9!lGNkAcTlc +-rG$[@r'*`r(SZ421i"IK)SdBB(Mql%5Eq@+4#jY"$0fN%CLb!5aMpVZd12LpBVf +E)0N"#R0hfpej#M&A*BHY69%bf1%-M[M3jVP0SrJ1(LB@2p@$VBl!N!$#&-3Z)&$ +(4qiM#fJA#1KLcLqbVTV[dZjc,"Qc6@TNeQ`Q9K&$"rJ9hQV18(QIY"HipN-Nc-P +Y6,HUM++Mi,D+Q"L#JB0I[$j4!aNIPk05eTpUQX40%e86QFjibcN#l$C`CL!Uai@ +!T9&Qi@VLq0*e"YDL8a%C-HGfXPj5pPTffjem2#Q,U))H@$5-CCb"`NXHPjj+U8B +5cj!!)H81'+5$Q*jBjJZ5D0r2,KlDFSLYF-p5re,TbCI`mR%&8Kp6[B&0(`4-jYQ +aL[PS)21L`HUUE-6Q(%jfpUN@f#$@j(AUcTmZjqH,k210k9mYa"+%hp3@,A@P+a6 +A'VI$fj*S6M1HEJAV8%8FL!IL(b8j"4Y&*F"YL4Dl)92#R0"NfJF24$9a8lJ"p'3 +e5"l$EA[86[(LBKr[d!Y$MVLCcq%"lj!!&KKAZQS`jeN"R'KQHM$+f%lCUEYb*51 +l'5YP@i%UEl2"ACS12jIU@QACE)(UXqG6af4X3[lF6P''TEqmA,6"P%DLadKSG`S +@#)Y@60(j83,lJG&U+N1SAeClS[@9,!ZIr'Nr6)-9hZDV!GM9$'6c!K(8%PD2Q4, +*+FS'*R[$[`Lf55`M+L3fifNhHb)CCC3l'ifrpc[UmJj[Z)SE26l9)`Fj88bp0-Y +BNdG-8Ah"9Kbid+0`GY+bU-MqEYDSNpajCPb`F[(c+UDp61+J+MV@5+%hApYR4IJ +U3jh(FASH,UjM*)4XeYpdfN[r-lf%U&D9E'CXSC@rVe1@i9cY`[k("TYC,+Y'jFQ +XR1aE($&dRDJ5)q!I9LJlVl1d8p4H[Yee,bB*6TG(mLU)cFBPKYpf4ppqbZ`A,P( +$h)UE)b"MGm&d$#mBEbPUffA,dIJRV#&`MlM&J8$[BlNN'FEX!MXQ$liYd666Y8" +DNU0`I,(9!Ke9X&Y#ZEB!m&@`S,)&iBe1h5N1"02KYN'k!H55TCDF@1ZVb#BZ@@H +LBH@IK9EcC'2K*Ifi"(#2klH@T2f@bN!6hP@Cp2mfSMAbc,DFX0@p@[*1p@`8pm% +THM`kTc-SFSKSS2`fC4(I1+f(TGYPk*!!MGLTdAIaqjm"E6)$P[HN@k@)#S35p,[ +d0JRV6i"id[0b8iSGABSV%f%SBBqK9G[2&bm!Ya%i[BS#4NhpkFc"HN2$E"M9SYl +phYJp$TPMdah"c(9PLrpX668"&*!!0)r`Bp[ikR&bE6jim$$M&-f+eIh4Ur'CEC( +MP,KMahc8E!CN%2$0K[8l9T-q6Bi%4[KaP%HRAbQ!kjbXlVmQIDAKG4p%P3X*Lf@ +J*q(pA%*VC"&U&0p%di2YrTbGP8C'IBV2-0iR*bjNp2[jQc*PZi"Bb+hC(1E&Tme +ZT1k1J0B*1S4*(bN$e`Ze$)3L9q!4R5),5J[2chYM6LRPpYbI`e,[YYbqf[XIY[, +pZT2lE-rEAq(lDSrESIpE8hlD51%SBq[cR5QN8h1eJKk%4P,%iePk3%9+,'bqIFU +ILP$pU"BTZ5a5I,UK5@1FI412081DeKcfEJ@"R+FL'HqE1AFfZhF"!8ZXBRmET$[ +)(he*$XEEHcZ0i8Baf2lp-CiZYPTA3L2N,0U4HE!DCSkVedS4qPC0#JLdaTrFN!$ +1c"8hc+P9f+aP9X4P9f-AmY#ACQ6XD4d1H#mp6+F@[LEm68BPYVDh%AGX*8I*0eY +0)b`EL4%3RjD"pdiDVQNecjVFhA3fHEEIe@SBFK'XRHSVDGIQCKT8L&5P,DQ@ +@Q@#0i24q#HVa,*ckAXcaeJa3j@'LUQ"IDZ6'A'9T4H@jSqZAi#a6S2I$64*4+eG +C'rIQ5G`HpABdMk[NA",QN!"jH4k(!`d[$5p*MMcJQKb0*"4XD!Se0p5(`"(j@!e +Tf%P2ABYej"S8"cX)bPhe8e5N6Y`"HJ@'lf,'b*'kmlNPV1NH,&)UD8R)FpTU(m! +4)k!(R`21PHM5$VG%)0-+SjcYJd"K#qTk)klcU5F6A'D"pTl5IK1re#q*drh`lYZ +DECIC!#QBK)XVC#Q9jpfi%#4DFIUqV5KGA[k'BE1r50!CY+c5"b,aNLDM4%NJd@k +3!0IrHlqed'b3!&h@j!+qAih+!m1pH`m#kF`4QreM6pFpKC`a@"c+N!#-eD09EUd +N&rFX(Q[FqK5!mCc31pe%k5C$P%Uc(rM#4X3MZ5qjS*!!EG666c"ldbrp6C,%kJJ +!LN4hkVcfHTFK61B-ITY%iG"!SVil)Jffec%ba-TE5@1`YY#JKjB5BKqV4*b3!'q +kV(`FFjF&I#JfFXVI*05*L&lcGI)E$DGAk9mGTA(hrd-`1"[b@6HPL#SS0Jl(IJ" +,,BrNEE*'QAcP(k1fE@AFF5r0-@K-dD,h%jrfaX8U,8Va[e(44bC`eX%NMUJ+Nq8 +)eL5SBZ6SBGadpR"Ibr#mJXb&$j3Q6p&'m$,P69R38c%E1liC"&Xpj$SdGNb(0!V +ibY%U`YpM1+$2h"PYE#!A%Ihl0iTUBBMDiU%Lc),+EFTX1hr!6k,0$&I!8BGMbr" +rF-@k$A&A5mjA*Xqb!@fJ&30U4'aHb4i*ANMV*H3CLmrr6M2U,(pcV-XaP(LSd## +h6#LVFAIaT@G(%hZpB*AeL-ZL2&AYA'XSSR*%4GpkQrFSM6J-XmGKrH"2f$KHYXk +9djaC(b33`EBj*b1Vp@(@[crY'[haY3$a)[jCkXd&3Gca%pI5I2k*I@C@SqXe`'( +i`M)Tr3b[)[TD02#f8#3ZIILbPp!!F@RZ[Dd9V#UVkXT*3LV%aLB-@M16-m!KSU5 +PG!'dAKiFKFCFQ9pH+mm0A[9H[Nced4%bipAQC2KMP&hPa#21$jqTAm-5%YamPNG +3QL'F4p#k@*,Qb$Br,mKi3["QXdRlfiLe(Q*ejQS5[$Cl3N33$j`,*4%&Z!P#i*c +!AFI%`MhfDK6dLSk[*+HRACUMJUqQA(LqH0Q6K)QaJ5N*"mRmJ+C2!p1VhS3#!DA +2F,bI,fPm&[PUcqPBqE3Q,3$[[MXp+2P@YCdJJ,3PSl(c&5K0A"+e"H#jI6I-l&d +2cIU'peGQ2aAZ4GB9pJHR*k-RBBPF4!qkG6lH28C#IMplel#@(Di(K%6IEG4LCDT +$60VjDRE)J%LJpCU)hQaN00dL-Sdk!$Ij)9`b$ZL2j&6X",QLqaKi1-[kPDhjM0j +4ap3X+("9b1)6ZLdE0,b6DlQ)qiRYQ'""FY3ZdbC1k",r#F4%E&`*Za8qN!!h5,' +DfD3+2"Z@)F5UVBM1Mp!2(kCCE`j24JAGR"#r[Cbikd-X'DXl16+Q%rGLI8G2QVN +EFEdTH1JLSB%b#ci)%rKY(+R'#-(NIC!!5%&I&IFD#[jVI3M'+,LLpPi336$S&Lh +5Q#M*aB$rGMfHSd+$l`h9ql",CNp5ZIXI4pi$!10FfZlJmLEI2!fJIImQf%b&,#' +,+RhaZMe3V1+rJDrkZAk8V!MG#6ReX5kb)fYBRSI-$(4402FMqrbM-MB1C-bA5kC +T([`-!(0`qk[PC+KS,iU1eY'!p'8[+faT6QR0@[fDiQrdf+C*&BL1Sk%Yp2$Y9JU +H3`,NN!$FAE[HcQ`mB!mGqPDSK-l)-iFT!MQrc!XIYb%A[Ymfm6SXr3fep9&Y+0U +k%4YfVqA)(pYZ2I"pLm6r4Ql1*&Q4YFPq+r6Epc%cU(-pURHBD0(`H1KEb*%5e@N +Rkka[e*-I%!%K#)iETrE[f'G'i[`(rL'cfY)F5Q#'*dBZG$&%4Y"TC[LQp#ar-N- +Ej,(Ad#KC1T48j3@m@9L,)BfS)-&`GGrT0((X@pqe,j1#JEE+T6&'b$2'+Cdrp2D +`bikZ$!1$pa$e8)fF[3#60D)T%r-+,Tbp9l`c`S29Xk29BCCDe#%83fm@DkK#2Xf +4"86eBN$,B@ZC$qMK5iA'PGmTCBTrQi8bU3l##GDm04B4a6EJ(QF)A41)V-QFa8p +,G(-`6#0$'f-X"bZmJ@8qJc5dTl&&6er-mhUqh#iXD0V&iL0M15+Rk,jN%Va3`Me +"11(pkrXi"+a,(+G4@pbE6S-l(r`MV'*Rk8YJ4U$'5$-E&3",JY0SqiXiTerJ-2k +0cYea,&5S+CD4'S932lKkV,rMI2H1I!4dK-LCQ9cXj-Uj9a[%illD2GmbBLEabV2 +Na9d&+31J'&ZN*["3AiiVEbprS5X"fCkC@lLl2@Jbqf&+MPPXZ'(i4qYc8X`9J5N +M-V1-Qj4fb,#ihRk-@p1kmLbma$Fij2ba*P+"Bpcl(h#lS08V&rDX)1Sqqc+EV'0 +R$X$P+JNlXUj#0TFY'PLh6j(6M`IKMDYc,4'*H[aI*05*-9rJ%aCBY(UqK#R3PZ& +5a%F2KiRZ$AMGXF"%RM-SR1(r9*!!8bp,Q2&`'NN5JJ["(MlMe@(V3l@VHq&ZJ%Y +dY2HT268JfCJZ)jFTkENr58AL1SkHkdrjPP"J'BJ8*)ZKcm9HdE8!(Y$&5I2kD'C +2e`XpDSKVcYm821,T@''b$#SQUU2HrQiDpHIifcfN3T)1&1*cAH8bh([A"2lZq9a +&r4Jf)DDKiiS6Pl3,RfbXS6RA[,LEa(P86cjepII5`)TG5G1`4@'V[0jM3c$*(bK +'*32!@TCmf9RLAf$m[(&pTcX@Eq3'5#jV#DHYbI!KLd32Ke6GGffbLidr6)QLlLR +Pl%R,$r64"Gj3%S-%!P@PJl%*(Y3-PL04pXR&0(,r%)aqX2I+-'8kN!#BbBLR,mF +*SK%ZGh92K#5%PM0BGefXBdqr'%Kq9RDc!P!h+K%h(E@Br"#hTE!HfZ3kMXe-85C +fjDZ25,d'E8YfC[(JTHd!a$m'1keVie8#h[-PmQaahhA$Lq'dmF4dc"erQJS!dQF +CNm4jj'!+%KN@mj`%cCSe55DIr)HFdj(!"@BMpA&UKjD9lML+[X"k0X2r0X[iH5i +KQGiiXZqKp(bKL!2Td"8*FMF6Lf4Bb'6(8%@3!-dj"GS@iYMS2afh#DP)C&ALjTY +*&QMKJPpf$Y,D6&3d+X@S"1ZpIH04BX*6TkM8dE%i(ZJm(MB,8$#($Q(J$1AB85i +LjF4d*2)%@USa25)GMm+k0[fH8F1*U(@iJ4m`C"L2rpN!!!%!!!'C3`!"Q%-!!!! +b!!!!!!!!!!!!(!!b!!"TBfjc!!!!#Vqjrrm!!!!!!!!!!2"3: diff --git a/src/qt/res/icons/pepecoin.icns b/src/qt/res/icons/pepecoin.icns index 11b80b51..3b1ba1b9 100644 Binary files a/src/qt/res/icons/pepecoin.icns and b/src/qt/res/icons/pepecoin.icns differ diff --git a/src/qt/res/icons/pepecoin.ico b/src/qt/res/icons/pepecoin.ico new file mode 100644 index 00000000..4794840c Binary files /dev/null and b/src/qt/res/icons/pepecoin.ico differ diff --git a/src/qt/res/icons/pepecoin2-transparent.png b/src/qt/res/icons/pepecoin2-transparent.png new file mode 100644 index 00000000..42a7edd8 Binary files /dev/null and b/src/qt/res/icons/pepecoin2-transparent.png differ diff --git a/src/qt/res/icons/pepecoin_testnet.png b/src/qt/res/icons/pepecoin_testnet.png new file mode 100644 index 00000000..9624707a Binary files /dev/null and b/src/qt/res/icons/pepecoin_testnet.png differ diff --git a/src/qt/res/icons/qrcode.png b/src/qt/res/icons/qrcode.png index a8d97174..b2e91dfd 100644 Binary files a/src/qt/res/icons/qrcode.png and b/src/qt/res/icons/qrcode.png differ diff --git a/src/qt/res/images/about.png b/src/qt/res/images/about.png index c6c7f8d0..48c0fe00 100644 Binary files a/src/qt/res/images/about.png and b/src/qt/res/images/about.png differ diff --git a/src/qt/res/images/bkg.png b/src/qt/res/images/bkg.png index fe705b17..370b6d30 100644 Binary files a/src/qt/res/images/bkg.png and b/src/qt/res/images/bkg.png differ diff --git a/src/qt/res/images/header.png b/src/qt/res/images/header.png index 27a57eea..2f1833ec 100644 Binary files a/src/qt/res/images/header.png and b/src/qt/res/images/header.png differ diff --git a/src/qt/res/images/splash.png b/src/qt/res/images/splash.png new file mode 100644 index 00000000..643c27d4 Binary files /dev/null and b/src/qt/res/images/splash.png differ diff --git a/src/qt/res/images/splash2.png b/src/qt/res/images/splash2.png deleted file mode 100644 index 27a57eea..00000000 Binary files a/src/qt/res/images/splash2.png and /dev/null differ diff --git a/src/qt/res/images/splash3.png b/src/qt/res/images/splash3.png deleted file mode 100644 index 27a57eea..00000000 Binary files a/src/qt/res/images/splash3.png and /dev/null differ diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index 699be698..425d14b3 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -57,7 +57,7 @@ void RPCExecutor::start() } /** - * Split memetic command line into a list of arguments. Aims to emulate \c bash and friends. + * Split pepecoin command line into a list of arguments. Aims to emulate \c bash and friends. * * - Arguments are delimited with whitespace * - Extra whitespace at the beginning and end and between arguments will be ignored @@ -325,7 +325,7 @@ void RPCConsole::clear() "b { color: #00C0C0; } " ); - message(CMD_REPLY, (tr("Welcome to the Memetic RPC console.") + "
" + + message(CMD_REPLY, (tr("Welcome to the PepeCoin RPC console.") + "
" + tr("Use up and down arrows to navigate history, and Ctrl-L to clear screen.") + "
" + tr("Type help for an overview of available commands.")), true); } diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp index 24d5dae2..3d267ae2 100644 --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -43,7 +43,7 @@ SendCoinsDialog::SendCoinsDialog(QWidget *parent) : #if QT_VERSION >= 0x040700 /* Do not move this to the XML file, Qt before 4.7 will choke on it */ - ui->lineEditCoinControlChange->setPlaceholderText(tr("Enter a Memetic address (e.g. TVzkf3ahXFWhukoqs6wnZHqVFM3UvSDSP2)")); + ui->lineEditCoinControlChange->setPlaceholderText(tr("Enter a PepeCoin address (e.g. TVzkf3ahXFWhukoqs6wnZHqVFM3UvSDSP2)")); #endif addEntry(); @@ -622,7 +622,7 @@ void SendCoinsDialog::processSendCoinsReturn(const WalletModel::SendCoinsReturn msgParams.second = CClientUIInterface::MSG_ERROR; break; case WalletModel::IXTransactionCreationFailed: - msgParams.first = tr("InstantX doesn't support sending values that high yet. Transactions are currently limited to 500 MEME."); + msgParams.first = tr("InstantX doesn't support sending values that high yet. Transactions are currently limited to 500 PEPE."); msgParams.second = CClientUIInterface::MSG_ERROR; break; case WalletModel::TransactionCommitFailed: @@ -855,7 +855,7 @@ void SendCoinsDialog::coinControlChangeEdited(const QString& text) } else if (!addr.IsValid()) // Invalid address { - ui->labelCoinControlChangeLabel->setText(tr("Warning: Invalid Memetic address")); + ui->labelCoinControlChangeLabel->setText(tr("Warning: Invalid PepeCoin address")); } else // Valid address { diff --git a/src/qt/sendcoinsentry.cpp b/src/qt/sendcoinsentry.cpp index c54326b6..b4a05b7a 100644 --- a/src/qt/sendcoinsentry.cpp +++ b/src/qt/sendcoinsentry.cpp @@ -25,7 +25,7 @@ SendCoinsEntry::SendCoinsEntry(QWidget *parent) : #if QT_VERSION >= 0x040700 /* Do not move this to the XML file, Qt before 4.7 will choke on it */ ui->addAsLabel->setPlaceholderText(tr("Enter a label for this address to add it to your address book")); - ui->payTo->setPlaceholderText(tr("Enter a Memetic address (e.g. TVzkf3ahXFWhukoqs6wnZHqVFM3UvSDSP2)")); + ui->payTo->setPlaceholderText(tr("Enter a PepeCoin address (e.g. TVzkf3ahXFWhukoqs6wnZHqVFM3UvSDSP2)")); #endif setFocusPolicy(Qt::TabFocus); setFocusProxy(ui->payTo); diff --git a/src/qt/sendmessagesdialog.cpp b/src/qt/sendmessagesdialog.cpp index cd57bd29..9c75e5a4 100644 --- a/src/qt/sendmessagesdialog.cpp +++ b/src/qt/sendmessagesdialog.cpp @@ -34,7 +34,7 @@ SendMessagesDialog::SendMessagesDialog(Mode mode, Type type, QWidget *parent) : #if QT_VERSION >= 0x040700 /* Do not move this to the XML file, Qt before 4.7 will choke on it */ if(mode == SendMessagesDialog::Encrypted) - ui->addressFrom->setPlaceholderText(tr("Enter a Memetic address (e.g. TVzkf3ahXFWhukoqs6wnZHqVFM3UvSDSP2)")); + ui->addressFrom->setPlaceholderText(tr("Enter a PepeCoin address (e.g. TVzkf3ahXFWhukoqs6wnZHqVFM3UvSDSP2)")); #endif addEntry(); diff --git a/src/qt/sendmessagesentry.cpp b/src/qt/sendmessagesentry.cpp index b26b60b7..b3ed0a82 100644 --- a/src/qt/sendmessagesentry.cpp +++ b/src/qt/sendmessagesentry.cpp @@ -25,7 +25,7 @@ SendMessagesEntry::SendMessagesEntry(QWidget *parent) : #if QT_VERSION >= 0x040700 /* Do not move this to the XML file, Qt before 4.7 will choke on it */ ui->addAsLabel->setPlaceholderText(tr("Enter a label for this address to add it to your address book")); - ui->sendTo->setPlaceholderText(tr("Enter a Memetic address (e.g. TVzkf3ahXFWhukoqs6wnZHqVFM3UvSDSP2)")); + ui->sendTo->setPlaceholderText(tr("Enter a PepeCoin address (e.g. TVzkf3ahXFWhukoqs6wnZHqVFM3UvSDSP2)")); ui->publicKey->setPlaceholderText(tr("Enter the public key for the address above, it is not in the blockchain")); ui->messageText->setErrorText(tr("You cannot send a blank message!")); #endif diff --git a/src/qt/signverifymessagedialog.cpp b/src/qt/signverifymessagedialog.cpp index 107db073..c3724e1e 100644 --- a/src/qt/signverifymessagedialog.cpp +++ b/src/qt/signverifymessagedialog.cpp @@ -24,11 +24,11 @@ SignVerifyMessageDialog::SignVerifyMessageDialog(QWidget *parent) : #if (QT_VERSION >= 0x040700) /* Do not move this to the XML file, Qt before 4.7 will choke on it */ - ui->addressIn_SM->setPlaceholderText(tr("Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i)")); + ui->addressIn_SM->setPlaceholderText(tr("Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i)")); ui->signatureOut_SM->setPlaceholderText(tr("Click \"Sign Message\" to generate signature")); - ui->addressIn_VM->setPlaceholderText(tr("Enter a Memetic address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i)")); - ui->signatureIn_VM->setPlaceholderText(tr("Enter Memetic signature")); + ui->addressIn_VM->setPlaceholderText(tr("Enter a PepeCoin address (e.g. B8gZqgY4r2RoEdqYk3QsAqFckyf9pRHN6i)")); + ui->signatureIn_VM->setPlaceholderText(tr("Enter PepeCoin signature")); #endif GUIUtil::setupAddressWidget(ui->addressIn_SM, this); diff --git a/src/qt/tradingdialog.cpp b/src/qt/tradingdialog.cpp index 862d9791..c372fa0e 100644 --- a/src/qt/tradingdialog.cpp +++ b/src/qt/tradingdialog.cpp @@ -27,6 +27,9 @@ using namespace std; + + + tradingDialog::tradingDialog(QWidget *parent) : QDialog(parent), ui(new Ui::tradingDialog), @@ -57,14 +60,14 @@ tradingDialog::tradingDialog(QWidget *parent) : /*OrderBook Table Init*/ - CreateOrderBookTables(*ui->BidsTable,QStringList() << "SUM(BTC)" << "TOTAL(BTC)" << "MEME(SIZE)" << "BID(BTC)"); - CreateOrderBookTables(*ui->AsksTable,QStringList() << "ASK(BTC)" << "MEME(SIZE)" << "TOTAL(BTC)" << "SUM(BTC)"); + CreateOrderBookTables(*ui->BidsTable,QStringList() << "SUM(BTC)" << "TOTAL(BTC)" << "PEPE(SIZE)" << "BID(BTC)"); + CreateOrderBookTables(*ui->AsksTable,QStringList() << "ASK(BTC)" << "MEME(SIZE)" << "MEME(BTC)" << "SUM(BTC)"); /*OrderBook Table Init*/ /*Market History Table Init*/ ui->MarketHistoryTable->setColumnCount(5); ui->MarketHistoryTable->verticalHeader()->setVisible(false); - ui->MarketHistoryTable->setHorizontalHeaderLabels(QStringList()<<"DATE"<<"BUY/SELL"<<"BID/ASK"<<"TOTAL UNITS(MEME)"<<"TOTAL COST(BTC"); + ui->MarketHistoryTable->setHorizontalHeaderLabels(QStringList()<<"DATE"<<"BUY/SELL"<<"BID/ASK"<<"TOTAL UNITS(PEPE)"<<"TOTAL COST(BTC"); ui->MarketHistoryTable->setRowCount(0); int Cellwidth = ui->MarketHistoryTable->width() / 5; ui->MarketHistoryTable->horizontalHeader()->setResizeMode(QHeaderView::Stretch); @@ -183,7 +186,7 @@ QString tradingDialog::BuyTX(QString OrderType, double Quantity, double Rate){ URL += OrderType; URL += "?apikey="; URL += this->ApiKey; - URL += "&nonce=12345434&market=BTC-MEME&quantity="; + URL += "&nonce=12345434&market=BTC-PEPE&quantity="; URL += str.number(Quantity,'i',8); URL += "&rate="; URL += str.number(Rate,'i',8); @@ -283,7 +286,7 @@ int tradingDialog::SetExchangeInfoTextLabels(){ ui->Bid->setText("Bid: " + str.number(obj["Bid"].toDouble(),'i',8) + " BTC"); - ui->volumet->setText("MEME Volume: " + str.number(obj["Volume"].toDouble(),'i',8) + " MEME"); + ui->volumet->setText("PEPE Volume: " + str.number(obj["Volume"].toDouble(),'i',8) + " PEPE"); ui->volumebtc->setText("BTC Volume: " + str.number(obj["BaseVolume"].toDouble(),'i',8) + " BTC"); @@ -510,11 +513,11 @@ void tradingDialog::ParseAndPopulateOrderBookTables(QString OrderBook){ BuyItteration++; } - ui->TXSupply->setText("Supply: " + str.number(TXSupply,'i',8) + " MEME"); + ui->TXSupply->setText("Supply: " + str.number(TXSupply,'i',8) + " PEPE"); ui->BtcSupply->setText("" + str.number(BtcSupply,'i',8) + " BTC"); ui->AsksCount->setText("Ask's : " + str.number(ui->AsksTable->rowCount()) + ""); - ui->TXDemand->setText("Demand: " + str.number(TXDemand,'i',8) + " MEME"); + ui->TXDemand->setText("Demand: " + str.number(TXDemand,'i',8) + " PEPE"); ui->BtcDemand->setText("" + str.number(BtcDemand,'i',8) + " BTC"); ui->BidsCount->setText("Bid's : " + str.number(ui->BidsTable->rowCount()) + ""); obj.empty(); @@ -914,7 +917,7 @@ void tradingDialog::on_GenDepositBTN_clicked() void tradingDialog::on_Sell_Max_Amount_clicked() { - //calculate amount of BTC that can be gained from selling MEME available balance + //calculate amount of BTC that can be gained from selling PEPE available balance QString responseA = GetBalance("MEME"); QString str; QJsonObject ResultObject = GetResultObjectFromJSONObject(responseA); @@ -1104,7 +1107,7 @@ void tradingDialog::on_BuyTX_clicked() QString Msg = "Are you sure you want to buy "; Msg += ui->UnitsInput->text(); - Msg += "MEME @ "; + Msg += "PEPE @ "; Msg += ui->BuyBidPriceEdit->text(); Msg += " BTC Each"; @@ -1144,7 +1147,7 @@ void tradingDialog::on_SellTXBTN_clicked() QString Msg = "Are you sure you want to Sell "; Msg += ui->UnitsInputTX->text(); - Msg += " MEME @ "; + Msg += " PEPE @ "; Msg += ui->SellBidPriceEdit->text(); Msg += " BTC Each"; @@ -1270,10 +1273,10 @@ void tradingDialog::on_CSUnitsBtn_clicked() if (ResponseObject["success"].toBool() == false){ QMessageBox::information(this,"Failed",ResponseObject["message"].toString()); } else if (ResponseObject["success"].toBool() == true){ - QMessageBox::information(this,"Success","
Cross-Send Successful
\n Sold "+Astr.number(Qty,'i',4)+" MEME for "+Qstr.number((ui->CSUnitsInput->text().toDouble()-0.0002),'i',8)+" BTC"); + QMessageBox::information(this,"Success","
Cross-Send Successful
\n Sold "+Astr.number(Qty,'i',4)+" PEPE for "+Qstr.number((ui->CSUnitsInput->text().toDouble()-0.0002),'i',8)+" BTC"); } } else if (ResponseObject["success"].toBool() == true){ - QMessageBox::information(this,"Success","
Cross-Send Successful
\n Sold "+Astr.number(Qty,'i',4)+" MEME for "+Qstr.number((ui->CSUnitsInput->text().toDouble()-0.0002),'i',8)+" BTC"); + QMessageBox::information(this,"Success","
Cross-Send Successful
\n Sold "+Astr.number(Qty,'i',4)+" PEPE for "+Qstr.number((ui->CSUnitsInput->text().toDouble()-0.0002),'i',8)+" BTC"); } } break; diff --git a/src/qt/transactiondesc.cpp b/src/qt/transactiondesc.cpp index d855cd7d..a9fdb889 100644 --- a/src/qt/transactiondesc.cpp +++ b/src/qt/transactiondesc.cpp @@ -26,54 +26,15 @@ QString TransactionDesc::FormatTxStatus(const CWalletTx& wtx) } else { - int signatures = wtx.GetTransactionLockSignatures(); - QString strUsingIX = ""; - if(signatures >= 0){ - - if(signatures >= INSTANTX_SIGNATURES_REQUIRED){ - int nDepth = wtx.GetDepthInMainChain(); - if (nDepth < 0) - return tr("conflicted"); - else if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0) - return tr("%1/offline (verified via instantx)").arg(nDepth); - else if (nDepth < 10) - return tr("%1/confirmed (verified via instantx)").arg(nDepth); - else - return tr("%1 confirmations (verified via instantx)").arg(nDepth); - } else { - if(!wtx.IsTransactionLockTimedOut()){ - int nDepth = wtx.GetDepthInMainChain(); - if (nDepth < 0) - return tr("conflicted"); - else if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0) - return tr("%1/offline (InstantX verification in progress - %2 of %3 signatures)").arg(nDepth).arg(signatures).arg(INSTANTX_SIGNATURES_TOTAL); - else if (nDepth < 10) - return tr("%1/confirmed (InstantX verification in progress - %2 of %3 signatures )").arg(nDepth).arg(signatures).arg(INSTANTX_SIGNATURES_TOTAL); - else - return tr("%1 confirmations (InstantX verification in progress - %2 of %3 signatures)").arg(nDepth).arg(signatures).arg(INSTANTX_SIGNATURES_TOTAL); - } else { - int nDepth = wtx.GetDepthInMainChain(); - if (nDepth < 0) - return tr("conflicted"); - else if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0) - return tr("%1/offline (InstantX verification failed)").arg(nDepth); - else if (nDepth < 10) - return tr("%1/confirmed (InstantX verification failed)").arg(nDepth); - else - return tr("%1 confirmations").arg(nDepth); - } - } - } else { - int nDepth = wtx.GetDepthInMainChain(); - if (nDepth < 0) - return tr("conflicted"); - else if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0) - return tr("%1/offline").arg(nDepth); - else if (nDepth < 10) - return tr("%1/unconfirmed").arg(nDepth); - else - return tr("%1 confirmations").arg(nDepth); - } + int nDepth = wtx.GetDepthInMainChain(); + if (nDepth < 0) + return tr("conflicted"); + else if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0) + return tr("%1/offline").arg(nDepth); + else if (nDepth < 10) + return tr("%1/unconfirmed").arg(nDepth); + else + return tr("%1 confirmations").arg(nDepth); } } @@ -274,7 +235,7 @@ QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx, TransactionReco if (wtx.IsCoinBase() || wtx.IsCoinStake()) { - strHTML += "
" + tr("Generated coins must mature 80 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to \"not accepted\" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.") + "
"; + strHTML += "
" + tr("Generated coins must mature 60 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to \"not accepted\" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.") + "
"; } diff --git a/src/qt/transactionfilterproxy.cpp b/src/qt/transactionfilterproxy.cpp index 44942af9..efa125b8 100644 --- a/src/qt/transactionfilterproxy.cpp +++ b/src/qt/transactionfilterproxy.cpp @@ -2,6 +2,7 @@ #include "transactiontablemodel.h" #include "transactionrecord.h" +#include "util.h" #include @@ -23,6 +24,7 @@ TransactionFilterProxy::TransactionFilterProxy(QObject *parent) : limitRows(-1), showInactive(true) { + } bool TransactionFilterProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const diff --git a/src/qt/transactionrecord.cpp b/src/qt/transactionrecord.cpp index df366d31..a575d616 100644 --- a/src/qt/transactionrecord.cpp +++ b/src/qt/transactionrecord.cpp @@ -5,6 +5,7 @@ #include "wallet.h" #include "darksend.h" #include "instantx.h" +#include "util.h" #include @@ -20,6 +21,7 @@ bool TransactionRecord::showTransaction(const CWalletTx &wtx) return false; } } + return true; } diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp index 8c238882..954594b8 100644 --- a/src/qt/transactiontablemodel.cpp +++ b/src/qt/transactiontablemodel.cpp @@ -103,7 +103,7 @@ class TransactionTablePriv if(showTransaction && !inModel) status = CT_NEW; /* Not in model, but want to show, treat as new */ if(!showTransaction && inModel) - status = CT_DELETED; /* In model, but want to hide, treat as deleted */ + status = CT_DELETED; /* In model, but want to hide, treat as deleted */ } qDebug() << " inModel=" + QString::number(inModel) + diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp index 69803241..28b56a6d 100644 --- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -283,7 +283,7 @@ WalletModel::SendCoinsReturn WalletModel::prepareTransaction(WalletModelTransact CWalletTx *newTx = transaction.getTransaction(); CReserveKey *keyChange = transaction.getPossibleKeyChange(); - if(recipients[0].useInstantX && total > GetSporkValue(SPORK_5_MAX_VALUE)*COIN){ + if(recipients[0].useInstantX){//} && total > GetSporkValue(SPORK_5_MAX_VALUE)*COIN){ return IXTransactionCreationFailed; } @@ -291,7 +291,7 @@ WalletModel::SendCoinsReturn WalletModel::prepareTransaction(WalletModelTransact bool fCreated = wallet->CreateTransaction(vecSend, *newTx, *keyChange, nFeeRequired, nChangePos, strFailReason, coinControl, recipients[0].inputType, recipients[0].useInstantX); transaction.setTransactionFee(nFeeRequired); - if(recipients[0].useInstantX && newTx->GetValueOut() > GetSporkValue(SPORK_5_MAX_VALUE)*COIN){ + if(recipients[0].useInstantX){//} && newTx->GetValueOut() > GetSporkValue(SPORK_5_MAX_VALUE)*COIN){ return IXTransactionCreationFailed; } @@ -761,7 +761,7 @@ WalletModel::UnlockContext::~UnlockContext() void WalletModel::UnlockContext::CopyFrom(const UnlockContext& rhs) { - // Memetic context; old object no longer relocks wallet + // PepeCoin context; old object no longer relocks wallet *this = rhs; rhs.relock = false; } diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h index 9a7cfbd5..16f98b9a 100644 --- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -174,7 +174,7 @@ class WalletModel : public QObject bool isValid() const { return valid; } - // Copy operator and constructor memetic the context + // Copy operator and constructor pepecoin the context UnlockContext(const UnlockContext& obj) { CopyFrom(obj); } UnlockContext& operator=(const UnlockContext& rhs) { CopyFrom(rhs); return *this; } private: diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 3840a5fd..9d21852c 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -160,6 +160,38 @@ Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool fPri return result; } +Value rebuildaddressindexfrom(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "rebuildaddressindexfrom \n" + "Rebuilds the address index from block to current best block."); + + int nHeight = params[0].get_int(); + if (nHeight < 0 || nHeight > nBestHeight) + throw runtime_error("Block number out of range."); + + RebuildAddressIndexFromHeight(nHeight); + + return true; +} + +Value rebuildaddressindexfor(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "rebuildaddressindexfor \n" + "Rebuilds the address index for block ."); + + int nHeight = params[0].get_int(); + if (nHeight < 0 || nHeight > nBestHeight) + throw runtime_error("Block number out of range."); + + RebuildAddressIndexForBlock(nHeight); + + return true; +} + Value getmessage(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) diff --git a/src/rpcclient.cpp b/src/rpcclient.cpp index 51211165..7e74983a 100644 --- a/src/rpcclient.cpp +++ b/src/rpcclient.cpp @@ -41,7 +41,7 @@ Object CallRPC(const string& strMethod, const Array& params) // Connect to localhost bool fUseSSL = GetBoolArg("-rpcssl", false); asio::io_service io_service; - ssl::context context(io_service, ssl::context::sslv23); + ssl::context context(ssl::context::sslv23); context.set_options(ssl::context::no_sslv2); asio::ssl::stream sslStream(io_service, context); SSLIOStreamDevice d(sslStream, fUseSSL); @@ -161,7 +161,7 @@ static const CRPCConvertParam vRPCConvertParams[] = { "signrawtransaction", 1 }, { "signrawtransaction", 2 }, { "keypoolrefill", 0 }, - { "importprivkey", 2 }, + { "importprivkey", 2 }, { "importaddress", 2 }, { "checkkernel", 0 }, { "checkkernel", 1 }, @@ -169,6 +169,8 @@ static const CRPCConvertParam vRPCConvertParams[] = { "searchrawtransactions", 1 }, { "searchrawtransactions", 2 }, { "searchrawtransactions", 3 }, + { "rebuildaddressindexfor", 0 }, + { "rebuildaddressindexfrom", 0}, }; class CRPCConvertTable diff --git a/src/rpcdarksend.cpp b/src/rpcdarksend.cpp index e1207d40..43fea84d 100644 --- a/src/rpcdarksend.cpp +++ b/src/rpcdarksend.cpp @@ -4,11 +4,11 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "main.h" -#include "core.h" +//#include "primitives/transaction.h" #include "db.h" #include "init.h" +#include "masternode.h" #include "activemasternode.h" -#include "masternodeman.h" #include "masternodeconfig.h" #include "rpcserver.h" #include @@ -20,7 +20,7 @@ using namespace json_spirit; using namespace std; -void SendMoney(const CTxDestination &address, CAmount nValue, CWalletTx& wtxNew, AvailableCoinsType coin_type=ALL_COINS) +void SendMoney(const CTxDestination &address, CAmount nValue, CWalletTx& wtxNew, AvailableCoinsType coin_type) { // Check amount if (nValue <= 0) @@ -37,7 +37,7 @@ void SendMoney(const CTxDestination &address, CAmount nValue, CWalletTx& wtxNew, throw JSONRPCError(RPC_WALLET_ERROR, strError); } - // Parse memetic address + // Parse pepecoin address CScript scriptPubKey = GetScriptForDestination(address); // Create and send the transaction @@ -59,8 +59,8 @@ Value darksend(const Array& params, bool fHelp) { if (fHelp || params.size() == 0) throw runtime_error( - "darksend \n" - "memeticaddress, reset, or auto (AutoDenominate)" + "darksend \n" + "pepecoinaddress, reset, or auto (AutoDenominate)" " is a real and is rounded to the nearest 0.00000001" + HelpRequiringPassphrase()); @@ -71,41 +71,33 @@ Value darksend(const Array& params, bool fHelp) if(fMasterNode) return "DarkSend is not supported from masternodes"; - return "DoAutomaticDenominating " + (darkSendPool.DoAutomaticDenominating() ? "successful" : ("failed: " + darkSendPool.GetStatus())); + darkSendPool.DoAutomaticDenominating(); + return "DoAutomaticDenominating"; } if(params[0].get_str() == "reset"){ - darkSendPool.Reset(); + darkSendPool.SetNull(true); + darkSendPool.UnlockCoins(); return "successfully reset darksend"; } if (params.size() != 2) throw runtime_error( - "darksend \n" - "memeticaddress, denominate, or auto (AutoDenominate)" - " is type \"real\" and will be rounded to the nearest 0.1" + "darksend \n" + "pepecoinaddress, denominate, or auto (AutoDenominate)" + " is a real and is rounded to the nearest 0.00000001" + HelpRequiringPassphrase()); CBitcoinAddress address(params[0].get_str()); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid memetic address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid pepecoin address"); // Amount - CAmount nAmount = AmountFromValue(params[1]); + int64_t nAmount = AmountFromValue(params[1]); // Wallet comments CWalletTx wtx; - std::string sNarr; - if (params.size() > 6 && params[6].type() != null_type && !params[6].get_str().empty()) - sNarr = params[6].get_str(); - - if (sNarr.length() > 24) - throw runtime_error("Narration must be 24 characters or less."); - - //string strError = pwalletMain->SendMoneyToDestination(address.Get(), nAmount, sNarr, wtx, ONLY_DENOMINATED); SendMoney(address.Get(), nAmount, wtx, ONLY_DENOMINATED); - //if (strError != "") - //throw JSONRPCError(RPC_WALLET_ERROR, strError); return wtx.GetHash().GetHex(); } @@ -119,7 +111,7 @@ Value getpoolinfo(const Array& params, bool fHelp) "Returns an object containing anonymous pool-related information."); Object obj; - obj.push_back(Pair("current_masternode", mnodeman.GetCurrentMasterNode()->addr.ToString())); + obj.push_back(Pair("current_masternode", GetCurrentMasterNode())); obj.push_back(Pair("state", darkSendPool.GetState())); obj.push_back(Pair("entries", darkSendPool.GetEntriesCount())); obj.push_back(Pair("entries_accepted", darkSendPool.GetCountEntriesAccepted())); @@ -134,35 +126,10 @@ Value masternode(const Array& params, bool fHelp) strCommand = params[0].get_str(); if (fHelp || - (strCommand != "count" && strCommand != "current" && strCommand != "debug" && strCommand != "genkey" && strCommand != "enforce" && strCommand != "list" && strCommand != "list-conf" - && strCommand != "start" && strCommand != "start-alias" && strCommand != "start-many" && strCommand != "status" && strCommand != "stop" && strCommand != "stop-alias" - && strCommand != "stop-many" && strCommand != "winners" && strCommand != "connect" && strCommand != "outputs" && strCommand != "vote-many" && strCommand != "vote")) + (strCommand != "start" && strCommand != "start-alias" && strCommand != "start-many" && strCommand != "stop" && strCommand != "stop-alias" && strCommand != "stop-many" && strCommand != "list" && strCommand != "list-conf" && strCommand != "count" && strCommand != "enforce" + && strCommand != "debug" && strCommand != "current" && strCommand != "winners" && strCommand != "genkey" && strCommand != "connect" && strCommand != "outputs")) throw runtime_error( - "masternode \"command\"... ( \"passphrase\" )\n" - "Set of commands to execute masternode related actions\n" - "\nArguments:\n" - "1. \"command\" (string or set of strings, required) The command to execute\n" - "2. \"passphrase\" (string, optional) The wallet passphrase\n" - "\nAvailable commands:\n" - " count - Print number of all known masternodes (optional: 'enabled', 'both')\n" - " current - Print info on current masternode winner\n" - " debug - Print masternode status\n" - " genkey - Generate new masternodeprivkey\n" - " enforce - Enforce masternode payments\n" - " list - Print list of all known masternodes (see masternodelist for more info)\n" - " list-conf - Print masternode.conf in JSON format\n" - " outputs - Print masternode compatible outputs\n" - " start - Start masternode configured in memetic.conf\n" - " start-alias - Start single masternode by assigned alias configured in masternode.conf\n" - " start-many - Start all masternodes configured in masternode.conf\n" - " status - Print masternode status information\n" - " stop - Stop masternode configured in memetic.conf\n" - " stop-alias - Stop single masternode by assigned alias configured in masternode.conf\n" - " stop-many - Stop all masternodes configured in masternode.conf\n" - " winners - Print list of masternode winners\n" - " vote-many - Vote on a Memetic initiative\n" - " vote - Vote on a Memetic initiative\n" - ); + "masternode [passphrase]\n"); if (strCommand == "stop") { @@ -186,7 +153,7 @@ Value masternode(const Array& params, bool fHelp) std::string errorMessage; if(!activeMasternode.StopMasterNode(errorMessage)) { - return "stop failed: " + errorMessage; + return "stop failed: " + errorMessage; } pwalletMain->Lock(); @@ -198,133 +165,154 @@ Value masternode(const Array& params, bool fHelp) if (strCommand == "stop-alias") { - if (params.size() < 2){ - throw runtime_error( - "command needs at least 2 parameters\n"); - } - - std::string alias = params[1].get_str().c_str(); - - if(pwalletMain->IsLocked()) { - SecureString strWalletPass; - strWalletPass.reserve(100); - - if (params.size() == 3){ - strWalletPass = params[2].get_str().c_str(); - } else { - throw runtime_error( - "Your wallet is locked, passphrase is required\n"); - } - - if(!pwalletMain->Unlock(strWalletPass)){ - return "incorrect passphrase"; - } + if (params.size() < 2){ + throw runtime_error( + "command needs at least 2 parameters\n"); } - bool found = false; + std::string alias = params[1].get_str().c_str(); - Object statusObj; - statusObj.push_back(Pair("alias", alias)); + if(pwalletMain->IsLocked()) { + SecureString strWalletPass; + strWalletPass.reserve(100); - BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { - if(mne.getAlias() == alias) { - found = true; - std::string errorMessage; - bool result = activeMasternode.StopMasterNode(mne.getIp(), mne.getPrivKey(), errorMessage); + if (params.size() == 3){ + strWalletPass = params[2].get_str().c_str(); + } else { + throw runtime_error( + "Your wallet is locked, passphrase is required\n"); + } - statusObj.push_back(Pair("result", result ? "successful" : "failed")); - if(!result) { - statusObj.push_back(Pair("errorMessage", errorMessage)); - } - break; - } - } + if(!pwalletMain->Unlock(strWalletPass)){ + return "incorrect passphrase"; + } + } + + bool found = false; + + Object statusObj; + statusObj.push_back(Pair("alias", alias)); - if(!found) { - statusObj.push_back(Pair("result", "failed")); - statusObj.push_back(Pair("errorMessage", "could not find alias in config. Verify with list-conf.")); - } + BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { + if(mne.getAlias() == alias) { + found = true; + std::string errorMessage; + bool result = activeMasternode.StopMasterNode(mne.getIp(), mne.getPrivKey(), errorMessage); + + statusObj.push_back(Pair("result", result ? "successful" : "failed")); + if(!result) { + statusObj.push_back(Pair("errorMessage", errorMessage)); + } + break; + } + } + + if(!found) { + statusObj.push_back(Pair("result", "failed")); + statusObj.push_back(Pair("errorMessage", "could not find alias in config. Verify with list-conf.")); + } - pwalletMain->Lock(); - return statusObj; + pwalletMain->Lock(); + return statusObj; } if (strCommand == "stop-many") { - if(pwalletMain->IsLocked()) { - SecureString strWalletPass; - strWalletPass.reserve(100); + if(pwalletMain->IsLocked()) { + SecureString strWalletPass; + strWalletPass.reserve(100); - if (params.size() == 2){ - strWalletPass = params[1].get_str().c_str(); - } else { - throw runtime_error( - "Your wallet is locked, passphrase is required\n"); - } + if (params.size() == 2){ + strWalletPass = params[1].get_str().c_str(); + } else { + throw runtime_error( + "Your wallet is locked, passphrase is required\n"); + } - if(!pwalletMain->Unlock(strWalletPass)){ - return "incorrect passphrase"; - } - } + if(!pwalletMain->Unlock(strWalletPass)){ + return "incorrect passphrase"; + } + } - int total = 0; - int successful = 0; - int fail = 0; + int total = 0; + int successful = 0; + int fail = 0; - Object resultsObj; + Object resultsObj; - BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { - total++; + BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { + total++; - std::string errorMessage; - bool result = activeMasternode.StopMasterNode(mne.getIp(), mne.getPrivKey(), errorMessage); + std::string errorMessage; + bool result = activeMasternode.StopMasterNode(mne.getIp(), mne.getPrivKey(), errorMessage); - Object statusObj; - statusObj.push_back(Pair("alias", mne.getAlias())); - statusObj.push_back(Pair("result", result ? "successful" : "failed")); + Object statusObj; + statusObj.push_back(Pair("alias", mne.getAlias())); + statusObj.push_back(Pair("result", result ? "successful" : "failed")); - if(result) { - successful++; - } else { - fail++; - statusObj.push_back(Pair("errorMessage", errorMessage)); - } + if(result) { + successful++; + } else { + fail++; + statusObj.push_back(Pair("errorMessage", errorMessage)); + } - resultsObj.push_back(Pair("status", statusObj)); - } - pwalletMain->Lock(); + resultsObj.push_back(Pair("status", statusObj)); + } + pwalletMain->Lock(); - Object returnObj; - returnObj.push_back(Pair("overall", "Successfully stopped " + boost::lexical_cast(successful) + " masternodes, failed to stop " + - boost::lexical_cast(fail) + ", total " + boost::lexical_cast(total))); - returnObj.push_back(Pair("detail", resultsObj)); + Object returnObj; + returnObj.push_back(Pair("overall", "Successfully stopped " + boost::lexical_cast(successful) + " masternodes, failed to stop " + + boost::lexical_cast(fail) + ", total " + boost::lexical_cast(total))); + returnObj.push_back(Pair("detail", resultsObj)); - return returnObj; + return returnObj; } if (strCommand == "list") { - Array newParams(params.size() - 1); - std::copy(params.begin() + 1, params.end(), newParams.begin()); - return masternodelist(newParams, fHelp); - } + std::string strCommand = "active"; - if (strCommand == "count") - { - if (params.size() > 2){ + if (params.size() == 2){ + strCommand = params[1].get_str().c_str(); + } + + if (strCommand != "active" && strCommand != "vin" && strCommand != "pubkey" && strCommand != "lastseen" && strCommand != "activeseconds" && strCommand != "rank" && strCommand != "protocol"){ throw runtime_error( - "too many parameters\n"); + "list supports 'active', 'vin', 'pubkey', 'lastseen', 'activeseconds', 'rank', 'protocol'\n"); } - if (params.size() == 2) - { - if(params[1] == "enabled") return mnodeman.CountEnabled(); - if(params[1] == "both") return boost::lexical_cast(mnodeman.CountEnabled()) + " / " + boost::lexical_cast(mnodeman.size()); + Object obj; + BOOST_FOREACH(CMasterNode mn, vecMasternodes) { + mn.Check(); + + if(strCommand == "active"){ + obj.push_back(Pair(mn.addr.ToString().c_str(), (int)mn.IsEnabled())); + } else if (strCommand == "vin") { + obj.push_back(Pair(mn.addr.ToString().c_str(), mn.vin.prevout.hash.ToString().c_str())); + } else if (strCommand == "pubkey") { + CScript pubkey; + pubkey =GetScriptForDestination(mn.pubkey.GetID()); + CTxDestination address1; + ExtractDestination(pubkey, address1); + CBitcoinAddress address2(address1); + + obj.push_back(Pair(mn.addr.ToString().c_str(), address2.ToString().c_str())); + } else if (strCommand == "protocol") { + obj.push_back(Pair(mn.addr.ToString().c_str(), (int64_t)mn.protocolVersion)); + } else if (strCommand == "lastseen") { + obj.push_back(Pair(mn.addr.ToString().c_str(), (int64_t)mn.lastTimeSeen)); + } else if (strCommand == "activeseconds") { + obj.push_back(Pair(mn.addr.ToString().c_str(), (int64_t)(mn.lastTimeSeen - mn.now))); + } else if (strCommand == "rank") { + obj.push_back(Pair(mn.addr.ToString().c_str(), (int)(GetMasternodeRank(mn.vin, pindexBest->nHeight)))); + } } - return mnodeman.size(); + return obj; } + if (strCommand == "count") return (int)vecMasternodes.size(); if (strCommand == "start") { @@ -365,118 +353,112 @@ Value masternode(const Array& params, bool fHelp) if (strCommand == "start-alias") { - if (params.size() < 2){ - throw runtime_error( - "command needs at least 2 parameters\n"); - } - - std::string alias = params[1].get_str().c_str(); - - if(pwalletMain->IsLocked()) { - SecureString strWalletPass; - strWalletPass.reserve(100); - - if (params.size() == 3){ - strWalletPass = params[2].get_str().c_str(); - } else { - throw runtime_error( - "Your wallet is locked, passphrase is required\n"); - } - - if(!pwalletMain->Unlock(strWalletPass)){ - return "incorrect passphrase"; - } + if (params.size() < 2){ + throw runtime_error( + "command needs at least 2 parameters\n"); + } + + std::string alias = params[1].get_str().c_str(); + + if(pwalletMain->IsLocked()) { + SecureString strWalletPass; + strWalletPass.reserve(100); + + if (params.size() == 3){ + strWalletPass = params[2].get_str().c_str(); + } else { + throw runtime_error( + "Your wallet is locked, passphrase is required\n"); + } + + if(!pwalletMain->Unlock(strWalletPass)){ + return "incorrect passphrase"; + } } - bool found = false; + bool found = false; - Object statusObj; - statusObj.push_back(Pair("alias", alias)); + Object statusObj; + statusObj.push_back(Pair("alias", alias)); - BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { - if(mne.getAlias() == alias) { - found = true; - std::string errorMessage; - std::string strDonateAddress = mne.getDonationAddress(); - std::string strDonationPercentage = mne.getDonationPercentage(); + BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { + if(mne.getAlias() == alias) { + found = true; + std::string errorMessage; + bool result = activeMasternode.Register(mne.getIp(), mne.getPrivKey(), mne.getTxHash(), mne.getOutputIndex(), errorMessage); - bool result = activeMasternode.Register(mne.getIp(), mne.getPrivKey(), mne.getTxHash(), mne.getOutputIndex(), strDonateAddress, strDonationPercentage, errorMessage); - statusObj.push_back(Pair("result", result ? "successful" : "failed")); - if(!result) { - statusObj.push_back(Pair("errorMessage", errorMessage)); - } - break; - } - } + if(!result) { + statusObj.push_back(Pair("errorMessage", errorMessage)); + } + break; + } + } - if(!found) { - statusObj.push_back(Pair("result", "failed")); - statusObj.push_back(Pair("errorMessage", "could not find alias in config. Verify with list-conf.")); - } + if(!found) { + statusObj.push_back(Pair("result", "failed")); + statusObj.push_back(Pair("errorMessage", "could not find alias in config. Verify with list-conf.")); + } - pwalletMain->Lock(); - return statusObj; + pwalletMain->Lock(); + return statusObj; } if (strCommand == "start-many") { - if(pwalletMain->IsLocked()) { - SecureString strWalletPass; - strWalletPass.reserve(100); - - if (params.size() == 2){ - strWalletPass = params[1].get_str().c_str(); - } else { - throw runtime_error( - "Your wallet is locked, passphrase is required\n"); - } + if(pwalletMain->IsLocked()) { + SecureString strWalletPass; + strWalletPass.reserve(100); - if(!pwalletMain->Unlock(strWalletPass)){ - return "incorrect passphrase"; - } - } + if (params.size() == 2){ + strWalletPass = params[1].get_str().c_str(); + } else { + throw runtime_error( + "Your wallet is locked, passphrase is required\n"); + } - std::vector mnEntries; - mnEntries = masternodeConfig.getEntries(); + if(!pwalletMain->Unlock(strWalletPass)){ + return "incorrect passphrase"; + } + } - int total = 0; - int successful = 0; - int fail = 0; + std::vector mnEntries; + mnEntries = masternodeConfig.getEntries(); - Object resultsObj; + int total = 0; + int successful = 0; + int fail = 0; - BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { - total++; + Object resultsObj; - std::string errorMessage; - std::string strDonateAddress = mne.getDonationAddress(); - std::string strDonationPercentage = mne.getDonationPercentage(); + BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { + total++; - bool result = activeMasternode.Register(mne.getIp(), mne.getPrivKey(), mne.getTxHash(), mne.getOutputIndex(), strDonateAddress, strDonationPercentage, errorMessage); + std::string errorMessage; + bool result = activeMasternode.Register(mne.getIp(), mne.getPrivKey(), mne.getTxHash(), mne.getOutputIndex(), errorMessage); - Object statusObj; - statusObj.push_back(Pair("alias", mne.getAlias())); - statusObj.push_back(Pair("result", result ? "succesful" : "failed")); + Object statusObj; + statusObj.push_back(Pair("alias", mne.getAlias())); + statusObj.push_back(Pair("result", result ? "succesful" : "failed")); - if(result) { - successful++; - } else { - fail++; - statusObj.push_back(Pair("errorMessage", errorMessage)); - } + if(result) { + successful++; + } else { + fail++; + statusObj.push_back(Pair("errorMessage", errorMessage)); + } - resultsObj.push_back(Pair("status", statusObj)); - } - pwalletMain->Lock(); + resultsObj.push_back(Pair("status", statusObj)); + } + pwalletMain->Lock(); - Object returnObj; - returnObj.push_back(Pair("overall", "Successfully started " + boost::lexical_cast(successful) + " masternodes, failed to start " + - boost::lexical_cast(fail) + ", total " + boost::lexical_cast(total))); - returnObj.push_back(Pair("detail", resultsObj)); + Object returnObj; + returnObj.push_back(Pair("overall", "Successfully started " + boost::lexical_cast(successful) + " masternodes, failed to start " + + boost::lexical_cast(fail) + ", total " + boost::lexical_cast(total))); + returnObj.push_back(Pair("detail", resultsObj)); - return returnObj; + return returnObj; } if (strCommand == "debug") @@ -507,22 +489,9 @@ Value masternode(const Array& params, bool fHelp) if (strCommand == "current") { - CMasternode* winner = mnodeman.GetCurrentMasterNode(1); - if(winner) { - Object obj; - CScript pubkey; - pubkey.SetDestination(winner->pubkey.GetID()); - CTxDestination address1; - ExtractDestination(pubkey, address1); - CBitcoinAddress address2(address1); - - obj.push_back(Pair("IP:port", winner->addr.ToString().c_str())); - obj.push_back(Pair("protocol", (int64_t)winner->protocolVersion)); - obj.push_back(Pair("vin", winner->vin.prevout.hash.ToString().c_str())); - obj.push_back(Pair("pubkey", address2.ToString().c_str())); - obj.push_back(Pair("lastseen", (int64_t)winner->lastTimeSeen)); - obj.push_back(Pair("activeseconds", (int64_t)(winner->lastTimeSeen - winner->sigTime))); - return obj; + int winner = GetCurrentMasterNode(1); + if(winner >= 0) { + return vecMasternodes[winner].addr.ToString().c_str(); } return "unknown"; @@ -539,25 +508,15 @@ Value masternode(const Array& params, bool fHelp) if (strCommand == "winners") { Object obj; - std::string strMode = "addr"; - - if (params.size() >= 1) strMode = params[0].get_str(); for(int nHeight = pindexBest->nHeight-10; nHeight < pindexBest->nHeight+20; nHeight++) { CScript payee; - CTxIn vin; - if(masternodePayments.GetBlockPayee(nHeight, payee, vin)){ + if(masternodePayments.GetBlockPayee(nHeight, payee)){ CTxDestination address1; ExtractDestination(payee, address1); CBitcoinAddress address2(address1); - - if(strMode == "addr") - obj.push_back(Pair(boost::lexical_cast(nHeight), address2.ToString().c_str())); - - if(strMode == "vin") - obj.push_back(Pair(boost::lexical_cast(nHeight), vin.ToString().c_str())); - + obj.push_back(Pair(boost::lexical_cast(nHeight), address2.ToString().c_str())); } else { obj.push_back(Pair(boost::lexical_cast(nHeight), "")); } @@ -592,24 +551,22 @@ Value masternode(const Array& params, bool fHelp) if(strCommand == "list-conf") { - std::vector mnEntries; - mnEntries = masternodeConfig.getEntries(); + std::vector mnEntries; + mnEntries = masternodeConfig.getEntries(); Object resultObj; BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { - Object mnObj; - mnObj.push_back(Pair("alias", mne.getAlias())); - mnObj.push_back(Pair("address", mne.getIp())); - mnObj.push_back(Pair("privateKey", mne.getPrivKey())); - mnObj.push_back(Pair("txHash", mne.getTxHash())); - mnObj.push_back(Pair("outputIndex", mne.getOutputIndex())); - mnObj.push_back(Pair("donationAddress", mne.getDonationAddress())); - mnObj.push_back(Pair("donationPercent", mne.getDonationPercentage())); - resultObj.push_back(Pair("masternode", mnObj)); - } - - return resultObj; + Object mnObj; + mnObj.push_back(Pair("alias", mne.getAlias())); + mnObj.push_back(Pair("address", mne.getIp())); + mnObj.push_back(Pair("privateKey", mne.getPrivKey())); + mnObj.push_back(Pair("txHash", mne.getTxHash())); + mnObj.push_back(Pair("outputIndex", mne.getOutputIndex())); + resultObj.push_back(Pair("masternode", mnObj)); + } + + return resultObj; } if (strCommand == "outputs"){ @@ -625,269 +582,5 @@ Value masternode(const Array& params, bool fHelp) } - if(strCommand == "vote-many") - { - std::vector mnEntries; - mnEntries = masternodeConfig.getEntries(); - - if (params.size() != 2) - throw runtime_error("You can only vote 'yay' or 'nay'"); - - std::string vote = params[1].get_str().c_str(); - if(vote != "yay" && vote != "nay") return "You can only vote 'yay' or 'nay'"; - int nVote = 0; - if(vote == "yay") nVote = 1; - if(vote == "nay") nVote = -1; - - int success = 0; - int failed = 0; - - Object resultObj; - - BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { - std::string errorMessage; - std::vector vchMasterNodeSignature; - std::string strMasterNodeSignMessage; - - CPubKey pubKeyCollateralAddress; - CKey keyCollateralAddress; - CPubKey pubKeyMasternode; - CKey keyMasternode; - - if(!darkSendSigner.SetKey(mne.getPrivKey(), errorMessage, keyMasternode, pubKeyMasternode)){ - printf(" Error upon calling SetKey for %s\n", mne.getAlias().c_str()); - failed++; - continue; - } - - CMasternode* pmn = mnodeman.Find(pubKeyMasternode); - if(pmn == NULL) - { - printf("Can't find masternode by pubkey for %s\n", mne.getAlias().c_str()); - failed++; - continue; - } - - std::string strMessage = pmn->vin.ToString() + boost::lexical_cast(nVote); - - if(!darkSendSigner.SignMessage(strMessage, errorMessage, vchMasterNodeSignature, keyMasternode)){ - printf(" Error upon calling SignMessage for %s\n", mne.getAlias().c_str()); - failed++; - continue; - } - - if(!darkSendSigner.VerifyMessage(pubKeyMasternode, vchMasterNodeSignature, strMessage, errorMessage)){ - printf(" Error upon calling VerifyMessage for %s\n", mne.getAlias().c_str()); - failed++; - continue; - } - - success++; - - //send to all peers - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - pnode->PushMessage("mvote", pmn->vin, vchMasterNodeSignature, nVote); - } - - return("Voted successfully " + boost::lexical_cast(success) + " time(s) and failed " + boost::lexical_cast(failed) + " time(s)."); - } - - if(strCommand == "vote") - { - std::vector mnEntries; - mnEntries = masternodeConfig.getEntries(); - - if (params.size() != 2) - throw runtime_error("You can only vote 'yay' or 'nay'"); - - std::string vote = params[1].get_str().c_str(); - if(vote != "yay" && vote != "nay") return "You can only vote 'yay' or 'nay'"; - int nVote = 0; - if(vote == "yay") nVote = 1; - if(vote == "nay") nVote = -1; - - // Choose coins to use - CPubKey pubKeyCollateralAddress; - CKey keyCollateralAddress; - CPubKey pubKeyMasternode; - CKey keyMasternode; - - std::string errorMessage; - std::vector vchMasterNodeSignature; - std::string strMessage = activeMasternode.vin.ToString() + boost::lexical_cast(nVote); - - if(!darkSendSigner.SetKey(strMasterNodePrivKey, errorMessage, keyMasternode, pubKeyMasternode)) - return(" Error upon calling SetKey"); - - if(!darkSendSigner.SignMessage(strMessage, errorMessage, vchMasterNodeSignature, keyMasternode)) - return(" Error upon calling SignMessage"); - - if(!darkSendSigner.VerifyMessage(pubKeyMasternode, vchMasterNodeSignature, strMessage, errorMessage)) - return(" Error upon calling VerifyMessage"); - - //send to all peers - LOCK(cs_vNodes); - BOOST_FOREACH(CNode* pnode, vNodes) - pnode->PushMessage("mvote", activeMasternode.vin, vchMasterNodeSignature, nVote); - - } - - if(strCommand == "status") - { - std::vector mnEntries; - mnEntries = masternodeConfig.getEntries(); - - CScript pubkey; - pubkey = GetScriptForDestination(activeMasternode.pubKeyMasternode.GetID()); - CTxDestination address1; - ExtractDestination(pubkey, address1); - CBitcoinAddress address2(address1); - - Object mnObj; - mnObj.push_back(Pair("vin", activeMasternode.vin.ToString().c_str())); - mnObj.push_back(Pair("service", activeMasternode.service.ToString().c_str())); - mnObj.push_back(Pair("status", activeMasternode.status)); - mnObj.push_back(Pair("pubKeyMasternode", address2.ToString().c_str())); - mnObj.push_back(Pair("notCapableReason", activeMasternode.notCapableReason.c_str())); - return mnObj; - } - return Value::null; } - -Value masternodelist(const Array& params, bool fHelp) -{ - std::string strMode = "status"; - std::string strFilter = ""; - - if (params.size() >= 1) strMode = params[0].get_str(); - if (params.size() == 2) strFilter = params[1].get_str(); - - if (fHelp || - (strMode != "activeseconds" && strMode != "donation" && strMode != "full" && strMode != "lastseen" && strMode != "protocol" - && strMode != "pubkey" && strMode != "rank" && strMode != "status" && strMode != "addr" && strMode != "votes" && strMode != "lastpaid")) - { - throw runtime_error( - "masternodelist ( \"mode\" \"filter\" )\n" - "Get a list of masternodes in different modes\n" - "\nArguments:\n" - "1. \"mode\" (string, optional/required to use filter, defaults = status) The mode to run list in\n" - "2. \"filter\" (string, optional) Filter results. Partial match by IP by default in all modes, additional matches in some modes\n" - "\nAvailable modes:\n" - " activeseconds - Print number of seconds masternode recognized by the network as enabled\n" - " donation - Show donation settings\n" - " full - Print info in format 'status protocol pubkey vin lastseen activeseconds' (can be additionally filtered, partial match)\n" - " lastseen - Print timestamp of when a masternode was last seen on the network\n" - " protocol - Print protocol of a masternode (can be additionally filtered, exact match)\n" - " pubkey - Print public key associated with a masternode (can be additionally filtered, partial match)\n" - " rank - Print rank of a masternode based on current block\n" - " status - Print masternode status: ENABLED / EXPIRED / VIN_SPENT / REMOVE / POS_ERROR (can be additionally filtered, partial match)\n" - " addr - Print ip address associated with a masternode (can be additionally filtered, partial match)\n" - " votes - Print all masternode votes for a Memetic initiative (can be additionally filtered, partial match)\n" - " lastpaid - The last time a node was paid on the network\n" - ); - } - - Object obj; - if (strMode == "rank") { - std::vector > vMasternodeRanks = mnodeman.GetMasternodeRanks(pindexBest->nHeight); - BOOST_FOREACH(PAIRTYPE(int, CMasternode)& s, vMasternodeRanks) { - std::string strVin = s.second.vin.prevout.ToStringShort(); - if(strFilter !="" && strVin.find(strFilter) == string::npos) continue; - obj.push_back(Pair(strVin, s.first)); - } - } else { - std::vector vMasternodes = mnodeman.GetFullMasternodeVector(); - BOOST_FOREACH(CMasternode& mn, vMasternodes) { - std::string strVin = mn.vin.prevout.ToStringShort(); - if (strMode == "activeseconds") { - if(strFilter !="" && strVin.find(strFilter) == string::npos) continue; - obj.push_back(Pair(strVin, (int64_t)(mn.lastTimeSeen - mn.sigTime))); - } else if (strMode == "donation") { - CTxDestination address1; - ExtractDestination(mn.donationAddress, address1); - CBitcoinAddress address2(address1); - - if(strFilter !="" && address2.ToString().find(strFilter) == string::npos && - strVin.find(strFilter) == string::npos) continue; - - std::string strOut = ""; - - if(mn.donationPercentage != 0){ - strOut = address2.ToString().c_str(); - strOut += ":"; - strOut += boost::lexical_cast(mn.donationPercentage); - } - obj.push_back(Pair(strVin, strOut.c_str())); - } else if (strMode == "full") { - CScript pubkey; - pubkey.SetDestination(mn.pubkey.GetID()); - CTxDestination address1; - ExtractDestination(pubkey, address1); - CBitcoinAddress address2(address1); - - std::ostringstream addrStream; - addrStream << setw(21) << strVin; - - std::ostringstream stringStream; - stringStream << setw(10) << - mn.Status() << " " << - mn.protocolVersion << " " << - address2.ToString() << " " << - mn.addr.ToString() << " " << - mn.lastTimeSeen << " " << setw(8) << - (mn.lastTimeSeen - mn.sigTime) << " " << - mn.nLastPaid; - std::string output = stringStream.str(); - stringStream << " " << strVin; - if(strFilter !="" && stringStream.str().find(strFilter) == string::npos && - strVin.find(strFilter) == string::npos) continue; - obj.push_back(Pair(addrStream.str(), output)); - } else if (strMode == "lastseen") { - if(strFilter !="" && strVin.find(strFilter) == string::npos) continue; - obj.push_back(Pair(strVin, (int64_t)mn.lastTimeSeen)); - } else if (strMode == "protocol") { - if(strFilter !="" && strFilter != boost::lexical_cast(mn.protocolVersion) && - strVin.find(strFilter) == string::npos) continue; - obj.push_back(Pair(strVin, (int64_t)mn.protocolVersion)); - } else if (strMode == "pubkey") { - CScript pubkey; - pubkey.SetDestination(mn.pubkey.GetID()); - CTxDestination address1; - ExtractDestination(pubkey, address1); - CBitcoinAddress address2(address1); - - if(strFilter !="" && address2.ToString().find(strFilter) == string::npos && - strVin.find(strFilter) == string::npos) continue; - obj.push_back(Pair(strVin, address2.ToString().c_str())); - } else if(strMode == "status") { - std::string strStatus = mn.Status(); - if(strFilter !="" && strVin.find(strFilter) == string::npos && strStatus.find(strFilter) == string::npos) continue; - obj.push_back(Pair(strVin, strStatus.c_str())); - } else if (strMode == "addr") { - if(strFilter !="" && mn.vin.prevout.hash.ToString().find(strFilter) == string::npos && - strVin.find(strFilter) == string::npos) continue; - obj.push_back(Pair(strVin, mn.addr.ToString().c_str())); - } else if(strMode == "votes"){ - std::string strStatus = "ABSTAIN"; - - //voting lasts 30 days, ignore the last vote if it was older than that - if((GetAdjustedTime() - mn.lastVote) < (60*60*30*24)) - { - if(mn.nVote == -1) strStatus = "NAY"; - if(mn.nVote == 1) strStatus = "YAY"; - } - - if(strFilter !="" && (strVin.find(strFilter) == string::npos && strStatus.find(strFilter) == string::npos)) continue; - obj.push_back(Pair(strVin, strStatus.c_str())); - } else if(strMode == "lastpaid"){ - if(strFilter !="" && mn.vin.prevout.hash.ToString().find(strFilter) == string::npos && - strVin.find(strFilter) == string::npos) continue; - obj.push_back(Pair(strVin, (int64_t)mn.nLastPaid)); - } - } - } - return obj; - -} diff --git a/src/rpcdump.cpp b/src/rpcdump.cpp index 338a947e..a0ee07d2 100644 --- a/src/rpcdump.cpp +++ b/src/rpcdump.cpp @@ -107,7 +107,7 @@ Value importprivkey(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 3) throw runtime_error( - "importprivkey [label] [rescan=true]\n" + "importprivkey [label] [rescan=true]\n" "Adds a private key (as returned by dumpprivkey) to your wallet."); string strSecret = params[0].get_str(); @@ -187,7 +187,7 @@ Value importaddress(const Array& params, bool fHelp) std::vector data(ParseHex(params[0].get_str())); script = CScript(data.begin(), data.end()); } else { - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Memetic address or script"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid PepeCoin address or script"); } string strLabel = ""; @@ -319,15 +319,15 @@ Value dumpprivkey(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "dumpprivkey \n" - "Reveals the private key corresponding to ."); + "dumpprivkey \n" + "Reveals the private key corresponding to ."); EnsureWalletIsUnlocked(); string strAddress = params[0].get_str(); CBitcoinAddress address; if (!address.SetString(strAddress)) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Memetic address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid PepeCoin address"); if (fWalletUnlockStakingOnly) throw JSONRPCError(RPC_WALLET_UNLOCK_NEEDED, "Wallet is unlocked for staking only."); CKeyID keyID; @@ -339,6 +339,47 @@ Value dumpprivkey(const Array& params, bool fHelp) return CBitcoinSecret(vchSecret).ToString(); } +Value dumpkekdaqprivkey(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "dumpkekdaqprivkey \n" + "Reveals the kekdaq format private key corresponding to ."); + + EnsureWalletIsUnlocked(); + + string strAddress = params[0].get_str(); + CBitcoinAddress address; + if (!address.SetString(strAddress)) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid PepeCoin address"); + if (fWalletUnlockStakingOnly) + throw JSONRPCError(RPC_WALLET_UNLOCK_NEEDED, "Wallet is unlocked for staking only."); + CKeyID keyID; + if (!address.GetKeyID(keyID)) + throw JSONRPCError(RPC_TYPE_ERROR, "Address does not refer to a key"); + CKey vchSecret; + if (!pwalletMain->GetKey(keyID, vchSecret)) + throw JSONRPCError(RPC_WALLET_ERROR, "Private key for address " + strAddress + " is not known"); + return CBitcoinSecret(vchSecret).ToKekdaqString(); +} + +Value checkprivkey(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 1) + throw runtime_error( + "checkprivkey \n" + "Check a private key for validity."); + + string strSecret = params[0].get_str(); + + CBitcoinSecret vchSecret; + bool fGood = vchSecret.SetString(strSecret); + + if (!fGood) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid private key"); + + return Value::null; +} + Value dumpwallet(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) @@ -370,7 +411,7 @@ Value dumpwallet(const Array& params, bool fHelp) std::sort(vKeyBirth.begin(), vKeyBirth.end()); // produce output - file << strprintf("# Wallet dump created by Memetic %s (%s)\n", CLIENT_BUILD, CLIENT_DATE); + file << strprintf("# Wallet dump created by PepeCoin %s (%s)\n", CLIENT_BUILD, CLIENT_DATE); file << strprintf("# * Created on %s\n", EncodeDumpTime(GetTime())); file << strprintf("# * Best block at time of backup was %i (%s),\n", nBestHeight, hashBestChain.ToString()); file << strprintf("# mined on %s\n", EncodeDumpTime(pindexBest->nTime)); diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index ad2cb713..c99dc755 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -11,6 +11,10 @@ #include "init.h" #include "miner.h" #include "kernel.h" +#include "masternode.h" +#include "base58.h" +#include "wallet.h" +#include "txdb.h" #include @@ -124,8 +128,8 @@ Value getstakinginfo(const Array& params, bool fHelp) "getstakinginfo\n" "Returns an object containing staking-related information."); - uint64_t nWeight = 0; - uint64_t nExpectedTime = 0; + CAmount nWeight = 0; + CAmount nExpectedTime = 0; if (pwalletMain) nWeight = pwalletMain->GetStakeWeight(); @@ -141,6 +145,27 @@ Value getstakinginfo(const Array& params, bool fHelp) nExpectedTime = staking ? (TARGET_SPACING * nNetworkWeight / nWeight) : 0; + // get number of inputs and average input size + uint64_t nInputCount = 0; + CAmount nTotalInputAmount = 0; + CAmount nAverageInputSize = 0; + + vector vCoins; + pwalletMain->AvailableCoinsForStaking(vCoins, pindexBest->GetBlockTime()+1); + BOOST_FOREACH(COutput output, vCoins) + { + if(!output.fSpendable) + continue; + + const CWalletTx *pcoin = output.tx; + int i = output.i; + int64_t n = pcoin->vout[i].nValue; + + nInputCount++; + nTotalInputAmount += n; + } + + nAverageInputSize = nInputCount > 0 ? nTotalInputAmount / nInputCount : 0; Object obj; @@ -155,11 +180,15 @@ Value getstakinginfo(const Array& params, bool fHelp) obj.push_back(Pair("difficulty", GetDifficulty(GetLastBlockIndex(pindexBest, true)))); obj.push_back(Pair("search-interval", (int)nLastCoinStakeSearchInterval)); - obj.push_back(Pair("weight", (uint64_t)nWeight)); - obj.push_back(Pair("netstakeweight", (uint64_t)nNetworkWeight)); + obj.push_back(Pair("weight", ValueFromAmount(nWeight))); + obj.push_back(Pair("netstakeweight", ValueFromAmount(nNetworkWeight))); obj.push_back(Pair("expectedtime", nExpectedTime)); + obj.push_back(Pair("availableinputcount", nInputCount)); + obj.push_back(Pair("availableinputtotalamount", ValueFromAmount(nTotalInputAmount))); + obj.push_back(Pair("availableinputaveragesize", ValueFromAmount(nAverageInputSize))); + return obj; } @@ -177,10 +206,10 @@ Value checkkernel(const Array& params, bool fHelp) bool fCreateBlockTemplate = params.size() > 1 ? params[1].get_bool() : false; if (vNodes.empty()) - throw JSONRPCError(-9, "Memetic is not connected!"); + throw JSONRPCError(-9, "PepeCoin is not connected!"); if (IsInitialBlockDownload()) - throw JSONRPCError(-10, "Memetic is downloading blocks..."); + throw JSONRPCError(-10, "PepeCoin is downloading blocks..."); COutPoint kernel; CBlockIndex* pindexPrev = pindexBest; @@ -258,12 +287,13 @@ Value getworkex(const Array& params, bool fHelp) ); if (vNodes.empty()) - throw JSONRPCError(-9, "Memetic is not connected!"); + throw JSONRPCError(-9, "PepeCoin is not connected!"); if (IsInitialBlockDownload()) - throw JSONRPCError(-10, "Memetic is downloading blocks..."); + throw JSONRPCError(-10, "PepeCoin is downloading blocks..."); - if (pindexBest->nHeight >= Params().LastPOWBlock() && pindexBest->nHeight < Params().RestartPOWBlock()) + if (pindexBest->nHeight >= Params().LastPOWBlock() && + (pindexBest->nHeight < Params().RestartPOWBlock() || pindexBest->nHeight >= PEPE_STAKEONLY_HEIGHT)) throw JSONRPCError(RPC_MISC_ERROR, "No more PoW blocks"); typedef map > mapNewBlock_t; @@ -392,12 +422,13 @@ Value getwork(const Array& params, bool fHelp) "If [data] is specified, tries to solve the block and returns true if it was successful."); if (vNodes.empty()) - throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, "Memetic is not connected!"); + throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, "PepeCoin is not connected!"); if (IsInitialBlockDownload()) - throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "Memetic is downloading blocks..."); + throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "PepeCoin is downloading blocks..."); - if (pindexBest->nHeight >= Params().LastPOWBlock() && pindexBest->nHeight < Params().RestartPOWBlock()) + if (pindexBest->nHeight >= Params().LastPOWBlock() && + (pindexBest->nHeight < Params().RestartPOWBlock() || pindexBest->nHeight >= PEPE_STAKEONLY_HEIGHT)) throw JSONRPCError(RPC_MISC_ERROR, "No more PoW blocks"); typedef map > mapNewBlock_t; @@ -544,12 +575,13 @@ Value getblocktemplate(const Array& params, bool fHelp) throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid mode"); if (vNodes.empty()) - throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, "Memetic is not connected!"); + throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, "PepeCoin is not connected!"); //if (IsInitialBlockDownload()) - // throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "Memetic is downloading blocks..."); + // throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "PepeCoin is downloading blocks..."); - if (pindexBest->nHeight >= Params().LastPOWBlock() && pindexBest->nHeight < Params().RestartPOWBlock()) + if (pindexBest->nHeight >= Params().LastPOWBlock() && + (pindexBest->nHeight < Params().RestartPOWBlock() || pindexBest->nHeight >= PEPE_STAKEONLY_HEIGHT)) throw JSONRPCError(RPC_MISC_ERROR, "No more PoW blocks"); // Update block @@ -658,6 +690,27 @@ Value getblocktemplate(const Array& params, bool fHelp) result.push_back(Pair("bits", strprintf("%08x", pblock->nBits))); result.push_back(Pair("height", (int64_t)(pindexPrev->nHeight+1))); + CScript payee; + int winningNode = GetCurrentMasterNode(1); + if(winningNode >= 0){ + payee =GetScriptForDestination(vecMasternodes[winningNode].pubkey.GetID()); + } else { + LogPrintf("GetBlockTemplate: Failed to detect masternode to pay\n"); + // pay the burn address if it can't detect + std::string burnAddy = "PKekDaqXXXXXXXXXXXXXXXXXXXXXWH8yfH"; + CBitcoinAddress burnAddr; + burnAddr.SetString(burnAddy); + payee = GetScriptForDestination(burnAddr.Get()); + } + + CTxDestination address1; + ExtractDestination(payee, address1); + CBitcoinAddress address2(address1); + result.push_back(Pair("payee", address2.ToString().c_str())); + result.push_back(Pair("payee_amount", (int64_t)(pblock->vtx[0].vout[0].nValue * 0.375))); + result.push_back(Pair("masternode_payments_started", pindexPrev->nHeight + 1 > PEPE_KEKDAQ_MID_HEIGHT)); + result.push_back(Pair("enforce_masternode_payments", pindexPrev->nHeight + 1 > PEPE_KEKDAQ_MID_HEIGHT)); + return result; } diff --git a/src/rpcmisc.cpp b/src/rpcmisc.cpp index 22b20da0..fe04e0bc 100644 --- a/src/rpcmisc.cpp +++ b/src/rpcmisc.cpp @@ -50,6 +50,7 @@ Value getinfo(const Array& params, bool fHelp) obj.push_back(Pair("smugsend_balance", ValueFromAmount(pwalletMain->GetAnonymizedBalance()))); obj.push_back(Pair("newmint", ValueFromAmount(pwalletMain->GetNewMint()))); obj.push_back(Pair("stake", ValueFromAmount(pwalletMain->GetStake()))); + obj.push_back(Pair("total", ValueFromAmount(pwalletMain->GetBalance()+pwalletMain->GetNewMint()+pwalletMain->GetStake()))); } #endif obj.push_back(Pair("blocks", (int)nBestHeight)); @@ -137,8 +138,8 @@ Value validateaddress(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "validateaddress \n" - "Return information about ."); + "validateaddress \n" + "Return information about ."); CBitcoinAddress address(params[0].get_str()); bool isValid = address.IsValid(); @@ -169,8 +170,8 @@ Value validatepubkey(const Array& params, bool fHelp) { if (fHelp || !params.size() || params.size() > 2) throw runtime_error( - "validatepubkey \n" - "Return information about ."); + "validatepubkey \n" + "Return information about ."); std::vector vchPubKey = ParseHex(params[0].get_str()); CPubKey pubKey(vchPubKey); @@ -209,7 +210,7 @@ Value verifymessage(const Array& params, bool fHelp) { if (fHelp || params.size() != 3) throw runtime_error( - "verifymessage \n" + "verifymessage \n" "Verify a signed message"); string strAddress = params[0].get_str(); diff --git a/src/rpcprotocol.cpp b/src/rpcprotocol.cpp index e5e43e2e..a25c4740 100644 --- a/src/rpcprotocol.cpp +++ b/src/rpcprotocol.cpp @@ -40,7 +40,7 @@ string HTTPPost(const string& strMsg, const map& mapRequestHeader { ostringstream s; s << "POST / HTTP/1.1\r\n" - << "User-Agent: memetic-json-rpc/" << FormatFullVersion() << "\r\n" + << "User-Agent: pepecoin-json-rpc/" << FormatFullVersion() << "\r\n" << "Host: 127.0.0.1\r\n" << "Content-Type: application/json\r\n" << "Content-Length: " << strMsg.size() << "\r\n" @@ -63,7 +63,7 @@ string HTTPReply(int nStatus, const string& strMsg, bool keepalive) if (nStatus == HTTP_UNAUTHORIZED) return strprintf("HTTP/1.0 401 Authorization Required\r\n" "Date: %s\r\n" - "Server: memetic-json-rpc/%s\r\n" + "Server: pepecoin-json-rpc/%s\r\n" "WWW-Authenticate: Basic realm=\"jsonrpc\"\r\n" "Content-Type: text/html\r\n" "Content-Length: 296\r\n" @@ -90,7 +90,7 @@ string HTTPReply(int nStatus, const string& strMsg, bool keepalive) "Connection: %s\r\n" "Content-Length: %u\r\n" "Content-Type: application/json\r\n" - "Server: memetic-json-rpc/%s\r\n" + "Server: pepecoin-json-rpc/%s\r\n" "\r\n" "%s", nStatus, diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp index 166e7964..2451516c 100644 --- a/src/rpcrawtransaction.cpp +++ b/src/rpcrawtransaction.cpp @@ -154,7 +154,11 @@ Value listunspent(const Array& params, bool fHelp) RPCTypeCheck(params, list_of(int_type)(int_type)(array_type)); - int nMinDepth = 1; + int nMismatchSpent; + int64_t nBalanceInQuestion; + pwalletMain->FixSpentCoins(nMismatchSpent, nBalanceInQuestion); + + int nMinDepth = 6; // 6 confirmations if (params.size() > 0) nMinDepth = params[0].get_int(); @@ -170,7 +174,7 @@ Value listunspent(const Array& params, bool fHelp) { CBitcoinAddress address(input.get_str()); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid Memetic address: ")+input.get_str()); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid PepeCoin address: ")+input.get_str()); if (setAddress.count(address)) throw JSONRPCError(RPC_INVALID_PARAMETER, string("Invalid parameter, duplicated address: ")+input.get_str()); setAddress.insert(address); @@ -180,7 +184,7 @@ Value listunspent(const Array& params, bool fHelp) Array results; vector vecOutputs; assert(pwalletMain != NULL); - pwalletMain->AvailableCoins(vecOutputs, false); + pwalletMain->AvailableCoins(vecOutputs, true); // only confirmed coins BOOST_FOREACH(const COutput& out, vecOutputs) { if (out.nDepth < nMinDepth || out.nDepth > nMaxDepth) @@ -223,7 +227,8 @@ Value listunspent(const Array& params, bool fHelp) entry.push_back(Pair("amount",ValueFromAmount(nValue))); entry.push_back(Pair("confirmations",out.nDepth)); entry.push_back(Pair("spendable", out.fSpendable)); - results.push_back(entry); + if(out.fSpendable) + results.push_back(entry); } return results; @@ -276,7 +281,7 @@ Value createrawtransaction(const Array& params, bool fHelp) { CBitcoinAddress address(s.name_); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid Memetic address: ")+s.name_); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid PepeCoin address: ")+s.name_); if (setAddress.count(address)) throw JSONRPCError(RPC_INVALID_PARAMETER, string("Invalid parameter, duplicated address: ")+s.name_); diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index e16f0c72..21c50e09 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -203,10 +203,10 @@ Value stop(const Array& params, bool fHelp) if (fHelp || params.size() > 1) throw runtime_error( "stop\n" - "Stop Memetic server."); + "Stop PepeCoin server."); // Shutdown will take long enough that the response should get back StartShutdown(); - return "Memetic server stopping"; + return "PepeCoin server stopping"; } @@ -247,11 +247,12 @@ static const CRPCCommand vRPCCommands[] = { "validatepubkey", &validatepubkey, true, false, false }, { "verifymessage", &verifymessage, false, false, false }, { "searchrawtransactions", &searchrawtransactions, false, false, false }, + { "rebuildaddressindexfrom", &rebuildaddressindexfrom, false, false, false }, + { "rebuildaddressindexfor", &rebuildaddressindexfor, false, false, false }, /* Dark features */ { "spork", &spork, true, false, false }, { "masternode", &masternode, true, false, true }, - { "masternodelist", &masternodelist, true, false, false }, { "getmessage", &getmessage, true, false, false}, { "getmessages", &getmessages, true, false, false}, @@ -295,6 +296,8 @@ static const CRPCCommand vRPCCommands[] = { "submitblock", &submitblock, false, false, false }, { "listsinceblock", &listsinceblock, false, false, true }, { "dumpprivkey", &dumpprivkey, false, false, true }, + { "dumpkekdaqprivkey", &dumpkekdaqprivkey, false, false, true }, + { "checkprivkey", &checkprivkey, false, false, true }, { "dumpwallet", &dumpwallet, true, false, true }, { "importprivkey", &importprivkey, false, false, true }, { "importwallet", &importwallet, false, false, true }, @@ -447,8 +450,8 @@ class AcceptedConnectionImpl : public AcceptedConnection void ServiceConnection(AcceptedConnection *conn); // Forward declaration required for RPCListen -template -static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor > acceptor, +template +static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor > acceptor, ssl::context& context, bool fUseSSL, AcceptedConnection* conn, @@ -457,8 +460,8 @@ static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor -static void RPCListen(boost::shared_ptr< basic_socket_acceptor > acceptor, +template +static void RPCListen(boost::shared_ptr< basic_socket_acceptor > acceptor, ssl::context& context, const bool fUseSSL) { @@ -468,7 +471,7 @@ static void RPCListen(boost::shared_ptr< basic_socket_acceptorasync_accept( conn->sslStream.lowest_layer(), conn->peer, - boost::bind(&RPCAcceptHandler, + boost::bind(&RPCAcceptHandler, acceptor, boost::ref(context), fUseSSL, @@ -480,8 +483,8 @@ static void RPCListen(boost::shared_ptr< basic_socket_acceptor -static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor > acceptor, +template +static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor > acceptor, ssl::context& context, const bool fUseSSL, AcceptedConnection* conn, @@ -524,7 +527,7 @@ void StartRPCThreads() { unsigned char rand_pwd[32]; GetRandBytes(rand_pwd, 32); - string strWhatAmI = "To use memeticd"; + string strWhatAmI = "To use pepecoind"; if (mapArgs.count("-server")) strWhatAmI = strprintf(_("To use the %s option"), "\"-server\""); else if (mapArgs.count("-daemon")) @@ -533,13 +536,13 @@ void StartRPCThreads() _("%s, you must set a rpcpassword in the configuration file:\n" "%s\n" "It is recommended you use the following random password:\n" - "rpcuser=memeticrpc\n" + "rpcuser=pepecoinrpc\n" "rpcpassword=%s\n" "(you do not need to remember this password)\n" "The username and password MUST NOT be the same.\n" "If the file does not exist, create it with owner-readable-only file permissions.\n" "It is also recommended to set alertnotify so you are notified of problems;\n" - "for example: alertnotify=echo %%s | mail -s \"Memetic Alert\" admin@foo.com\n"), + "for example: alertnotify=echo %%s | mail -s \"PepeCoin Alert\" admin@foo.com\n"), strWhatAmI, GetConfigFile().string(), EncodeBase58(&rand_pwd[0],&rand_pwd[0]+32)), @@ -550,7 +553,7 @@ void StartRPCThreads() assert(rpc_io_service == NULL); rpc_io_service = new asio::io_service(); - rpc_ssl_context = new ssl::context(*rpc_io_service, ssl::context::sslv23); + rpc_ssl_context = new ssl::context(ssl::context::sslv23); const bool fUseSSL = GetBoolArg("-rpcssl", false); @@ -569,7 +572,7 @@ void StartRPCThreads() else LogPrintf("ThreadRPCServer ERROR: missing server private key file %s\n", pathPKFile.string()); string strCiphers = GetArg("-rpcsslciphers", "TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH"); - SSL_CTX_set_cipher_list(rpc_ssl_context->impl(), strCiphers.c_str()); + SSL_CTX_set_cipher_list(rpc_ssl_context->native_handle(), strCiphers.c_str()); } // Try a dual IPv6/IPv4 socket, falling back to separate IPv4 and IPv6 sockets @@ -872,7 +875,7 @@ json_spirit::Value CRPCTable::execute(const std::string &strMethod, const json_s } std::string HelpExampleCli(string methodname, string args){ - return "> memeticd " + methodname + " " + args + "\n"; + return "> pepecoind " + methodname + " " + args + "\n"; } std::string HelpExampleRpc(string methodname, string args){ diff --git a/src/rpcserver.h b/src/rpcserver.h index 0d8c7f70..d4922726 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -109,8 +109,9 @@ extern json_spirit::Value dumpwallet(const json_spirit::Array& params, bool fHel extern json_spirit::Value importwallet(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value importaddress(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value dumpprivkey(const json_spirit::Array& params, bool fHelp); // in rpcdump.cpp +extern json_spirit::Value dumpkekdaqprivkey(const json_spirit::Array& params, bool fHelp); // in rpcdump.cpp extern json_spirit::Value importprivkey(const json_spirit::Array& params, bool fHelp); - +extern json_spirit::Value checkprivkey(const json_spirit::Array& params, bool fHelp); // in rpcdump.cpp extern json_spirit::Value sendalert(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value getmininginfo(const json_spirit::Array& params, bool fHelp); @@ -192,7 +193,6 @@ extern json_spirit::Value scanforstealthtxns(const json_spirit::Array& params, b extern json_spirit::Value darksend(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value spork(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value masternode(const json_spirit::Array& params, bool fHelp); -extern json_spirit::Value masternodelist(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value smsgenable(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value smsgdisable(const json_spirit::Array& params, bool fHelp); @@ -211,4 +211,7 @@ extern json_spirit::Value smsgbuckets(const json_spirit::Array& params, bool fHe extern json_spirit::Value getmessage(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value getmessages(const json_spirit::Array& params, bool fHelp); extern json_spirit::Value getlastmessages(const json_spirit::Array& params, bool fHelp); + +extern json_spirit::Value rebuildaddressindexfrom(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value rebuildaddressindexfor(const json_spirit::Array& params, bool fHelp); #endif diff --git a/src/rpcwallet.cpp b/src/rpcwallet.cpp index faed0e29..a4c1a68a 100644 --- a/src/rpcwallet.cpp +++ b/src/rpcwallet.cpp @@ -217,13 +217,13 @@ Value getnewaddress(const Array& params, bool fHelp) if (fHelp || params.size() > 1) throw runtime_error( "getnewaddress ( \"account\" )\n" - "\nReturns a new Memetic address for receiving payments.\n" + "\nReturns a new PepeCoin address for receiving payments.\n" "If 'account' is specified (recommended), it is added to the address book \n" "so payments received with the address will be credited to 'account'.\n" "\nArguments:\n" "1. \"account\" (string, optional) The account name for the address to be linked to. if not provided, the default account \"\" is used. It can also be set to the empty string \"\" to represent the default account. The account does not need to exist, it will be created if there is no account by the given name.\n" "\nResult:\n" - "\"memeticaddress\" (string) The new Memetic address\n" + "\"pepecoinaddress\" (string) The new PepeCoin address\n" "\nExamples:\n" + HelpExampleCli("getnewaddress", "") + HelpExampleCli("getnewaddress", "\"\"") @@ -294,11 +294,11 @@ Value getaccountaddress(const Array& params, bool fHelp) if (fHelp || params.size() != 1) throw runtime_error( "getaccountaddress \"account\"\n" - "\nReturns the current Memetic address for receiving payments to this account.\n" + "\nReturns the current PepeCoin address for receiving payments to this account.\n" "\nArguments:\n" "1. \"account\" (string, required) The account name for the address. It can also be set to the empty string \"\" to represent the default account. The account does not need to exist, it will be created and a new address created if there is no account by the given name.\n" "\nResult:\n" - "\"memeticaddress\" (string) The account Memetic address\n" + "\"pepecoinaddress\" (string) The account PepeCoin address\n" "\nExamples:\n" + HelpExampleCli("getaccountaddress", "") + HelpExampleCli("getaccountaddress", "\"\"") @@ -322,10 +322,10 @@ Value setaccount(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "setaccount \"memeticaddress\" \"account\"\n" + "setaccount \"pepecoinaddress\" \"account\"\n" "\nSets the account associated with the given address.\n" "\nArguments:\n" - "1. \"memeticaddress\" (string, required) The Memetic address to be associated with an account.\n" + "1. \"pepecoinaddress\" (string, required) The PepeCoin address to be associated with an account.\n" "2. \"account\" (string, required) The account to assign the address to.\n" "\nExamples:\n" + HelpExampleCli("setaccount", "\"TfFxcTN7BJQp88cPJYRvFpUAAKefTib9uh\" \"tabby\"") @@ -334,7 +334,7 @@ Value setaccount(const Array& params, bool fHelp) CBitcoinAddress address(params[0].get_str()); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Memetic address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid PepeCoin address"); string strAccount; @@ -364,10 +364,10 @@ Value getaccount(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "getaccount \"memeticaddress\"\n" + "getaccount \"pepecoinaddress\"\n" "\nReturns the account associated with the given address.\n" "\nArguments:\n" - "1. \"memeticaddress\" (string, required) The Memetic address for account lookup.\n" + "1. \"pepecoinaddress\" (string, required) The PepeCoin address for account lookup.\n" "\nResult:\n" "\"accountname\" (string) the account address\n" "\nExamples:\n" @@ -377,7 +377,7 @@ Value getaccount(const Array& params, bool fHelp) CBitcoinAddress address(params[0].get_str()); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Memetic address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid PepeCoin address"); string strAccount; map::iterator mi = pwalletMain->mapAddressBook.find(address.Get()); @@ -397,7 +397,7 @@ Value getaddressesbyaccount(const Array& params, bool fHelp) "1. \"account\" (string, required) The account name.\n" "\nResult:\n" "[ (json array of string)\n" - " \"memeticaddress\" (string) a Memetic address associated with the given account\n" + " \"pepecoinaddress\" (string) a PepeCoin address associated with the given account\n" " ,...\n" "]\n" "\nExamples:\n" @@ -423,12 +423,12 @@ Value sendtoaddress(const Array& params, bool fHelp) { if (fHelp || params.size() < 2 || params.size() > 4) throw runtime_error( - "sendtoaddress \"memeticaddress\" amount ( \"comment\" \"comment-to\" )\n" + "sendtoaddress \"pepecoinaddress\" amount ( \"comment\" \"comment-to\" )\n" "\nSent an amount to a given address. The amount is a real and is rounded to the nearest 0.00000001\n" + HelpRequiringPassphrase() + "\nArguments:\n" - "1. \"memeticaddress\" (string, required) The Memetic address to send to.\n" - "2. \"amount\" (numeric, required) The amount in MEME to send. eg 0.1\n" + "1. \"pepecoinaddress\" (string, required) The PepeCoin address to send to.\n" + "2. \"amount\" (numeric, required) The amount in PEPE to send. eg 0.1\n" "3. \"comment\" (string, optional) A comment used to store what the transaction is for. \n" " This is not part of the transaction, just kept in your wallet.\n" "4. \"comment-to\" (string, optional) A comment to store the name of the person or organization \n" @@ -450,7 +450,7 @@ Value sendtoaddress(const Array& params, bool fHelp) CBitcoinAddress address(params[0].get_str()); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Memetic address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid PepeCoin address"); // Amount CAmount nAmount = AmountFromValue(params[1]); @@ -488,7 +488,7 @@ Value listaddressgroupings(const Array& params, bool fHelp) "[\n" " [\n" " [\n" - " \"memeticaddress\", (string) The Memetic address\n" + " \"pepecoinaddress\", (string) The PepeCoin address\n" " amount, (numeric) The amount in btc\n" " \"account\" (string, optional) The account\n" " ]\n" @@ -527,11 +527,11 @@ Value signmessage(const Array& params, bool fHelp) { if (fHelp || params.size() != 2) throw runtime_error( - "signmessage \"memeticaddress\" \"message\"\n" + "signmessage \"pepecoinaddress\" \"message\"\n" "\nSign a message with the private key of an address" + HelpRequiringPassphrase() + "\n" "\nArguments:\n" - "1. \"memeticaddress\" (string, required) The Memetic address to use for the private key.\n" + "1. \"pepecoinaddress\" (string, required) The PepeCoin address to use for the private key.\n" "2. \"message\" (string, required) The message to create a signature of.\n" "\nResult:\n" "\"signature\" (string) The signature of the message encoded in base 64\n" @@ -578,13 +578,13 @@ Value getreceivedbyaddress(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "getreceivedbyaddress \"memeticaddress\" ( minconf )\n" - "\nReturns the total amount received by the given memeticaddress in transactions with at least minconf confirmations.\n" + "getreceivedbyaddress \"pepecoinaddress\" ( minconf )\n" + "\nReturns the total amount received by the given pepecoinaddress in transactions with at least minconf confirmations.\n" "\nArguments:\n" - "1. \"memeticaddress\" (string, required) The Memetic address for transactions.\n" + "1. \"pepecoinaddress\" (string, required) The PepeCoin address for transactions.\n" "2. minconf (numeric, optional, default=1) Only include transactions confirmed at least this many times.\n" "\nResult:\n" - "amount (numeric) The total amount in MEME received at this address.\n" + "amount (numeric) The total amount in PEPE received at this address.\n" "\nExamples:\n" "\nThe amount from transactions with at least 1 confirmation\n" + HelpExampleCli("getreceivedbyaddress", "\"TfFxcTN7BJQp88cPJYRvFpUAAKefTib9uh\"") + @@ -600,7 +600,7 @@ Value getreceivedbyaddress(const Array& params, bool fHelp) CBitcoinAddress address = CBitcoinAddress(params[0].get_str()); CScript scriptPubKey; if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Memetic address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid PepeCoin address"); scriptPubKey.SetDestination(address.Get()); if (!IsMine(*pwalletMain,scriptPubKey)) return (double)0.0; @@ -649,7 +649,7 @@ Value getreceivedbyaccount(const Array& params, bool fHelp) "1. \"account\" (string, required) The selected account, may be the default account using \"\".\n" "2. minconf (numeric, optional, default=1) Only include transactions confirmed at least this many times.\n" "\nResult:\n" - "amount (numeric) The total amount in MEME received for this account.\n" + "amount (numeric) The total amount in PEPE received for this account.\n" "\nExamples:\n" "\nAmount received by the default account with at least 1 confirmation\n" + HelpExampleCli("getreceivedbyaccount", "\"\"") + @@ -740,7 +740,7 @@ Value getbalance(const Array& params, bool fHelp) "2. minconf (numeric, optional, default=1) Only include transactions confirmed at least this many times.\n" "3. includeWatchonly (bool, optional, default=false) Also include balance in watchonly addresses (see 'importaddress')\n" "\nResult:\n" - "amount (numeric) The total amount in MEME received for this account.\n" + "amount (numeric) The total amount in PEPE received for this account.\n" "\nExamples:\n" "\nThe total amount in the server across all accounts\n" + HelpExampleCli("getbalance", "") + @@ -817,11 +817,11 @@ Value movecmd(const Array& params, bool fHelp) "\nResult:\n" "true|false (boolean) true if successfull.\n" "\nExamples:\n" - "\nMove 0.01 MEME from the default account to the account named tabby\n" + "\nMove 0.01 PEPE from the default account to the account named tabby\n" + HelpExampleCli("move", "\"\" \"tabby\" 0.01") + - "\nMove 0.01 MEME timotei to akiko with a comment and funds have 10 confirmations\n" + "\nMove 0.01 PEPE timotei to akiko with a comment and funds have 10 confirmations\n" + HelpExampleCli("move", "\"timotei\" \"akiko\" 0.01 10 \"happy birthday!\"") + - "\nAs a json MEME call\n" + "\nAs a json PEPE call\n" + HelpExampleRpc("move", "\"timotei\", \"akiko\", 0.01, 10, \"happy birthday!\"") ); @@ -852,7 +852,7 @@ Value movecmd(const Array& params, bool fHelp) debit.nTime = nNow; debit.strOtherAccount = strTo; debit.strComment = strComment; - walletdb.WriteAccountingEntry(debit); + pwalletMain->AddAccountingEntry(debit, walletdb); // Credit CAccountingEntry credit; @@ -862,7 +862,7 @@ Value movecmd(const Array& params, bool fHelp) credit.nTime = nNow; credit.strOtherAccount = strFrom; credit.strComment = strComment; - walletdb.WriteAccountingEntry(credit); + pwalletMain->AddAccountingEntry(debit, walletdb); if (!walletdb.TxnCommit()) throw JSONRPCError(RPC_DATABASE_ERROR, "database error"); @@ -875,13 +875,13 @@ Value sendfrom(const Array& params, bool fHelp) { if (fHelp || params.size() < 3 || params.size() > 7) throw runtime_error( - "sendfrom \"fromaccount\" \"tomemeticaddress\" amount ( minconf \"comment\" \"comment-to\" )\n" - "\nSent an amount from an account to a Memetic address.\n" + "sendfrom \"fromaccount\" \"topepecoinaddress\" amount ( minconf \"comment\" \"comment-to\" )\n" + "\nSent an amount from an account to a PepeCoin address.\n" "The amount is a real and is rounded to the nearest 0.00000001." + HelpRequiringPassphrase() + "\n" "\nArguments:\n" "1. \"fromaccount\" (string, required) The name of the account to send funds from. May be the default account using \"\".\n" - "2. \"tomemeticaddress\" (string, required) The Memetic address to send funds to.\n" + "2. \"topepecoinaddress\" (string, required) The PepeCoin address to send funds to.\n" "3. amount (numeric, required) The amount in TX. (transaction fee is added on top).\n" "4. minconf (numeric, optional, default=1) Only use funds with at least this many confirmations.\n" "5. \"comment\" (string, optional) A comment used to store what the transaction is for. \n" @@ -892,7 +892,7 @@ Value sendfrom(const Array& params, bool fHelp) "\nResult:\n" "\"transactionid\" (string) The transaction id.\n" "\nExamples:\n" - "\nSend 0.01 MEME from the default account to the address, must have at least 1 confirmation\n" + "\nSend 0.01 PEPE from the default account to the address, must have at least 1 confirmation\n" + HelpExampleCli("sendfrom", "\"\" \"TfFxcTN7BJQp88cPJYRvFpUAAKefTib9uh\" 0.01") + "\nSend 0.01 from the tabby account to the given address, funds must have at least 10 confirmations\n" + HelpExampleCli("sendfrom", "\"tabby\" \"TfFxcTN7BJQp88cPJYRvFpUAAKefTib9uh\" 0.01 10 \"donation\" \"seans outpost\"") + @@ -905,7 +905,7 @@ Value sendfrom(const Array& params, bool fHelp) string strAccount = AccountFromValue(params[0]); CBitcoinAddress address(params[1].get_str()); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Memetic address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid PepeCoin address"); CAmount nAmount = AmountFromValue(params[2]); int nMinDepth = 1; @@ -952,7 +952,7 @@ Value sendmany(const Array& params, bool fHelp) "1. \"fromaccount\" (string, required) The account to send the funds from, can be \"\" for the default account\n" "2. \"amounts\" (string, required) A json object with addresses and amounts\n" " {\n" - " \"address\":amount (numeric) The Memetic address is the key, the numeric amount in MEME is the value\n" + " \"address\":amount (numeric) The PepeCoin address is the key, the numeric amount in PEPE is the value\n" " ,...\n" " }\n" "3. minconf (numeric, optional, default=1) Only use the balance confirmed at least this many times.\n" @@ -988,7 +988,7 @@ Value sendmany(const Array& params, bool fHelp) { CBitcoinAddress address(s.name_); if (!address.IsValid()) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid Memetic address: ")+s.name_); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid PepeCoin address: ")+s.name_); if (setAddress.count(address)) throw JSONRPCError(RPC_INVALID_PARAMETER, string("Invalid parameter, duplicated address: ")+s.name_); @@ -1037,20 +1037,20 @@ Value addmultisigaddress(const Array& params, bool fHelp) { string msg = "addmultisigaddress nrequired [\"key\",...] ( \"account\" )\n" "\nAdd a nrequired-to-sign multisignature address to the wallet.\n" - "Each key is a Memetic address or hex-encoded public key.\n" + "Each key is a PepeCoin address or hex-encoded public key.\n" "If 'account' is specified, assign address to that account.\n" "\nArguments:\n" "1. nrequired (numeric, required) The number of required signatures out of the n keys or addresses.\n" - "2. \"keysobject\" (string, required) A json array of Memetic addresses or hex-encoded public keys\n" + "2. \"keysobject\" (string, required) A json array of PepeCoin addresses or hex-encoded public keys\n" " [\n" - " \"address\" (string) Memetic address or hex-encoded public key\n" + " \"address\" (string) PepeCoin address or hex-encoded public key\n" " ...,\n" " ]\n" "3. \"account\" (string, optional) An account to assign the addresses to.\n" "\nResult:\n" - "\"memeticaddress\" (string) A Memetic address associated with the keys.\n" + "\"pepecoinaddress\" (string) A PepeCoin address associated with the keys.\n" "\nExamples:\n" "\nAdd a multisig address from 2 addresses\n" @@ -1306,7 +1306,7 @@ Value listreceivedbyaddress(const Array& params, bool fHelp) " \"involvesWatchonly\" : \"true\", (bool) Only returned if imported addresses were involved in transaction\n" " \"address\" : \"receivingaddress\", (string) The receiving address\n" " \"account\" : \"accountname\", (string) The account of the receiving address. The default account is \"\".\n" - " \"amount\" : x.xxx, (numeric) The total amount in MEME received by the address\n" + " \"amount\" : x.xxx, (numeric) The total amount in PEPE received by the address\n" " \"confirmations\" : n (numeric) The number of confirmations of the most recent transaction included\n" " \"bcconfirmations\" : n (numeric) The number of Blockchain confirmations of the most recent transaction included\n" " }\n" @@ -1476,7 +1476,7 @@ Value listtransactions(const Array& params, bool fHelp) " {\n" " \"account\":\"accountname\", (string) The account name associated with the transaction. \n" " It will be \"\" for the default account.\n" - " \"address\":\"memeticaddress\", (string) The Memetic address of the transaction. Not present for \n" + " \"address\":\"pepecoinaddress\", (string) The PepeCoin address of the transaction. Not present for \n" " move transactions (category = move).\n" " \"category\":\"send|receive|move\", (string) The transaction category. 'move' is a local (off blockchain)\n" " transaction between accounts, and not associated with an address,\n" @@ -1538,11 +1538,10 @@ Value listtransactions(const Array& params, bool fHelp) Array ret; - std::list acentries; - CWallet::TxItems txOrdered = pwalletMain->OrderedTxItems(acentries, strAccount); + const CWallet::TxItems & txOrdered = pwalletMain->wtxOrdered; // iterate backwards until we have nCount items to return: - for (CWallet::TxItems::reverse_iterator it = txOrdered.rbegin(); it != txOrdered.rend(); ++it) + for (CWallet::TxItems::const_reverse_iterator it = txOrdered.rbegin(); it != txOrdered.rend(); ++it) { CWalletTx *const pwtx = (*it).second.first; if (pwtx != 0) @@ -1637,8 +1636,8 @@ Value listaccounts(const Array& params, bool fHelp) } } - list acentries; - CWalletDB(pwalletMain->strWalletFile).ListAccountCreditDebit("*", acentries); + const list & acentries = pwalletMain->laccentries; + BOOST_FOREACH(const CAccountingEntry& entry, acentries) mapAccountBalances[entry.strAccount] += entry.nCreditDebit; @@ -1663,7 +1662,7 @@ Value listsinceblock(const Array& params, bool fHelp) "{\n" " \"transactions\": [\n" " \"account\":\"accountname\", (string) The account name associated with the transaction. Will be \"\" for the default account.\n" - " \"address\":\"memeticaddress\", (string) The Memetic address of the transaction. Not present for move transactions (category = move).\n" + " \"address\":\"pepecoinaddress\", (string) The PepeCoin address of the transaction. Not present for move transactions (category = move).\n" " \"category\":\"send|receive\", (string) The transaction category. 'send' has negative amounts, 'receive' has positive amounts.\n" " \"amount\": x.xxx, (numeric) The amount in TX. This is negative for the 'send' category, and for the 'move' category for moves \n" " outbound. It is positive for the 'receive' category, and for the 'move' category for inbound funds.\n" @@ -1771,7 +1770,7 @@ Value gettransaction(const Array& params, bool fHelp) " \"details\" : [\n" " {\n" " \"account\" : \"accountname\", (string) The account name involved in the transaction, can be \"\" for the default account.\n" - " \"address\" : \"memeticaddress\", (string) The Memetic address involved in the transaction\n" + " \"address\" : \"pepecoinaddress\", (string) The PepeCoin address involved in the transaction\n" " \"category\" : \"send|receive\", (string) The category, either 'send' or 'receive'\n" " \"amount\" : x.xxx (numeric) The amount in btc\n" " }\n" @@ -1882,7 +1881,7 @@ Value keypoolrefill(const Array& params, bool fHelp) + HelpExampleRpc("keypoolrefill", "") ); - fLiteMode = GetBoolArg("-litemode", false); + fLiteMode = GetBoolArg("-nomntesting", false); unsigned int nSize; if (fLiteMode) @@ -2071,10 +2070,10 @@ Value encryptwallet(const Array& params, bool fHelp) "\nExamples:\n" "\nEncrypt you wallet\n" + HelpExampleCli("encryptwallet", "\"my pass phrase\"") + - "\nNow set the passphrase to use the wallet, such as for signing or sending Memetic\n" + "\nNow set the passphrase to use the wallet, such as for signing or sending PepeCoin\n" + HelpExampleCli("walletpassphrase", "\"my pass phrase\"") + "\nNow we can so something like sign\n" - + HelpExampleCli("signmessage", "\"memeticaddress\" \"test message\"") + + + HelpExampleCli("signmessage", "\"pepecoinaddress\" \"test message\"") + "\nNow lock the wallet again by removing the passphrase\n" + HelpExampleCli("walletlock", "") + "\nAs a json rpc call\n" @@ -2104,7 +2103,7 @@ Value encryptwallet(const Array& params, bool fHelp) // slack space in .dat files; that is bad if the old data is // unencrypted private keys. So: StartShutdown(); - return "wallet encrypted; Memetic server stopping, restart to run with encrypted wallet. The keypool has been flushed, you need to make a new backup."; + return "wallet encrypted; PepeCoin server stopping, restart to run with encrypted wallet. The keypool has been flushed, you need to make a new backup."; } @@ -2256,7 +2255,7 @@ Value getnewstealthaddress(const Array& params, bool fHelp) if (fHelp || params.size() > 1) throw runtime_error( "getnewstealthaddress [label]\n" - "Returns a new Memetic stealth address for receiving payments anonymously. "); + "Returns a new PepeCoin stealth address for receiving payments anonymously. "); if (pwalletMain->IsLocked()) throw runtime_error("Failed: Wallet must be unlocked."); @@ -2462,7 +2461,7 @@ Value sendtostealthaddress(const Array& params, bool fHelp) if (!sxAddr.SetEncoded(sEncoded)) { - result.push_back(Pair("result", "Invalid Memetic stealth address.")); + result.push_back(Pair("result", "Invalid PepeCoin stealth address.")); return result; }; diff --git a/src/script.h b/src/script.h index 7756228d..e48d4614 100644 --- a/src/script.h +++ b/src/script.h @@ -27,7 +27,7 @@ class CTransaction; class BaseSignatureChecker; static const unsigned int MAX_SCRIPT_ELEMENT_SIZE = 520; // bytes -static const unsigned int MAX_OP_RETURN_RELAY = 40; // bytes +static const unsigned int MAX_OP_RETURN_RELAY = 160; // bytes template std::vector ToByteVector(const T& in) diff --git a/src/secp256k1/COPYING b/src/secp256k1/COPYING old mode 100755 new mode 100644 diff --git a/src/secp256k1/Makefile.am b/src/secp256k1/Makefile.am old mode 100755 new mode 100644 diff --git a/src/secp256k1/README.md b/src/secp256k1/README.md old mode 100755 new mode 100644 diff --git a/src/secp256k1/TODO b/src/secp256k1/TODO old mode 100755 new mode 100644 diff --git a/src/secp256k1/build-aux/compile b/src/secp256k1/build-aux/compile index 531136b0..a85b723c 100755 --- a/src/secp256k1/build-aux/compile +++ b/src/secp256k1/build-aux/compile @@ -3,7 +3,7 @@ scriptversion=2012-10-14.11; # UTC -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify diff --git a/src/secp256k1/build-aux/config.guess b/src/secp256k1/build-aux/config.guess index b79252d6..2e9ad7fe 100755 --- a/src/secp256k1/build-aux/config.guess +++ b/src/secp256k1/build-aux/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2013 Free Software Foundation, Inc. +# Copyright 1992-2016 Free Software Foundation, Inc. -timestamp='2013-06-10' +timestamp='2016-10-02' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -24,12 +24,12 @@ timestamp='2013-06-10' # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # -# Originally written by Per Bothner. +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -149,7 +149,7 @@ Linux|GNU|GNU/*) LIBC=gnu #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac @@ -168,19 +168,29 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. + # to ELF recently (or will in the future) and ABI. case "${UNAME_MACHINE_ARCH}" in + earm*) + os=netbsdelf + ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ @@ -197,6 +207,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in os=netbsd ;; esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need @@ -207,13 +224,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" + echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` @@ -223,6 +240,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; @@ -235,6 +256,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -251,42 +275,42 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; + UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; + UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; + UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; + UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; + UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; + UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; + UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; + UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; + UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 @@ -359,16 +383,16 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build - SUN_ARCH="i386" + SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then - SUN_ARCH="x86_64" + SUN_ARCH=x86_64 fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` @@ -393,7 +417,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} @@ -579,8 +603,9 @@ EOF else IBM_ARCH=powerpc fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi @@ -617,13 +642,13 @@ EOF sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi @@ -662,11 +687,11 @@ EOF exit (0); } EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = "hppa2.0w" ] + if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build @@ -679,12 +704,12 @@ EOF # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then - HP_ARCH="hppa2.0w" + HP_ARCH=hppa2.0w else - HP_ARCH="hppa64" + HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} @@ -789,14 +814,14 @@ EOF echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) @@ -826,7 +851,7 @@ EOF *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; - i*:MSYS*:*) + *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) @@ -878,7 +903,7 @@ EOF exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix @@ -901,7 +926,7 @@ EOF EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) @@ -932,6 +957,9 @@ EOF crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -944,6 +972,9 @@ EOF ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; + k1om:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -969,10 +1000,13 @@ EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; - or1k:Linux:*:*) + mips64el:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; - or32:Linux:*:*) + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) @@ -1001,6 +1035,9 @@ EOF ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; @@ -1020,7 +1057,7 @@ EOF echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} @@ -1099,7 +1136,7 @@ EOF # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that + # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; @@ -1248,6 +1285,9 @@ EOF SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux${UNAME_RELEASE} + exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; @@ -1260,22 +1300,32 @@ EOF if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then + if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi @@ -1306,7 +1356,7 @@ EOF # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = "386"; then + if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" @@ -1348,7 +1398,7 @@ EOF echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos @@ -1359,171 +1409,25 @@ EOF x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; -esac - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs exit ;; - esac -fi +esac cat >&2 < in order to provide the needed -information to handle your system. +If $0 has already been updated, send the following data and any +information you think might be pertinent to config-patches@gnu.org to +provide the necessary information to handle your system. config.guess timestamp = $timestamp diff --git a/src/secp256k1/build-aux/config.sub b/src/secp256k1/build-aux/config.sub index 9633db70..dd2ca93c 100755 --- a/src/secp256k1/build-aux/config.sub +++ b/src/secp256k1/build-aux/config.sub @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2013 Free Software Foundation, Inc. +# Copyright 1992-2016 Free Software Foundation, Inc. -timestamp='2013-08-10' +timestamp='2016-11-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@ timestamp='2013-08-10' # of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. @@ -33,7 +33,7 @@ timestamp='2013-08-10' # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -53,8 +53,7 @@ timestamp='2013-08-10' me=`echo "$0" | sed -e 's,.*/,,'` usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. @@ -68,7 +67,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2013 Free Software Foundation, Inc. +Copyright 1992-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -117,8 +116,8 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ + kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` @@ -255,16 +254,18 @@ case $basic_machine in | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ + | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ @@ -282,8 +283,10 @@ case $basic_machine in | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ @@ -295,14 +298,15 @@ case $basic_machine in | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ - | open8 \ - | or1k | or32 \ + | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ | pyramid \ + | riscv32 | riscv64 \ | rl78 | rx \ | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ @@ -310,6 +314,7 @@ case $basic_machine in | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) @@ -324,7 +329,10 @@ case $basic_machine in c6x) basic_machine=tic6x-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; @@ -369,18 +377,20 @@ case $basic_machine in | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ + | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ + | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ @@ -400,8 +410,10 @@ case $basic_machine in | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ @@ -413,16 +425,19 @@ case $basic_machine in | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ + | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ | pyramid-* \ + | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ @@ -430,6 +445,7 @@ case $basic_machine in | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ + | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ @@ -506,6 +522,9 @@ case $basic_machine in basic_machine=i386-pc os=-aros ;; + asmjs) + basic_machine=asmjs-unknown + ;; aux) basic_machine=m68k-apple os=-aux @@ -626,6 +645,14 @@ case $basic_machine in basic_machine=m68k-bull os=-sysv3 ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + os=$os"spe" + ;; ebmon29k) basic_machine=a29k-amd os=-ebmon @@ -767,6 +794,9 @@ case $basic_machine in basic_machine=m68k-isi os=-sysv ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; m68knommu) basic_machine=m68k-unknown os=-linux @@ -822,6 +852,10 @@ case $basic_machine in basic_machine=powerpc-unknown os=-morphos ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; msdos) basic_machine=i386-pc os=-msdos @@ -998,7 +1032,7 @@ case $basic_machine in ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - ppcle | powerpclittle | ppc-le | powerpc-little) + ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) @@ -1008,7 +1042,7 @@ case $basic_machine in ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) + ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) @@ -1354,27 +1388,28 @@ case $os in | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix* | -fuchsia*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1506,6 +1541,8 @@ case $os in ;; -nacl*) ;; + -ios) + ;; -none) ;; *) @@ -1592,9 +1629,6 @@ case $basic_machine in mips*-*) os=-elf ;; - or1k-*) - os=-elf - ;; or32-*) os=-coff ;; diff --git a/src/secp256k1/build-aux/depcomp b/src/secp256k1/build-aux/depcomp index 4ebd5b3a..fc98710e 100755 --- a/src/secp256k1/build-aux/depcomp +++ b/src/secp256k1/build-aux/depcomp @@ -3,7 +3,7 @@ scriptversion=2013-05-30.07; # UTC -# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Copyright (C) 1999-2014 Free Software Foundation, Inc. # 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 diff --git a/src/secp256k1/build-aux/install-sh b/src/secp256k1/build-aux/install-sh index 377bb868..59990a10 100755 --- a/src/secp256k1/build-aux/install-sh +++ b/src/secp256k1/build-aux/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2011-11-20.07; # UTC +scriptversion=2014-09-12.12; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -41,19 +41,15 @@ scriptversion=2011-11-20.07; # UTC # This script is compatible with the BSD install script, but was written # from scratch. +tab=' ' nl=' ' -IFS=" "" $nl" +IFS=" $tab$nl" -# set DOITPROG to echo to test this script +# Set DOITPROG to "echo" to test this script. -# Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi +doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. @@ -68,17 +64,6 @@ mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - posix_mkdir= # Desired mode of installed file. @@ -97,7 +82,7 @@ dir_arg= dst_arg= copy_on_change=false -no_target_directory= +is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE @@ -137,46 +122,57 @@ while test $# -ne 0; do -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" - shift;; + shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; -o) chowncmd="$chownprog $2" - shift;; + shift;; -s) stripcmd=$stripprog;; - -t) dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; - -T) no_target_directory=true;; + -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; - --) shift - break;; + --) shift + break;; - -*) echo "$0: invalid option: $1" >&2 - exit 1;; + -*) echo "$0: invalid option: $1" >&2 + exit 1;; *) break;; esac shift done +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. @@ -207,6 +203,15 @@ if test $# -eq 0; then exit 0 fi +if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 @@ -223,16 +228,16 @@ if test -z "$dir_arg"; then *[0-7]) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw='% 200' + u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then - u_plus_rw= + u_plus_rw= else - u_plus_rw=,u+rw + u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac @@ -269,41 +274,15 @@ do # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - + dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi @@ -314,74 +293,81 @@ do if test $dstdir_status != 0; then case $posix_mkdir in '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + # $RANDOM is not portable (e.g. dash); use it when possible to + # lower collision chance + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + + # As "mkdir -p" follows symlinks and we work in /tmp possibly; so + # create the $tmpdir first (and fail if unsuccessful) to make sure + # that nobody tries to guess the $tmpdir name. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; + esac;; esac if $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else @@ -391,53 +377,51 @@ do # directory the slow way, step by step, checking for races as we go. case $dstdir in - /*) prefix='/';; - [-=\(\)!]*) prefix='./';; - *) prefix='';; + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; esac - eval "$initialize_posix_glob" - oIFS=$IFS IFS=/ - $posix_glob set -f + set -f set fnord $dstdir shift - $posix_glob set +f + set +f IFS=$oIFS prefixes= for d do - test X"$d" = X && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ done if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true fi fi fi @@ -472,15 +456,12 @@ do # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - + set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then @@ -493,24 +474,24 @@ do # to itself, or perhaps because mv is so ancient that it does not # support -f. { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 diff --git a/src/secp256k1/build-aux/ltmain.sh b/src/secp256k1/build-aux/ltmain.sh index a356acaf..a736cf99 100644 --- a/src/secp256k1/build-aux/ltmain.sh +++ b/src/secp256k1/build-aux/ltmain.sh @@ -1,9 +1,12 @@ +#! /bin/sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2014-01-03.01 -# libtool (GNU libtool) 2.4.2 +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +# Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @@ -23,881 +26,2112 @@ # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program. If not, see . -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --no-quiet, --no-silent -# print informational messages (default) -# --no-warn don't display warning messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print more informational messages than default -# --no-verbose don't print the extra informational messages -# --version print version information -# -h, --help, --help-all print short, long, or detailed help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. When passed as first option, -# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . -# GNU libtool home page: . -# General help using GNU software: . PROGRAM=libtool PACKAGE=libtool -VERSION="2.4.2 Debian-2.4.2-1.7ubuntu1" -TIMESTAMP="" -package_revision=1.3337 +VERSION="2.4.6 Debian-2.4.6-2" +package_revision=2.4.6 -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2015-01-20.17; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# Copyright (C) 2004-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# 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. + +# As a special exception to the GNU General Public License, if you distribute +# this file as part of a program or library that is built using GNU Libtool, +# you may include this file under the same distribution terms that you use +# for the rest of that program. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNES 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 . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} -# NLS nuisances: We save the old values to restore during execute mode. -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done -LC_ALL=C -LANGUAGE=C -export LANGUAGE LC_ALL -$lt_unset CDPATH +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. : ${CP="cp -f"} -test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" -dirname="s,/[^/]*$,," -basename="s,^.*/,," -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} # func_dirname may be replaced by extended shell implementation +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} # func_basename may be replaced by extended shell implementation +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` -} # func_dirname_and_basename may be replaced by extended shell implementation +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname may be replaced by extended shell implementation +## ----------------- ## +## Global variables. ## +## ----------------- ## -# These SED scripts presuppose an absolute path with a trailing slash. -pathcar='s,^/\([^/]*\).*$,\1,' -pathcdr='s,^/[^/]*,,' -removedotparts=':dotsl - s@/\./@/@g - t dotsl - s,/\.$,/,' -collapseslashes='s@/\{1,\}@/@g' -finalslash='s,/*$,/,' +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. -# func_normal_abspath PATH -# Remove doubled-up and trailing slashes, "." path components, -# and cancel out any ".." path components in PATH after making -# it an absolute path. -# value returned in "$func_normal_abspath_result" -func_normal_abspath () -{ - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` - while :; do - # Processed it all yet? - if test "$func_normal_abspath_tpath" = / ; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result" ; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in - "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. -# func_relative_path SRCDIR DSTDIR -# generates a relative path from SRCDIR to DSTDIR, with a trailing -# slash if non-empty, suitable for immediately appending a filename -# without needing to append a separator. -# value returned in "$func_relative_path_result" -func_relative_path () -{ - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break - ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break - ;; - *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=${func_dirname_result} - if test "x$func_relative_path_tlibdir" = x ; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result - ;; - esac - done +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test "x$func_stripname_result" != x ; then - func_relative_path_result=${func_relative_path_result}/${func_stripname_result} - fi +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS - # Normalisation. If bindir is libdir, return empty string, - # else relative path ending with a slash; either way, target - # file name can be directly appended. - if test ! -z "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result/" - func_relative_path_result=$func_stripname_result - fi -} +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath=$0 -# The name of this program: -func_dirname_and_basename "$progpath" -progname=$func_basename_result +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` -# Make sure we have an absolute path for reexecution: +# Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) - progdir=$func_dirname_result + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" + progpath=$progdir/$progname ;; *) - save_IFS="$IFS" + _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do - IFS="$save_IFS" + IFS=$_G_IFS test -x "$progdir/$progname" && break done - IFS="$save_IFS" + IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" + progpath=$progdir/$progname ;; esac -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' +## ----------------- ## +## Standard options. ## +## ----------------- ## -# Sed substitution that converts a w32 file name or path -# which contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. -# Standard options: opt_dry_run=false -opt_help=false opt_quiet=false opt_verbose=false -opt_warning=: -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname: ${opt_mode+$opt_mode: }$*" -} +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 -} +## -------------------- ## +## Resource management. ## +## -------------------- ## -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. - # bash bug again: - : -} -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () { - func_error ${1+"$@"} - exit $EXIT_FAILURE -} + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" + require_term_colors=: } -help="Try \`$progname --help' for more information." ## default -# func_grep expression filename +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +eval 'func_dirname () +{ + $debug_cmd + + '"$_d"' +}' + + +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () +{ + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { + $debug_cmd + $GREP "$1" "$2" >/dev/null 2>&1 } -# func_mkdir_p directory-path +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { - my_directory_path="$1" - my_dir_list= + $debug_cmd - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + _G_directory_path=$1 + _G_dir_list= - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do + while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" + _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac + case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done - my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : + $MKDIR "$_G_dir" 2>/dev/null || : done - IFS="$save_mkdir_p_IFS" + IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" fi } -# func_mktempdir [string] +# func_mktempdir [BASENAME] +# ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. +# given, BASENAME is the basename for that directory. func_mktempdir () { - my_template="${TMPDIR-/tmp}/${1-$progname}" + $debug_cmd + + _G_template=${TMPDIR-/tmp}/${1-$progname} - if test "$opt_dry_run" = ":"; then + if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" + _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` - if test ! -d "$my_tmpdir"; then + if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" + _G_tmpdir=$_G_template-${RANDOM-0}$$ - save_mktempdir_umask=`umask` + func_mktempdir_umask=`umask` umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} + + +# func_normal_abspath PATH +# ------------------------ +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +func_normal_abspath () +{ + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + + +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () +{ + $debug_cmd + + $opt_quiet || func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + + +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () +{ + $debug_cmd + + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result fi - $ECHO "$my_tmpdir" + test -n "$func_relative_path_result" || func_relative_path_result=. + + : +} + + +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. +func_quote_for_eval () +{ + $debug_cmd + + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + fi + + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" + ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; + esac + + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" + else + func_append func_quote_for_eval_result "$_G_quoted_arg" + fi + shift + done +} + + +# func_quote_for_expand ARG +# ------------------------- +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + $debug_cmd + + case $1 in + *[\\\`\"]*) + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; + *) + _G_arg=$1 ;; + esac + + case $_G_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_arg=\"$_G_arg\" + ;; + esac + + func_quote_for_expand_result=$_G_arg +} + + +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_for_expand "$_G_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_tr_sh +# ---------- +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $debug_cmd + + $opt_verbose && func_echo "$*" + + : +} + + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 +} + + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# Set a version string for this script. +scriptversion=2014-01-07.03; # UTC + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# Copyright (C) 2010-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# 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 . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# warranty; '. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# to the main code. A hook is just a named list of of function, that can +# be run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It is assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook funcions.n" ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + eval $_G_hook '"$@"' + + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift + done + + func_quote_for_eval ${1+"$@"} + func_run_hooks_result=$func_quote_for_eval_result +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list in your hook function, remove any +# options that you action, and then pass back the remaining unprocessed +# options in '_result', escaped suitably for +# 'eval'. Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# +# func_quote_for_eval ${1+"$@"} +# my_options_prep_result=$func_quote_for_eval_result +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# # Note that for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# ;; +# *) set dummy "$_G_opt" "$*"; shift; break ;; +# esac +# done +# +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# +# func_quote_for_eval ${1+"$@"} +# my_option_validation_result=$func_quote_for_eval_result +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll alse need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + func_options_prep ${1+"$@"} + eval func_parse_options \ + ${func_options_prep_result+"$func_options_prep_result"} + eval func_validate_options \ + ${func_parse_options_result+"$func_parse_options_result"} + + eval func_run_hooks func_options \ + ${func_validate_options_result+"$func_validate_options_result"} + + # save modified positional parameters for caller + func_options_result=$func_run_hooks_result } -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propogate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before +# returning. +func_hookable func_options_prep +func_options_prep () { - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac + $debug_cmd - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac + # Option defaults: + opt_verbose=false + opt_warning_types= + + func_run_hooks func_options_prep ${1+"$@"} + + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result } -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () { - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "$1" | $SED \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac + $debug_cmd - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac + func_parse_options_result= - func_quote_for_expand_result="$my_arg" -} + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + func_run_hooks func_parse_options ${1+"$@"} + # Adjust func_parse_options positional parameters to match + eval set dummy "$func_run_hooks_result"; shift -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi + --warnings|--warning|-W) + test $# = 0 && func_missing_arg $_G_opt && break + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result } -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () { - my_cmd="$1" - my_fail_exp="${2-:}" + $debug_cmd - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} + func_run_hooks func_validate_options ${1+"$@"} -# func_tr_sh -# Turn $1 into a string suitable for a shell variable name. -# Result is stored in $func_tr_sh_result. All characters -# not in the set a-zA-Z0-9_ are replaced with '_'. Further, -# if $1 begins with a digit, a '_' is prepended as well. -func_tr_sh () -{ - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE + + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result } -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $opt_debug - $SED -n '/(C)/!b go - :more - /\./!{ - N - s/\n# / / - b more - } - :go - /^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} +## ----------------- ## +## Helper functions. ## +## ----------------- ## -# func_usage -# Echo short help message to standard output and exit. -func_usage () +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () { - $opt_debug + $debug_cmd - $SED -n '/^# Usage:/,/^# *.*--help/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - echo - $ECHO "run \`$progname --help | more' for full usage" - exit $? + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE } -# func_help [NOEXIT] -# Echo long help message to standard output and exit, -# unless 'noexit' is passed as argument. + +# func_help +# --------- +# Echo long help message to standard output and exit. func_help () { - $opt_debug - - $SED -n '/^# Usage:/,/# Report bugs to/ { - :print - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ - p - d - } - /^# .* home page:/b print - /^# General help using/b print - ' < "$progpath" - ret=$? - if test -z "$1"; then - exit $ret - fi + $debug_cmd + + func_usage_message + $ECHO "$long_help_message" + exit 0 } -# func_missing_arg argname + +# func_missing_arg ARGNAME +# ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { - $opt_debug + $debug_cmd - func_error "missing argument for $1." + func_error "Missing argument for '$1'." exit_cmd=exit } -# func_split_short_opt shortopt +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables after +# splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + test "x$func_split_equals_lhs" = "x$1" \ + && func_split_equals_rhs= + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. -func_split_short_opt () +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () { - my_sed_short_opt='1s/^\(..\).*$/\1/;q' - my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + $debug_cmd - func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` - func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` -} # func_split_short_opt may be replaced by extended shell implementation + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} -# func_split_long_opt longopt -# Set func_split_long_opt_name and func_split_long_opt_arg shell -# variables after splitting LONGOPT at the `=' sign. -func_split_long_opt () +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () { - my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' - my_sed_long_arg='1s/^--[^=]*=//' + $debug_cmd - func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` - func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` -} # func_split_long_opt may be replaced by extended shell implementation + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} -exit_cmd=: +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () +{ + $debug_cmd + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /(C)/!b go + :more + /\./!{ + N + s|\n# | | + b more + } + :go + /^# Written by /,/# warranty; / { + s|^# || + s|^# *$|| + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + p + } + /^# Written by / { + s|^# || + p + } + /^warranty; /q' < "$progpath" + exit $? +} -magic="%%%MAGIC variable%%%" -magic_exe="%%%MAGIC EXE variable%%%" +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: -# Global variables. -nonopt= -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () { - eval "${1}=\$${1}\${2}" -} # func_append may be replaced by extended shell implementation + $debug_cmd -# func_append_quoted var value -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -func_append_quoted () -{ - func_quote_for_eval "${2}" - eval "${1}=\$${1}\\ \$func_quote_for_eval_result" -} # func_append_quoted may be replaced by extended shell implementation + _G_message=$* + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} -# func_arith arithmetic-term... -func_arith () + +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () { - func_arith_result=`expr "${@}"` -} # func_arith may be replaced by extended shell implementation + $debug_cmd + $warning_func ${1+"$@"} +} -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` -} # func_len may be replaced by extended shell implementation +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" -# func_lo2o object -func_lo2o () +# Additional text appended to 'usage_message' in response to '--help'. +func_help () { - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} # func_lo2o may be replaced by extended shell implementation + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname $scriptversion Debian-2.4.6-2 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to . +GNU libtool home page: . +General help using GNU software: ." + exit 0 +} -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} # func_xform may be replaced by extended shell implementation +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi -# func_fatal_configuration arg... +# func_fatal_configuration ARG... +# ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { - func_error ${1+"$@"} - func_error "See the $PACKAGE documentation for more information." - func_fatal_error "Fatal configuration error." + func__fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." } # func_config +# ----------- # Display the configuration for all the tags in this script. func_config () { @@ -915,17 +2149,19 @@ func_config () exit $? } + # func_features +# ------------- # Display the features supported by this script. func_features () { echo "host: $host" - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi - if test "$build_old_libs" = yes; then + if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" @@ -934,314 +2170,350 @@ func_features () exit $? } -# func_enable_tag tagname + +# func_enable_tag TAGNAME +# ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { - # Global variable: - tagname="$1" + # Global variable: + tagname=$1 - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf="/$re_begincf/,/$re_endcf/p" + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac } + # func_check_version_match +# ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF - else - cat >&2 <<_LT_EOF + else + cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF - fi - else - cat >&2 <<_LT_EOF + fi + else + cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF - fi + fi - exit $EXIT_MISMATCH - fi + exit $EXIT_MISMATCH + fi } -# Shorthand for --mode=foo, only valid as the first argument -case $1 in -clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; -compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; -execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; -finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; -install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; -link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; -uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; -esac +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () +{ + $debug_mode + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false + nonopt= + preserve_args= -# Option defaults: -opt_debug=: -opt_dry_run=false -opt_config=false -opt_preserve_dup_deps=false -opt_features=false -opt_finish=false -opt_help=false -opt_help_all=false -opt_silent=: -opt_warning=: -opt_verbose=: -opt_silent=false -opt_verbose=false + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result +} +func_add_hook func_options_prep libtool_options_prep -# Parse options once, thoroughly. This comes as soon as possible in the -# script to make things like `--version' happen as quickly as we can. +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () { - # this just eases exit handling - while test $# -gt 0; do - opt="$1" - shift - case $opt in - --debug|-x) opt_debug='set -x' - func_echo "enabling shell trace mode" - $opt_debug - ;; - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - --config) - opt_config=: -func_config - ;; - --dlopen|-dlopen) - optarg="$1" - opt_dlopen="${opt_dlopen+$opt_dlopen -}$optarg" - shift - ;; - --preserve-dup-deps) - opt_preserve_dup_deps=: - ;; - --features) - opt_features=: -func_features - ;; - --finish) - opt_finish=: -set dummy --mode finish ${1+"$@"}; shift - ;; - --help) - opt_help=: - ;; - --help-all) - opt_help_all=: -opt_help=': help-all' - ;; - --mode) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_mode="$optarg" -case $optarg in - # Valid mode arguments: - clean|compile|execute|finish|install|link|relink|uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; -esac - shift - ;; - --no-silent|--no-quiet) - opt_silent=false -func_append preserve_args " $opt" - ;; - --no-warning|--no-warn) - opt_warning=false -func_append preserve_args " $opt" - ;; - --no-verbose) - opt_verbose=false -func_append preserve_args " $opt" - ;; - --silent|--quiet) - opt_silent=: -func_append preserve_args " $opt" - opt_verbose=false - ;; - --verbose|-v) - opt_verbose=: -func_append preserve_args " $opt" -opt_silent=false - ;; - --tag) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_tag="$optarg" -func_append preserve_args " $opt $optarg" -func_enable_tag "$optarg" - shift - ;; - - -\?|-h) func_usage ;; - --help) func_help ;; - --version) func_version ;; - - # Separate optargs to long options: - --*=*) - func_split_long_opt "$opt" - set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-n*|-v*) - func_split_short_opt "$opt" - set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) break ;; - -*) func_fatal_help "unrecognized option \`$opt'" ;; - *) set dummy "$opt" ${1+"$@"}; shift; break ;; - esac - done + $debug_cmd - # Validate options: + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done - # save first non-option argument - if test "$#" -gt 0; then - nonopt="$opt" - shift - fi - # preserve --debug - test "$opt_debug" = : || func_append preserve_args " --debug" + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result +} +func_add_hook func_parse_options libtool_parse_options - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac - $opt_help || { - # Sanity checks first: - func_check_version_match - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift fi - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test "$opt_mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$opt_mode' for more information." - } + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } - # Bail if the options were screwed - $exit_cmd $EXIT_FAILURE + # Pass back the unparsed argument list + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result } +func_add_hook func_validate_options libtool_validate_options +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + ## ----------- ## ## Main. ## ## ----------- ## +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + # func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. +# True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. +# True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. +# fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no @@ -1249,13 +2521,13 @@ func_lalib_unsafe_p () for lalib_p_l in 1 2 3 4 do read lalib_p_line - case "$lalib_p_line" in + case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi - test "$lalib_p" = yes + test yes = "$lalib_p" } # func_ltwrapper_script_p file @@ -1264,7 +2536,8 @@ func_lalib_unsafe_p () # determined imposters. func_ltwrapper_script_p () { - func_lalib_p "$1" + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file @@ -1289,7 +2562,7 @@ func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file @@ -1308,11 +2581,13 @@ func_ltwrapper_p () # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { - $opt_debug + $debug_cmd + save_ifs=$IFS; IFS='~' for cmd in $1; do - IFS=$save_ifs + IFS=$sp$nl eval cmd=\"$cmd\" + IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs @@ -1324,10 +2599,11 @@ func_execute_cmds () # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. +# 'FILE.' does not work on cygwin managed mounts. func_source () { - $opt_debug + $debug_cmd + case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; @@ -1354,10 +2630,10 @@ func_resolve_sysroot () # store the result into func_replace_sysroot_result. func_replace_sysroot () { - case "$lt_sysroot:$1" in + case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result="=$func_stripname_result" + func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. @@ -1374,7 +2650,8 @@ func_replace_sysroot () # arg is usually of the form 'gcc ...' func_infer_tag () { - $opt_debug + $debug_cmd + if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do @@ -1393,7 +2670,7 @@ func_infer_tag () for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. @@ -1418,7 +2695,7 @@ func_infer_tag () # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" + func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi @@ -1434,15 +2711,15 @@ func_infer_tag () # but don't create it if we're doing a dry run. func_write_libtool_object () { - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' else write_lobj=none fi - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' else write_oldobj=none fi @@ -1450,7 +2727,7 @@ func_write_libtool_object () $opt_dry_run || { cat >${write_libobj}T </dev/null` - if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$lt_sed_naive_backslashify"` + $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi @@ -1514,18 +2792,19 @@ func_convert_core_file_wine_to_w32 () # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { - $opt_debug + $debug_cmd + # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result="" + func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" - if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then - func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi @@ -1554,7 +2833,8 @@ func_convert_core_path_wine_to_w32 () # environment variable; do not put it in $PATH. func_cygpath () { - $opt_debug + $debug_cmd + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then @@ -1563,7 +2843,7 @@ func_cygpath () fi else func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath @@ -1574,10 +2854,11 @@ func_cygpath () # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { - $opt_debug + $debug_cmd + # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 @@ -1588,13 +2869,14 @@ func_convert_core_msys_to_w32 () # func_to_host_file_result to ARG1). func_convert_file_check () { - $opt_debug - if test -z "$2" && test -n "$1" ; then + $debug_cmd + + if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" - func_error " \`$1'" + func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: - func_to_host_file_result="$1" + func_to_host_file_result=$1 fi } # end func_convert_file_check @@ -1606,10 +2888,11 @@ func_convert_file_check () # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { - $opt_debug + $debug_cmd + if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" - func_error " \`$3'" + func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. @@ -1618,7 +2901,7 @@ func_convert_path_check () func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else - func_to_host_path_result="$3" + func_to_host_path_result=$3 fi fi } @@ -1630,9 +2913,10 @@ func_convert_path_check () # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { - $opt_debug + $debug_cmd + case $4 in - $1 ) func_to_host_path_result="$3$func_to_host_path_result" + $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in @@ -1646,7 +2930,7 @@ func_convert_path_front_back_pathsep () ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## -# invoked via `$to_host_file_cmd ARG' +# invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. @@ -1657,7 +2941,8 @@ func_convert_path_front_back_pathsep () # in func_to_host_file_result. func_to_host_file () { - $opt_debug + $debug_cmd + $to_host_file_cmd "$1" } # end func_to_host_file @@ -1669,7 +2954,8 @@ func_to_host_file () # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { - $opt_debug + $debug_cmd + case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 @@ -1687,7 +2973,7 @@ func_to_tool_file () # Copy ARG to func_to_host_file_result. func_convert_file_noop () { - func_to_host_file_result="$1" + func_to_host_file_result=$1 } # end func_convert_file_noop @@ -1698,11 +2984,12 @@ func_convert_file_noop () # func_to_host_file_result. func_convert_file_msys_to_w32 () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" - func_to_host_file_result="$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1714,8 +3001,9 @@ func_convert_file_msys_to_w32 () # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. @@ -1731,11 +3019,12 @@ func_convert_file_cygwin_to_w32 () # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" - func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1747,12 +3036,13 @@ func_convert_file_nix_to_w32 () # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" - func_to_host_file_result="$func_cygpath_result" + func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1765,13 +3055,14 @@ func_convert_file_msys_to_cygwin () # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { - $opt_debug - func_to_host_file_result="$1" + $debug_cmd + + func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" - func_to_host_file_result="$func_cygpath_result" + func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } @@ -1781,7 +3072,7 @@ func_convert_file_nix_to_cygwin () ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# -# invoked via `$to_host_path_cmd ARG' +# invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. @@ -1805,10 +3096,11 @@ func_convert_file_nix_to_cygwin () to_host_path_cmd= func_init_to_host_path_cmd () { - $opt_debug + $debug_cmd + if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" - to_host_path_cmd="func_convert_path_${func_stripname_result}" + to_host_path_cmd=func_convert_path_$func_stripname_result fi } @@ -1818,7 +3110,8 @@ func_init_to_host_path_cmd () # in func_to_host_path_result. func_to_host_path () { - $opt_debug + $debug_cmd + func_init_to_host_path_cmd $to_host_path_cmd "$1" } @@ -1829,7 +3122,7 @@ func_to_host_path () # Copy ARG to func_to_host_path_result. func_convert_path_noop () { - func_to_host_path_result="$1" + func_to_host_path_result=$1 } # end func_convert_path_noop @@ -1840,8 +3133,9 @@ func_convert_path_noop () # func_to_host_path_result. func_convert_path_msys_to_w32 () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; @@ -1849,7 +3143,7 @@ func_convert_path_msys_to_w32 () func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" @@ -1863,8 +3157,9 @@ func_convert_path_msys_to_w32 () # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" @@ -1883,14 +3178,15 @@ func_convert_path_cygwin_to_w32 () # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" @@ -1904,15 +3200,16 @@ func_convert_path_nix_to_w32 () # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" - func_to_host_path_result="$func_cygpath_result" + func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" @@ -1927,8 +3224,9 @@ func_convert_path_msys_to_cygwin () # func_to_host_file_result. func_convert_path_nix_to_cygwin () { - $opt_debug - func_to_host_path_result="$1" + $debug_cmd + + func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them @@ -1937,7 +3235,7 @@ func_convert_path_nix_to_cygwin () func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" - func_to_host_path_result="$func_cygpath_result" + func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" @@ -1946,13 +3244,31 @@ func_convert_path_nix_to_cygwin () # end func_convert_path_nix_to_cygwin +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + # func_mode_compile arg... func_mode_compile () { - $opt_debug + $debug_cmd + # Get the compilation command and the source file. base_compile= - srcfile="$nonopt" # always keep a non-empty value in "srcfile" + srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal @@ -1965,12 +3281,12 @@ func_mode_compile () case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile - lastarg="$arg" + lastarg=$arg arg_mode=normal ;; target ) - libobj="$arg" + libobj=$arg arg_mode=normal continue ;; @@ -1980,7 +3296,7 @@ func_mode_compile () case $arg in -o) test -n "$libobj" && \ - func_fatal_error "you cannot specify \`-o' more than once" + func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; @@ -2009,12 +3325,12 @@ func_mode_compile () func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= - save_ifs="$IFS"; IFS=',' + save_ifs=$IFS; IFS=, for arg in $args; do - IFS="$save_ifs" + IFS=$save_ifs func_append_quoted lastarg "$arg" done - IFS="$save_ifs" + IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result @@ -2027,8 +3343,8 @@ func_mode_compile () # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # - lastarg="$srcfile" - srcfile="$arg" + lastarg=$srcfile + srcfile=$arg ;; esac # case $arg ;; @@ -2043,13 +3359,13 @@ func_mode_compile () func_fatal_error "you must specify an argument for -Xcompile" ;; target) - func_fatal_error "you must specify a target with \`-o'" + func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" - libobj="$func_basename_result" + libobj=$func_basename_result } ;; esac @@ -2069,7 +3385,7 @@ func_mode_compile () case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) - func_fatal_error "cannot determine name of library object from \`$libobj'" + func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac @@ -2078,8 +3394,8 @@ func_mode_compile () for arg in $later; do case $arg in -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; @@ -2105,17 +3421,17 @@ func_mode_compile () func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." + && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. - if test "$build_old_libs" = yes; then + if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" @@ -2127,16 +3443,16 @@ func_mode_compile () pic_mode=default ;; esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock else output_obj= need_locks=no @@ -2145,12 +3461,12 @@ func_mode_compile () # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then + if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done - elif test "$need_locks" = warn; then + elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: @@ -2158,7 +3474,7 @@ func_mode_compile () This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you +your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." @@ -2180,11 +3496,11 @@ compiler." qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile - if test "$pic_mode" != no; then + if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code @@ -2201,7 +3517,7 @@ compiler." func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - if test "$need_locks" = warn && + if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: @@ -2212,7 +3528,7 @@ $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you +your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." @@ -2228,20 +3544,20 @@ compiler." fi # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then + if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi - if test "$compiler_c_o" = yes; then + if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi @@ -2250,7 +3566,7 @@ compiler." func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - if test "$need_locks" = warn && + if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: @@ -2261,7 +3577,7 @@ $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you +your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." @@ -2281,7 +3597,7 @@ compiler." func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked - if test "$need_locks" != no; then + if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi @@ -2291,7 +3607,7 @@ compiler." } $opt_help || { - test "$opt_mode" = compile && func_mode_compile ${1+"$@"} + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () @@ -2311,7 +3627,7 @@ func_mode_help () Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated @@ -2330,16 +3646,16 @@ This mode accepts the following additional options: -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler -COMPILE-COMMAND is a command to be used in creating a \`standard' object file +COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." ;; execute) @@ -2352,7 +3668,7 @@ This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path -This mode sets the library path environment variable according to \`-dlopen' +This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated @@ -2371,7 +3687,7 @@ Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." +the '--dry-run' option if you just want to see what would be executed." ;; install) @@ -2381,7 +3697,7 @@ the \`--dry-run' option if you just want to see what would be executed." Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. +either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: @@ -2407,7 +3723,7 @@ The following components of LINK-COMMAND are treated specially: -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE @@ -2421,7 +3737,8 @@ The following components of LINK-COMMAND are treated specially: -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information @@ -2441,20 +3758,20 @@ The following components of LINK-COMMAND are treated specially: -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) -All other options (arguments beginning with \`-') are ignored. +All other options (arguments beginning with '-') are ignored. -Every other argument is treated as a filename. Files ending in \`.la' are +Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; @@ -2465,7 +3782,7 @@ is created, otherwise an executable program is created." Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. @@ -2473,17 +3790,17 @@ Otherwise, only FILE itself is deleted using RM." ;; *) - func_fatal_help "invalid operation mode \`$opt_mode'" + func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo - $ECHO "Try \`$progname --help' for more information about other modes." + $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then - if test "$opt_help" = :; then + if test : = "$opt_help"; then func_mode_help else { @@ -2491,7 +3808,7 @@ if $opt_help; then for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done - } | sed -n '1p; 2,$s/^Usage:/ or: /p' + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do @@ -2499,7 +3816,7 @@ if $opt_help; then func_mode_help done } | - sed '1d + $SED '1d /^When reporting/,/^Report/{ H d @@ -2516,16 +3833,17 @@ fi # func_mode_execute arg... func_mode_execute () { - $opt_debug + $debug_cmd + # The first argument is the command name. - cmd="$nonopt" + cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ - || func_fatal_help "\`$file' is not a file" + || func_fatal_help "'$file' is not a file" dir= case $file in @@ -2535,7 +3853,7 @@ func_mode_execute () # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" + || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= @@ -2546,18 +3864,18 @@ func_mode_execute () if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" + func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." - dir="$func_dirname_result" + dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; @@ -2565,18 +3883,18 @@ func_mode_execute () *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." - dir="$func_dirname_result" + dir=$func_dirname_result ;; *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" + test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then @@ -2588,7 +3906,7 @@ func_mode_execute () # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. - libtool_execute_magic="$magic" + libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= @@ -2601,12 +3919,12 @@ func_mode_execute () if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. - file="$progdir/$program" + file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. - file="$progdir/$program" + file=$progdir/$program fi ;; esac @@ -2614,7 +3932,15 @@ func_mode_execute () func_append_quoted args "$file" done - if test "X$opt_dry_run" = Xfalse; then + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" @@ -2631,25 +3957,18 @@ func_mode_execute () done # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS + exec_cmd=\$cmd$args fi } -test "$opt_mode" = execute && func_mode_execute ${1+"$@"} +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { - $opt_debug + $debug_cmd + libs= libdirs= admincmds= @@ -2663,11 +3982,11 @@ func_mode_finish () if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else - func_warning "\`$opt' is not a valid libtool archive" + func_warning "'$opt' is not a valid libtool archive" fi else - func_fatal_error "invalid argument \`$opt'" + func_fatal_error "invalid argument '$opt'" fi done @@ -2682,12 +4001,12 @@ func_mode_finish () # Remove sysroot references if $opt_dry_run; then for lib in $libs; do - echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do - sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done @@ -2712,7 +4031,7 @@ func_mode_finish () fi # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS + $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" @@ -2723,27 +4042,27 @@ func_mode_finish () echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" - $ECHO " - use the \`$flag' linker flag" + $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo @@ -2762,18 +4081,20 @@ func_mode_finish () exit $EXIT_SUCCESS } -test "$opt_mode" = finish && func_mode_finish ${1+"$@"} +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { - $opt_debug + $debug_cmd + # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac; then + case $nonopt in *shtool*) :;; *) false;; esac + then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " @@ -2800,7 +4121,7 @@ func_mode_install () opts= prev= install_type= - isdir=no + isdir=false stripme= no_mode=: for arg @@ -2813,7 +4134,7 @@ func_mode_install () fi case $arg in - -d) isdir=yes ;; + -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg @@ -2831,7 +4152,7 @@ func_mode_install () *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then - if test "x$prev" = x-m && test -n "$install_override_mode"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi @@ -2856,7 +4177,7 @@ func_mode_install () func_fatal_help "you must specify an install program" test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" + func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else @@ -2878,19 +4199,19 @@ func_mode_install () dest=$func_stripname_result # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" + destdir=$func_dirname_result + destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" + func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; @@ -2899,7 +4220,7 @@ func_mode_install () case $file in *.lo) ;; *) - func_fatal_help "\`$destdir' must be an absolute directory name" + func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done @@ -2908,7 +4229,7 @@ func_mode_install () # This variable tells wrapper scripts just to set variables rather # than running their programs. - libtool_install_magic="$magic" + libtool_install_magic=$magic staticlibs= future_libdirs= @@ -2928,7 +4249,7 @@ func_mode_install () # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" + || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= @@ -2950,7 +4271,7 @@ func_mode_install () fi func_dirname "$file" "/" "" - dir="$func_dirname_result" + dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then @@ -2964,7 +4285,7 @@ func_mode_install () # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. @@ -2973,29 +4294,36 @@ func_mode_install () relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi - func_warning "relinking \`$file'" + func_warning "relinking '$file'" func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then - realname="$1" + realname=$1 shift - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T + srcname=$realname + test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' - tstripme="$stripme" + tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) - tstripme="" + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= ;; esac ;; @@ -3006,7 +4334,7 @@ func_mode_install () if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on + # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname @@ -3017,14 +4345,14 @@ func_mode_install () fi # Do each command in the postinstall commands. - lib="$destdir/$realname" + lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i + name=$func_basename_result + instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. @@ -3036,11 +4364,11 @@ func_mode_install () # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then - destfile="$destdir/$destname" + destfile=$destdir/$destname else func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" + destfile=$func_basename_result + destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. @@ -3050,11 +4378,11 @@ func_mode_install () staticdest=$func_lo2o_result ;; *.$objext) - staticdest="$destfile" + staticdest=$destfile destfile= ;; *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" + func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac @@ -3063,7 +4391,7 @@ func_mode_install () func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. - if test "$build_old_libs" = yes; then + if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result @@ -3075,23 +4403,23 @@ func_mode_install () *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then - destfile="$destdir/$destname" + destfile=$destdir/$destname else func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" + destfile=$func_basename_result + destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install - stripped_ext="" + stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result - stripped_ext=".exe" + stripped_ext=.exe fi ;; esac @@ -3119,19 +4447,19 @@ func_mode_install () # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" + func_fatal_error "invalid libtool wrapper script '$wrapper'" - finalize=yes + finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi - libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false fi done @@ -3139,29 +4467,29 @@ func_mode_install () func_source "$wrapper" outputname= - if test "$fast_install" = no && test -n "$relink_command"; then + if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { - if test "$finalize" = yes; then + if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" + file=$func_basename_result + outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - $opt_silent || { + $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else - func_error "error: relink \`$file' with the above command before installing it" + func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi - file="$outputname" + file=$outputname else - func_warning "cannot relink \`$file'" + func_warning "cannot relink '$file'" fi } else @@ -3198,10 +4526,10 @@ func_mode_install () for file in $staticlibs; do func_basename "$file" - name="$func_basename_result" + name=$func_basename_result # Set up the ranlib parameters. - oldlib="$destdir/$name" + oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result @@ -3216,18 +4544,18 @@ func_mode_install () done test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" + func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } -test "$opt_mode" = install && func_mode_install ${1+"$@"} +test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p @@ -3235,16 +4563,17 @@ test "$opt_mode" = install && func_mode_install ${1+"$@"} # a dlpreopen symbol table. func_generate_dlsyms () { - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" + my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi @@ -3255,7 +4584,7 @@ func_generate_dlsyms () "") ;; *.c) # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" + nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" @@ -3263,34 +4592,36 @@ func_generate_dlsyms () func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif -#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST -#elif defined(__osf__) +#elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + /* External symbol declarations for the compiler. */\ " - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" @@ -3298,7 +4629,7 @@ extern \"C\" { progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 - func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done @@ -3318,10 +4649,10 @@ extern \"C\" { # Prepare the list of exported symbols if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" + export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' @@ -3331,7 +4662,7 @@ extern \"C\" { } else $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in @@ -3345,22 +4676,22 @@ extern \"C\" { fi for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" + func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" - name="$func_basename_result" + name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" - dlprefile_dlbasename="" + dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` - if test -n "$dlprefile_dlname" ; then + if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" - dlprefile_dlbasename="$func_basename_result" + dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" @@ -3368,7 +4699,7 @@ extern \"C\" { fi fi $opt_dry_run || { - if test -n "$dlprefile_dlbasename" ; then + if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" @@ -3424,6 +4755,11 @@ extern \"C\" { echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ @@ -3432,11 +4768,30 @@ typedef struct { void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi case $need_lib_prefix in no) @@ -3478,9 +4833,7 @@ static const void *lt_preloaded_setup() { *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi + $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; @@ -3497,10 +4850,10 @@ static const void *lt_preloaded_setup() { func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" + symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then @@ -3518,7 +4871,7 @@ static const void *lt_preloaded_setup() { esac ;; *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" + func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else @@ -3532,6 +4885,32 @@ static const void *lt_preloaded_setup() { fi } +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + # func_win32_libid arg # return the library type of file 'arg' # @@ -3541,8 +4920,9 @@ static const void *lt_preloaded_setup() { # Despite the name, also deal with 64 bit binaries. func_win32_libid () { - $opt_debug - win32_libid_type="unknown" + $debug_cmd + + win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import @@ -3552,16 +4932,29 @@ func_win32_libid () # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $SED -n -e ' + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' 1,100{ / I /{ - s,.*,import, + s|.*|import| p q } }'` + ;; + esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; @@ -3593,7 +4986,8 @@ func_win32_libid () # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { - $opt_debug + $debug_cmd + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } @@ -3610,7 +5004,8 @@ func_cygming_dll_for_implib () # specified import library. func_cygming_dll_for_implib_fallback_core () { - $opt_debug + $debug_cmd + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ @@ -3646,8 +5041,8 @@ func_cygming_dll_for_implib_fallback_core () /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the - # archive which possess that section. Heuristic: eliminate - # all those which have a first or second character that is + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually @@ -3658,30 +5053,6 @@ func_cygming_dll_for_implib_fallback_core () $SED -e '/^\./d;/^.\./d;q' } -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified @@ -3695,16 +5066,17 @@ func_cygming_ms_implib_p () # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { - $opt_debug - if func_cygming_gnu_implib_p "$1" ; then + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` - elif func_cygming_ms_implib_p "$1" ; then + elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown - sharedlib_from_linklib_result="" + sharedlib_from_linklib_result= fi } @@ -3712,10 +5084,11 @@ func_cygming_dll_for_implib_fallback () # func_extract_an_archive dir oldlib func_extract_an_archive () { - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - if test "$lock_old_archive_extraction" = yes; then + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" @@ -3724,7 +5097,7 @@ func_extract_an_archive () fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' - if test "$lock_old_archive_extraction" = yes; then + if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then @@ -3738,22 +5111,23 @@ func_extract_an_archive () # func_extract_archives gentop oldlib ... func_extract_archives () { - $opt_debug - my_gentop="$1"; shift + $debug_cmd + + my_gentop=$1; shift my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" - my_xlib="$func_basename_result" + my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in @@ -3765,7 +5139,7 @@ func_extract_archives () esac done extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" @@ -3778,22 +5152,23 @@ func_extract_archives () cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do @@ -3815,7 +5190,7 @@ func_extract_archives () my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done - func_extract_archives_result="$my_oldobjs" + func_extract_archives_result=$my_oldobjs } @@ -3830,7 +5205,7 @@ func_extract_archives () # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is +# will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () @@ -3841,7 +5216,7 @@ func_emit_wrapper () #! $SHELL # $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. @@ -3898,9 +5273,9 @@ _LTECHO_EOF' # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ which is used only on +# /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options which match +# (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and @@ -3933,7 +5308,7 @@ func_parse_lt_options () # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then - echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } @@ -3944,7 +5319,7 @@ func_lt_dump_args () lt_dump_args_N=1; for lt_arg do - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } @@ -3958,7 +5333,7 @@ func_exec_program_core () *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} @@ -3968,7 +5343,7 @@ func_exec_program_core () *) $ECHO "\ if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} @@ -4043,13 +5418,13 @@ func_exec_program () test -n \"\$absdir\" && thisdir=\"\$absdir\" " - if test "$fast_install" = yes; then + if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" @@ -4066,7 +5441,7 @@ func_exec_program () if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else - $ECHO \"\$relink_command_output\" >&2 + \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi @@ -4101,7 +5476,7 @@ func_exec_program () fi # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" @@ -4121,7 +5496,7 @@ func_exec_program () fi else # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 @@ -4140,7 +5515,7 @@ func_emit_cwrapperexe_src () cat < #include +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + /* declarations of non-ANSI functions */ -#if defined(__MINGW32__) +#if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif -#elif defined(__CYGWIN__) +#elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif -/* #elif defined (other platforms) ... */ +/* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ -#if defined(_MSC_VER) +#if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC -# ifndef _INTPTR_T_DEFINED -# define _INTPTR_T_DEFINED -# define intptr_t int -# endif -#elif defined(__MINGW32__) +#elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv -#elif defined(__CYGWIN__) +#elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" -/* #elif defined (other platforms) ... */ +/* #elif defined other platforms ... */ #endif -#if defined(PATH_MAX) +#if defined PATH_MAX # define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) +#elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 @@ -4234,8 +5607,8 @@ int setenv (const char *, const char *, int); # define PATH_SEPARATOR ':' #endif -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 @@ -4268,10 +5641,10 @@ int setenv (const char *, const char *, int); #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ + if (stale) { free (stale); stale = 0; } \ } while (0) -#if defined(LT_DEBUGWRAPPER) +#if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; @@ -4300,11 +5673,16 @@ void lt_dump_script (FILE *f); EOF cat < 0) && IS_PATH_SEPARATOR (new_value[len-1])) + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { - new_value[len-1] = '\0'; + new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); @@ -5082,27 +6460,47 @@ EOF # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { - $opt_debug + $debug_cmd + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + # func_mode_link arg... func_mode_link () { - $opt_debug + $debug_cmd + case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra + # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not + # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. @@ -5146,10 +6544,11 @@ func_mode_link () module=no no_install=no objs= + os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no - preload=no + preload=false prev= prevarg= release= @@ -5161,7 +6560,7 @@ func_mode_link () vinfo= vinfo_number=no weak_libs= - single_module="${wl}-single_module" + single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. @@ -5169,15 +6568,15 @@ func_mode_link () do case $arg in -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then @@ -5210,7 +6609,7 @@ func_mode_link () # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do - arg="$1" + arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result @@ -5227,21 +6626,21 @@ func_mode_link () case $prev in bindir) - bindir="$arg" + bindir=$arg prev= continue ;; dlfiles|dlprefiles) - if test "$preload" = no; then + $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" - preload=yes - fi + preload=: + } case $arg in *.la | *.lo) ;; # We handle these cases below. force) - if test "$dlself" = no; then + if test no = "$dlself"; then dlself=needless export_dynamic=yes fi @@ -5249,9 +6648,9 @@ func_mode_link () continue ;; self) - if test "$prev" = dlprefiles; then + if test dlprefiles = "$prev"; then dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless @@ -5261,7 +6660,7 @@ func_mode_link () continue ;; *) - if test "$prev" = dlfiles; then + if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" @@ -5272,14 +6671,14 @@ func_mode_link () esac ;; expsyms) - export_symbols="$arg" + export_symbols=$arg test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" + || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) - export_symbols_regex="$arg" + export_symbols_regex=$arg prev= continue ;; @@ -5297,7 +6696,13 @@ func_mode_link () continue ;; inst_prefix) - inst_prefix_dir="$arg" + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. prev= continue ;; @@ -5321,21 +6726,21 @@ func_mode_link () if test -z "$pic_object" || test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" - xdir="$func_dirname_result" + xdir=$func_dirname_result - if test "$pic_object" != none; then + if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" + pic_object=$xdir$pic_object - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue @@ -5346,7 +6751,7 @@ func_mode_link () fi # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then + if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= @@ -5354,23 +6759,23 @@ func_mode_link () # A PIC object. func_append libobjs " $pic_object" - arg="$pic_object" + arg=$pic_object fi # Non-PIC object. - if test "$non_pic_object" != none; then + if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" + non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" + non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else @@ -5378,7 +6783,7 @@ func_mode_link () if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" - xdir="$func_dirname_result" + xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result @@ -5386,24 +6791,29 @@ func_mode_link () func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else - func_fatal_error "\`$arg' is not a valid libtool object" + func_fatal_error "'$arg' is not a valid libtool object" fi fi done else - func_fatal_error "link input file \`$arg' does not exist" + func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; precious_regex) - precious_files_regex="$arg" + precious_files_regex=$arg prev= continue ;; release) - release="-$arg" + release=-$arg prev= continue ;; @@ -5415,7 +6825,7 @@ func_mode_link () func_fatal_error "only absolute run-paths are allowed" ;; esac - if test "$prev" = rpath; then + if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; @@ -5430,7 +6840,7 @@ func_mode_link () continue ;; shrext) - shrext_cmds="$arg" + shrext_cmds=$arg prev= continue ;; @@ -5470,7 +6880,7 @@ func_mode_link () esac fi # test -n "$prev" - prevarg="$arg" + prevarg=$arg case $arg in -all-static) @@ -5484,7 +6894,7 @@ func_mode_link () -allow-undefined) # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" + func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) @@ -5516,7 +6926,7 @@ func_mode_link () if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi - if test "X$arg" = "X-export-symbols"; then + if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex @@ -5550,9 +6960,9 @@ func_mode_link () func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" + func_fatal_error "require no space between '-L' and '$1'" else - func_fatal_error "need path for \`-L' option" + func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" @@ -5563,8 +6973,8 @@ func_mode_link () *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir ;; esac case "$deplibs " in @@ -5599,7 +7009,7 @@ func_mode_link () ;; -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) @@ -5607,11 +7017,11 @@ func_mode_link () ;; *-*-os2*) # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework @@ -5620,16 +7030,16 @@ func_mode_link () ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue + test X-lc = "X$arg" && continue ;; esac - elif test "X$arg" = "X-lc_r"; then + elif test X-lc_r = "X$arg"; then case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; @@ -5639,6 +7049,11 @@ func_mode_link () continue ;; + -mllvm) + prev=mllvm + continue + ;; + -module) module=yes continue @@ -5668,7 +7083,7 @@ func_mode_link () ;; -multi_module) - single_module="${wl}-multi_module" + single_module=$wl-multi_module continue ;; @@ -5682,8 +7097,8 @@ func_mode_link () *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; @@ -5701,6 +7116,11 @@ func_mode_link () continue ;; + -os2dllname) + prev=os2dllname + continue + ;; + -o) prev=output ;; -precious-files-regex) @@ -5788,14 +7208,14 @@ func_mode_link () func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= - save_ifs="$IFS"; IFS=',' + save_ifs=$IFS; IFS=, for flag in $args; do - IFS="$save_ifs" + IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done - IFS="$save_ifs" + IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; @@ -5804,15 +7224,15 @@ func_mode_link () func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= - save_ifs="$IFS"; IFS=',' + save_ifs=$IFS; IFS=, for flag in $args; do - IFS="$save_ifs" + IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done - IFS="$save_ifs" + IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; @@ -5835,7 +7255,7 @@ func_mode_link () # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" + arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: @@ -5847,25 +7267,49 @@ func_mode_link () # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support - # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files + # -stdlib=* select c++ std lib with clang + # -fsanitize=* Clang/GCC memory and address sanitizer -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-flto*|-fwhopr*|-fuse-linker-plugin) + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*|-fsanitize=*) func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" + arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + fi + ;; + # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" + arg=$func_quote_for_eval_result ;; *.$objext) @@ -5886,21 +7330,21 @@ func_mode_link () if test -z "$pic_object" || test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" - xdir="$func_dirname_result" + xdir=$func_dirname_result - if test "$pic_object" != none; then + test none = "$pic_object" || { # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" + pic_object=$xdir$pic_object - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue @@ -5911,7 +7355,7 @@ func_mode_link () fi # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then + if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= @@ -5919,23 +7363,23 @@ func_mode_link () # A PIC object. func_append libobjs " $pic_object" - arg="$pic_object" - fi + arg=$pic_object + } # Non-PIC object. - if test "$non_pic_object" != none; then + if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" + non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" + non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else @@ -5943,7 +7387,7 @@ func_mode_link () if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" - xdir="$func_dirname_result" + xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result @@ -5951,7 +7395,7 @@ func_mode_link () func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else - func_fatal_error "\`$arg' is not a valid libtool object" + func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; @@ -5967,11 +7411,11 @@ func_mode_link () # A libtool-controlled library. func_resolve_sysroot "$arg" - if test "$prev" = dlfiles; then + if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= - elif test "$prev" = dlprefiles; then + elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= @@ -5986,7 +7430,7 @@ func_mode_link () # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" + arg=$func_quote_for_eval_result ;; esac # arg @@ -5998,9 +7442,9 @@ func_mode_link () done # argument parsing loop test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" + func_fatal_help "the '$prevarg' option requires an argument" - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" @@ -6009,20 +7453,23 @@ func_mode_link () oldlibs= # calculate the name of the file, without its directory func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" + outputname=$func_basename_result + libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" + output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. @@ -6045,7 +7492,7 @@ func_mode_link () # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do - if $opt_preserve_dup_deps ; then + if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac @@ -6053,7 +7500,7 @@ func_mode_link () func_append libs " $deplib" done - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps @@ -6085,7 +7532,7 @@ func_mode_link () case $file in *.la) ;; *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done @@ -6093,7 +7540,7 @@ func_mode_link () prog) compile_deplibs= finalize_deplibs= - alldeplibs=no + alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" @@ -6105,32 +7552,32 @@ func_mode_link () for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then + if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done - deplibs="$tmp_deplibs" + deplibs=$tmp_deplibs fi - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs deplibs= fi - if test "$linkmode" = prog; then + if test prog = "$linkmode"; then case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then + if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs @@ -6151,26 +7598,26 @@ func_mode_link () esac done done - libs="$dlprefiles" + libs=$dlprefiles fi - if test "$pass" = dlopen; then + if test dlopen = "$pass"; then # Collect dlpreopened libraries - save_deplibs="$deplibs" + save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= - found=no + found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - if test "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" - if test "$linkmode" = lib ; then + if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; @@ -6180,13 +7627,13 @@ func_mode_link () continue ;; -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" @@ -6194,31 +7641,22 @@ func_mode_link () for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" + lib=$searchdir/lib$name$search_ext if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes + if test .la = "$search_ext"; then + found=: else - found=no + found=false fi break 2 fi done done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library + if $found; then + # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then @@ -6226,19 +7664,19 @@ func_mode_link () old_library= func_source "$lib" for l in $old_library $library_names; do - ll="$l" + ll=$l done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no + if test "X$ll" = "X$old_library"; then # only static version available + found=false func_dirname "$lib" "" "." - ladir="$func_dirname_result" + ladir=$func_dirname_result lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi @@ -6247,15 +7685,25 @@ func_mode_link () *) ;; esac fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue fi ;; # -l *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then + if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; @@ -6268,18 +7716,18 @@ func_mode_link () case $linkmode in lib) deplibs="$deplib $deplibs" - test "$pass" = conv && continue + test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) - if test "$pass" = conv; then + if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi - if test "$pass" = scan; then + if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" @@ -6290,13 +7738,13 @@ func_mode_link () func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) - func_warning "\`-L' is ignored for archives/objects" + func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) - if test "$pass" = link; then + if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result @@ -6314,7 +7762,7 @@ func_mode_link () lib=$func_resolve_sysroot_result ;; *.$libext) - if test "$pass" = conv; then + if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi @@ -6325,21 +7773,26 @@ func_mode_link () case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) - valid_a_lib=no + valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes + valid_a_lib=: fi ;; pass_all) - valid_a_lib=yes + valid_a_lib=: ;; esac - if test "$valid_a_lib" != yes; then + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" @@ -6347,18 +7800,13 @@ func_mode_link () echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." - else - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) - if test "$pass" != link; then + if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" @@ -6369,10 +7817,10 @@ func_mode_link () esac # linkmode ;; # *.$libext *.lo | *.$objext) - if test "$pass" = conv; then + if test conv = "$pass"; then deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" @@ -6385,22 +7833,20 @@ func_mode_link () continue ;; %DEPLIBS%) - alldeplibs=yes + alldeplibs=: continue ;; esac # case $deplib - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" + || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." - ladir="$func_dirname_result" + ladir=$func_dirname_result dlname= dlopen= @@ -6430,19 +7876,19 @@ func_mode_link () done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi - if test "$pass" = conv; then + if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" + func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" @@ -6450,15 +7896,15 @@ func_mode_link () tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps ; then + if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" fi continue fi # $pass = conv @@ -6467,26 +7913,26 @@ func_mode_link () # Get the name of the library we link against. linklib= if test -n "$old_library" && - { test "$prefer_static_libs" = yes || - test "$prefer_static_libs,$installed" = "built,no"; }; then + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do - linklib="$l" + linklib=$l done fi if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" + func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't @@ -6500,40 +7946,40 @@ func_mode_link () # We need an absolute path. case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" + abs_ladir=$ladir fi ;; esac func_basename "$lib" - laname="$func_basename_result" + laname=$func_basename_result # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then + if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir else - dir="$lt_sysroot$libdir" - absdir="$lt_sysroot$libdir" + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" + dir=$ladir + absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi @@ -6542,11 +7988,11 @@ func_mode_link () name=$func_stripname_result # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi - case "$host" in + case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both @@ -6590,9 +8036,9 @@ func_mode_link () if test -z "$libdir"; then # Link the convenience library - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then + elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else @@ -6602,14 +8048,14 @@ func_mode_link () fi - if test "$linkmode" = prog && test "$pass" != link; then + if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: fi tmp_libs= @@ -6621,14 +8067,14 @@ func_mode_link () ;; esac # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then + if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi - if $opt_preserve_dup_deps ; then + if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac @@ -6638,15 +8084,15 @@ func_mode_link () continue fi # $linkmode = prog... - if test "$linkmode,$pass" = "prog,link"; then + if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in + case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac @@ -6675,9 +8121,9 @@ func_mode_link () esac fi # $linkmode,$pass = prog,link... - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue @@ -6686,19 +8132,19 @@ func_mode_link () link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then + if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then + { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in - *cygwin* | *mingw* | *cegcc*) + *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) - if test "$installed" = no; then + if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi @@ -6708,24 +8154,24 @@ func_mode_link () # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" + dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" + dlopenmodule=$dlpremoduletest break fi done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo - if test "$linkmode" = prog; then + if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. @@ -6753,43 +8199,43 @@ func_mode_link () # figure out the soname set dummy $library_names shift - realname="$1" + realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then - soname="$dlname" + soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in - *cygwin* | mingw* | *cegcc*) + *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result - versuffix="-$major" + versuffix=-$major ;; esac eval soname=\"$soname_spec\" else - soname="$realname" + soname=$realname fi # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" + soroot=$soname func_basename "$soroot" - soname="$func_basename_result" + soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else - func_verbose "extracting exported symbol list from \`$soname'" + func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" + func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library @@ -6797,58 +8243,58 @@ func_mode_link () linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" - if test "$linkmode" = prog || test "$opt_mode" != relink; then + if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" + if test no = "$hardcode_direct"; then + add=$dir/$linklib case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; + *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not + # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then + $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then + if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else - add="$dir/$old_library" + add=$dir/$old_library fi elif test -n "$old_library"; then - add="$dir/$old_library" + add=$dir/$old_library fi fi esac - elif test "$hardcode_minus_L" = no; then + elif test no = "$hardcode_minus_L"; then case $host in - *-*-sunos*) add_shlibpath="$dir" ;; + *-*-sunos*) add_shlibpath=$dir ;; esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name else lib_linked=no fi ;; relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$absdir" + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in @@ -6857,10 +8303,10 @@ func_mode_link () ;; esac fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name else lib_linked=no fi @@ -6868,7 +8314,7 @@ func_mode_link () *) lib_linked=no ;; esac - if test "$lib_linked" != yes; then + if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi @@ -6878,15 +8324,15 @@ func_mode_link () *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi - if test "$linkmode" = prog; then + if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; @@ -6895,33 +8341,33 @@ func_mode_link () fi fi - if test "$linkmode" = prog || test "$opt_mode" = relink; then + if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$libdir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then + add=-l$name + elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib else - add="$libdir/$linklib" + add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" + add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in @@ -6930,10 +8376,10 @@ func_mode_link () ;; esac fi - add="-l$name" + add=-l$name fi - if test "$linkmode" = prog; then + if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else @@ -6941,43 +8387,43 @@ func_mode_link () test -n "$add" && deplibs="$add $deplibs" fi fi - elif test "$linkmode" = prog; then + elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi - elif test "$build_libtool_libs" = yes; then + elif test yes = "$build_libtool_libs"; then # Not a shared library - if test "$deplibs_check_method" != pass_all; then + if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo - $ECHO "*** Warning: This system can not link to static lib archive $lib." + $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then + if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." + echo "*** 'nm' from GNU binutils and a full rebuild may help." fi - if test "$build_old_libs" = no; then + if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else @@ -6990,11 +8436,11 @@ func_mode_link () fi fi # link shared/static library? - if test "$linkmode" = lib; then + if test lib = "$linkmode"; then if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do @@ -7008,12 +8454,12 @@ func_mode_link () *) func_append temp_deplibs " $libdir";; esac done - dependency_libs="$temp_deplibs" + dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do @@ -7023,7 +8469,7 @@ func_mode_link () func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac - if $opt_preserve_dup_deps ; then + if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; @@ -7032,12 +8478,12 @@ func_mode_link () func_append tmp_libs " $func_resolve_sysroot_result" done - if test "$link_all_deplibs" != no; then + if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in - -L*) path="$deplib" ;; + -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result @@ -7045,12 +8491,12 @@ func_mode_link () dir=$func_dirname_result # We need an absolute path. case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir fi ;; esac @@ -7058,35 +8504,35 @@ func_mode_link () case $host in *-*-darwin*) depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do depdepl=$tmp done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi - func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) - path="-L$absdir/$objdir" + path=-L$absdir/$objdir ;; esac else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" + func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" + func_warning "'$deplib' seems to be moved" - path="-L$absdir" + path=-L$absdir fi ;; esac @@ -7098,23 +8544,23 @@ func_mode_link () fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then + if test link = "$pass"; then + if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then + if test dlopen != "$pass"; then + test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do @@ -7124,12 +8570,12 @@ func_mode_link () esac done newlib_search_path= - fi + } - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else + if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" + else + vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order @@ -7187,62 +8633,93 @@ func_mode_link () eval $var=\"$tmp_libs\" done # for var fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= - for i in $dependency_libs ; do + for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) - i="" + i= ;; esac - if test -n "$i" ; then + if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" + if test prog = "$linkmode"; then + dlfiles=$newdlfiles fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles fi case $linkmode in oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; + func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" + func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" + func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" + func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ - func_warning "\`-release' is ignored for archives" + func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" + func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no - oldlibs="$output" + oldlibs=$output func_append objs "$old_deplibs" ;; lib) - # Make sure we only generate libraries of the form `libNAME.la'. + # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" @@ -7251,10 +8728,10 @@ func_mode_link () eval libname=\"$libname_spec\" ;; *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" - if test "$need_lib_prefix" != no; then + if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result @@ -7268,8 +8745,8 @@ func_mode_link () esac if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" @@ -7278,21 +8755,21 @@ func_mode_link () fi fi - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" - install_libdir="$1" + install_libdir=$1 oldlibs= if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so + # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" @@ -7301,20 +8778,20 @@ func_mode_link () fi test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" + func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. - save_ifs="$IFS"; IFS=':' + save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift - IFS="$save_ifs" + IFS=$save_ifs test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" + func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts @@ -7322,45 +8799,45 @@ func_mode_link () case $vinfo_number in yes) - number_major="$1" - number_minor="$2" - number_revision="$3" + number_major=$1 + number_minor=$2 + number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix - # which has an extra 1 added just for fun + # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor - darwin|linux|osf|windows|none) + darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result - age="$number_minor" - revision="$number_revision" + age=$number_minor + revision=$number_revision ;; - freebsd-aout|freebsd-elf|qnx|sunos) - current="$number_major" - revision="$number_minor" - age="0" + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result - age="$number_minor" - revision="$number_minor" + age=$number_minor + revision=$number_minor lt_irix_increment=no ;; *) - func_fatal_configuration "$modename: unknown library version type \`$version_type'" + func_fatal_configuration "$modename: unknown library version type '$version_type'" ;; esac ;; no) - current="$1" - revision="$2" - age="$3" + current=$1 + revision=$2 + age=$3 ;; esac @@ -7368,30 +8845,30 @@ func_mode_link () case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. @@ -7406,26 +8883,36 @@ func_mode_link () # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result - versuffix="$major.$age.$revision" + versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac ;; freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; + major=.$current + versuffix=.$current.$revision ;; freebsd-elf) - major=".$current" - versuffix=".$current" + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision ;; irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then + if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 @@ -7436,69 +8923,74 @@ func_mode_link () nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac - verstring="$verstring_prefix$major.$revision" + verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision - while test "$loop" -ne 0; do + while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" + verstring=$verstring_prefix$major.$iface:$verstring done - # Before this point, $major must not contain `.'. + # Before this point, $major must not contain '.'. major=.$major - versuffix="$major.$revision" + versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result - versuffix="$major.$age.$revision" + versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age - while test "$loop" -ne 0; do + while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result - verstring="$verstring:${iface}.0" + verstring=$verstring:$iface.0 done # Make executables depend on our current version. - func_append verstring ":${current}.0" + func_append verstring ":$current.0" ;; qnx) - major=".$current" - versuffix=".$current" + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current ;; sunos) - major=".$current" - versuffix=".$current.$revision" + major=.$current + versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. + # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result - versuffix="-$major" + versuffix=-$major ;; *) - func_fatal_configuration "unknown library version type \`$version_type'" + func_fatal_configuration "unknown library version type '$version_type'" ;; esac @@ -7512,42 +9004,45 @@ func_mode_link () verstring= ;; *) - verstring="0.0" + verstring=0.0 ;; esac - if test "$need_version" = no; then + if test no = "$need_version"; then versuffix= else - versuffix=".0.0" + versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then + if test yes,no = "$avoid_version,$need_version"; then major= versuffix= - verstring="" + verstring= fi # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi fi else # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" + allow_undefined_flag=$no_undefined_flag fi fi - func_generate_dlsyms "$libname" "$libname" "yes" + func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" - test "X$libobjs" = "X " && libobjs= + test " " = "$libobjs" && libobjs= - if test "$opt_mode" != relink; then + if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= @@ -7556,8 +9051,8 @@ func_mode_link () case $p in *.$objext | *.gcno) ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue @@ -7573,11 +9068,11 @@ func_mode_link () fi # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. @@ -7598,13 +9093,13 @@ func_mode_link () *) func_append finalize_rpath " $libdir" ;; esac done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" + old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in @@ -7614,7 +9109,7 @@ func_mode_link () done # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" + old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in @@ -7623,7 +9118,7 @@ func_mode_link () esac done - if test "$build_libtool_libs" = yes; then + if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) @@ -7647,7 +9142,7 @@ func_mode_link () ;; *) # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then + if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; @@ -7663,9 +9158,9 @@ func_mode_link () # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? - release="" - versuffix="" - major="" + release= + versuffix= + major= newdeplibs= droppeddeps=no case $deplibs_check_method in @@ -7694,20 +9189,20 @@ EOF -l*) func_stripname -l '' "$i" name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" - i="" + i= ;; esac fi - if test -n "$i" ; then + if test -n "$i"; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then func_append newdeplibs " $i" else droppeddeps=yes @@ -7737,20 +9232,20 @@ EOF $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $i; then ldd_output=`ldd conftest` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" - i="" + i= ;; esac fi - if test -n "$i" ; then + if test -n "$i"; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 - if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then func_append newdeplibs " $i" else droppeddeps=yes @@ -7787,24 +9282,24 @@ EOF -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" - a_deplib="" + a_deplib= ;; esac fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` if test -n "$file_magic_glob"; then libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` else libnameglob=$libname fi - test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` + test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - if test "$want_nocaseglob" = yes; then + if test yes = "$want_nocaseglob"; then shopt -s nocaseglob potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` $nocaseglob @@ -7822,25 +9317,25 @@ EOF # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? - potlib="$potent_lib" + potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" - a_deplib="" + a_deplib= break 2 fi done done fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." @@ -7848,7 +9343,7 @@ EOF echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then + if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" @@ -7871,30 +9366,30 @@ EOF -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" - a_deplib="" + a_deplib= ;; esac fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test + potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" - a_deplib="" + a_deplib= break 2 fi done done fi - if test -n "$a_deplib" ; then + if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." @@ -7902,7 +9397,7 @@ EOF echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then + if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" @@ -7918,18 +9413,18 @@ EOF done # Gone through all deplibs. ;; none | unknown | *) - newdeplibs="" + newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo - if test "X$deplibs_check_method" = "Xnone"; then + if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." @@ -7953,8 +9448,8 @@ EOF ;; esac - if test "$droppeddeps" = yes; then - if test "$module" = yes; then + if test yes = "$droppeddeps"; then + if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" @@ -7963,12 +9458,12 @@ EOF if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." + echo "*** 'nm' from GNU binutils and a full rebuild may help." fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else @@ -7979,14 +9474,14 @@ EOF echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." - if test "$allow_undefined" = no; then + if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else @@ -8032,7 +9527,7 @@ EOF *) func_append new_libs " $deplib" ;; esac done - deplibs="$new_libs" + deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= @@ -8040,25 +9535,25 @@ EOF dlname= # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - # Remove ${wl} instances when linking with ld. + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac - if test "$hardcode_into_libs" = yes; then + if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= - rpath="$finalize_rpath" - test "$opt_mode" != relink && rpath="$compile_rpath$rpath" + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" + hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in @@ -8083,7 +9578,7 @@ EOF # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" + libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then @@ -8097,8 +9592,8 @@ EOF test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi - shlibpath="$finalize_shlibpath" - test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi @@ -8108,19 +9603,19 @@ EOF eval library_names=\"$library_names_spec\" set dummy $library_names shift - realname="$1" + realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else - soname="$realname" + soname=$realname fi if test -z "$dlname"; then dlname=$soname fi - lib="$output_objdir/$realname" + lib=$output_objdir/$realname linknames= for link do @@ -8134,7 +9629,7 @@ EOF delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi @@ -8143,31 +9638,31 @@ EOF cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. - orig_export_symbols="$export_symbols" + orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes - fi + } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' + save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do - IFS="$save_ifs" + IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in @@ -8181,7 +9676,7 @@ EOF try_normal_branch=no ;; esac - if test "$try_normal_branch" = yes \ + if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then @@ -8192,7 +9687,7 @@ EOF output_la=$func_basename_result save_libobjs=$libobjs save_output=$output - output=${output_objdir}/${output_la}.nm + output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" @@ -8215,8 +9710,8 @@ EOF break fi done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi @@ -8224,16 +9719,16 @@ EOF fi if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine + # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. @@ -8252,11 +9747,11 @@ EOF ;; esac done - deplibs="$tmp_deplibs" + deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && + test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. @@ -8267,7 +9762,7 @@ EOF eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience @@ -8276,18 +9771,18 @@ EOF fi fi - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking - if test "$opt_mode" = relink; then + if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then + if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds @@ -8305,7 +9800,7 @@ EOF fi fi - if test "X$skipped_export" != "X:" && + if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then @@ -8338,8 +9833,8 @@ EOF last_robj= k=1 - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs @@ -8351,14 +9846,14 @@ EOF func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= - if test "$compiler_needs_object" = yes; then + if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi @@ -8373,7 +9868,7 @@ EOF else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext + output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result @@ -8385,13 +9880,13 @@ EOF func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result - if test "X$objlist" = X || + if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. - if test "$k" -eq 1 ; then + if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" @@ -8401,10 +9896,10 @@ EOF reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi - last_robj=$output_objdir/$output_la-${k}.$objext + last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext + output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result @@ -8416,9 +9911,9 @@ EOF # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" - eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" @@ -8426,9 +9921,9 @@ EOF output= fi - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. @@ -8437,16 +9932,16 @@ EOF if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi - fi + } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' + save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { + IFS=$save_ifs + $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } @@ -8454,7 +9949,7 @@ EOF lt_exit=$? # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then + if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) @@ -8463,7 +9958,7 @@ EOF exit $lt_exit } done - IFS="$save_ifs" + IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' @@ -8471,18 +9966,18 @@ EOF fi fi - if ${skipped_export-false}; then + ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine + # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. @@ -8491,7 +9986,7 @@ EOF export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi - fi + } libobjs=$output # Restore the value of output. @@ -8505,7 +10000,7 @@ EOF # value of $libobjs for piecewise linking. # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then + if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else @@ -8527,7 +10022,7 @@ EOF # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles @@ -8535,11 +10030,12 @@ EOF test "X$libobjs" = "X " && libobjs= fi - save_ifs="$IFS"; IFS='~' + save_ifs=$IFS; IFS='~' for cmd in $cmds; do - IFS="$save_ifs" + IFS=$sp$nl eval cmd=\"$cmd\" - $opt_silent || { + IFS=$save_ifs + $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } @@ -8547,7 +10043,7 @@ EOF lt_exit=$? # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then + if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) @@ -8556,10 +10052,10 @@ EOF exit $lt_exit } done - IFS="$save_ifs" + IFS=$save_ifs # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then + if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then @@ -8579,39 +10075,39 @@ EOF done # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then + if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. - dlname="$soname" + dlname=$soname fi fi ;; obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; + func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" + func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" + func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" + func_warning "'-version-info' is ignored for objects" test -n "$release" && \ - func_warning "\`-release' is ignored for objects" + func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" + func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" @@ -8619,7 +10115,7 @@ EOF ;; *) libobj= - obj="$output" + obj=$output ;; esac @@ -8632,17 +10128,19 @@ EOF # the extraction. reload_conv_objs= gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else - gentop="$output_objdir/${obj}x" + gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience @@ -8651,12 +10149,12 @@ EOF fi # If we're not building shared, we need to use non_pic_objs - test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs - output="$obj" + output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. @@ -8668,7 +10166,7 @@ EOF exit $EXIT_SUCCESS fi - if test "$build_libtool_libs" != yes; then + test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi @@ -8678,12 +10176,12 @@ EOF # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS - fi + } - if test -n "$pic_flag" || test "$pic_mode" != default; then + if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" - output="$libobj" + output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi @@ -8700,16 +10198,14 @@ EOF output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" + func_warning "'-version-info' is ignored for programs" test -n "$release" && \ - func_warning "\`-release' is ignored for programs" + func_warning "'-release' is ignored for programs" - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) @@ -8723,11 +10219,11 @@ EOF *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then + if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) - func_append compile_command " ${wl}-bind_at_load" - func_append finalize_command " ${wl}-bind_at_load" + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" ;; esac fi @@ -8763,7 +10259,7 @@ EOF *) func_append new_libs " $deplib" ;; esac done - compile_deplibs="$new_libs" + compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" @@ -8787,7 +10283,7 @@ EOF if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" + hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in @@ -8810,7 +10306,7 @@ EOF fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; @@ -8827,10 +10323,10 @@ EOF # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" + libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi - compile_rpath="$rpath" + compile_rpath=$rpath rpath= hardcode_libdirs= @@ -8838,7 +10334,7 @@ EOF if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" + hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in @@ -8863,45 +10359,43 @@ EOF # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" + libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi - finalize_rpath="$rpath" + finalize_rpath=$rpath - if test -n "$libobjs" && test "$build_old_libs" = yes; then + if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi - wrappers_required=yes + wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=no + wrappers_required=false ;; *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi + test yes = "$build_libtool_libs" || wrappers_required=false ;; *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false fi ;; esac - if test "$wrappers_required" = no; then + $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" + link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 @@ -8914,12 +10408,12 @@ EOF fi # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status - fi + } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" @@ -8949,9 +10443,9 @@ EOF fi fi - if test "$no_install" = yes; then + if test yes = "$no_install"; then # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" + link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. @@ -8968,27 +10462,28 @@ EOF exit $EXIT_SUCCESS fi - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` @@ -9045,8 +10540,8 @@ EOF func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 @@ -9067,7 +10562,7 @@ EOF trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then + if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result @@ -9090,25 +10585,27 @@ EOF # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience build_libtool_libs=no - else + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - func_append oldobjs " $symfileobj" - fi - fi - addlibs="$old_convenience" - fi + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs @@ -9116,13 +10613,13 @@ EOF fi # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles @@ -9143,7 +10640,7 @@ EOF : else echo "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" + gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs @@ -9152,7 +10649,7 @@ EOF for obj in $save_oldobjs do func_basename "$obj" - objbase="$func_basename_result" + objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) @@ -9221,18 +10718,18 @@ EOF else # the above command should be used before it gets too long oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then + if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist - if test "X$oldobjs" = "X" ; then + if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" @@ -9249,7 +10746,7 @@ EOF case $output in *.la) old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" + test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior @@ -9264,31 +10761,31 @@ EOF fi done # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then + if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do - if test "$installed" = yes; then + if test yes = "$installed"; then if test -z "$install_libdir"; then break fi - output="$output_objdir/$outputname"i + output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" - name="$func_basename_result" + name=$func_basename_result func_resolve_sysroot "$deplib" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" + func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) @@ -9304,23 +10801,23 @@ EOF *) func_append newdependency_libs " $deplib" ;; esac done - dependency_libs="$newdependency_libs" + dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" + func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done - dlfiles="$newdlfiles" + dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in @@ -9330,34 +10827,34 @@ EOF # didn't already link the preopened objects directly into # the library: func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" + func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done - dlprefiles="$newdlprefiles" + dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done - dlfiles="$newdlfiles" + dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done - dlprefiles="$newdlprefiles" + dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin @@ -9373,10 +10870,9 @@ EOF case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. - if test "x$bindir" != x ; - then + if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result$dlname + tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname @@ -9385,7 +10881,7 @@ EOF esac $ECHO > $output "\ # $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. @@ -9399,7 +10895,7 @@ library_names='$library_names' # The name of the static archive. old_library='$old_library' -# Linker flags that can not go in dependency_libs. +# Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. @@ -9425,7 +10921,7 @@ dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then + if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi @@ -9440,27 +10936,29 @@ relink_command=\"$relink_command\"" exit $EXIT_SUCCESS } -{ test "$opt_mode" = link || test "$opt_mode" = relink; } && - func_mode_link ${1+"$@"} +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi # func_mode_uninstall arg... func_mode_uninstall () { - $opt_debug - RM="$nonopt" + $debug_cmd + + RM=$nonopt files= - rmforce= + rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. - libtool_install_magic="$magic" + libtool_install_magic=$magic for arg do case $arg in - -f) func_append RM " $arg"; rmforce=yes ;; + -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac @@ -9473,18 +10971,18 @@ func_mode_uninstall () for file in $files; do func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - odir="$objdir" + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir else - odir="$dir/$objdir" + odir=$dir/$objdir fi func_basename "$file" - name="$func_basename_result" - test "$opt_mode" = uninstall && odir="$dir" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates - if test "$opt_mode" = clean; then + if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; @@ -9499,11 +10997,11 @@ func_mode_uninstall () elif test -d "$file"; then exit_status=1 continue - elif test "$rmforce" = yes; then + elif $rmforce; then continue fi - rmfiles="$file" + rmfiles=$file case $name in *.la) @@ -9517,7 +11015,7 @@ func_mode_uninstall () done test -n "$old_library" && func_append rmfiles " $odir/$old_library" - case "$opt_mode" in + case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; @@ -9528,12 +11026,12 @@ func_mode_uninstall () uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; @@ -9549,21 +11047,19 @@ func_mode_uninstall () func_source $dir/$name # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then + if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then + if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) - if test "$opt_mode" = clean ; then + if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) @@ -9590,12 +11086,12 @@ func_mode_uninstall () # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles - func_append rmfiles " $odir/$name $odir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi - if test "X$noexename" != "X$name" ; then - func_append rmfiles " $odir/lt-${noexename}.c" + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" fi fi fi @@ -9604,7 +11100,7 @@ func_mode_uninstall () func_show_eval "$RM $rmfiles" 'exit_status=1' done - # Try to remove the ${objdir}s in the directories where we deleted files + # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" @@ -9614,16 +11110,17 @@ func_mode_uninstall () exit $exit_status } -{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && - func_mode_uninstall ${1+"$@"} +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi test -z "$opt_mode" && { - help="$generic_help" + help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$opt_mode'" + func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" @@ -9634,7 +11131,7 @@ exit $exit_status # The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting +# where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support @@ -9657,5 +11154,3 @@ build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # mode:shell-script # sh-indentation:2 # End: -# vi:sw=2 - diff --git a/src/secp256k1/build-aux/m4/ax_jni_include_dir.m4 b/src/secp256k1/build-aux/m4/ax_jni_include_dir.m4 new file mode 100644 index 00000000..1fc36276 --- /dev/null +++ b/src/secp256k1/build-aux/m4/ax_jni_include_dir.m4 @@ -0,0 +1,140 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_jni_include_dir.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_JNI_INCLUDE_DIR +# +# DESCRIPTION +# +# AX_JNI_INCLUDE_DIR finds include directories needed for compiling +# programs using the JNI interface. +# +# JNI include directories are usually in the Java distribution. This is +# deduced from the value of $JAVA_HOME, $JAVAC, or the path to "javac", in +# that order. When this macro completes, a list of directories is left in +# the variable JNI_INCLUDE_DIRS. +# +# Example usage follows: +# +# AX_JNI_INCLUDE_DIR +# +# for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS +# do +# CPPFLAGS="$CPPFLAGS -I$JNI_INCLUDE_DIR" +# done +# +# If you want to force a specific compiler: +# +# - at the configure.in level, set JAVAC=yourcompiler before calling +# AX_JNI_INCLUDE_DIR +# +# - at the configure level, setenv JAVAC +# +# Note: This macro can work with the autoconf M4 macros for Java programs. +# This particular macro is not part of the original set of macros. +# +# LICENSE +# +# Copyright (c) 2008 Don Anderson +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 10 + +AU_ALIAS([AC_JNI_INCLUDE_DIR], [AX_JNI_INCLUDE_DIR]) +AC_DEFUN([AX_JNI_INCLUDE_DIR],[ + +JNI_INCLUDE_DIRS="" + +if test "x$JAVA_HOME" != x; then + _JTOPDIR="$JAVA_HOME" +else + if test "x$JAVAC" = x; then + JAVAC=javac + fi + AC_PATH_PROG([_ACJNI_JAVAC], [$JAVAC], [no]) + if test "x$_ACJNI_JAVAC" = xno; then + AC_MSG_WARN([cannot find JDK; try setting \$JAVAC or \$JAVA_HOME]) + fi + _ACJNI_FOLLOW_SYMLINKS("$_ACJNI_JAVAC") + _JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[[^/]]*$::'` +fi + +case "$host_os" in + darwin*) _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'` + _JINC="$_JTOPDIR/Headers";; + *) _JINC="$_JTOPDIR/include";; +esac +_AS_ECHO_LOG([_JTOPDIR=$_JTOPDIR]) +_AS_ECHO_LOG([_JINC=$_JINC]) + +# On Mac OS X 10.6.4, jni.h is a symlink: +# /System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/jni.h +# -> ../../CurrentJDK/Headers/jni.h. + +AC_CACHE_CHECK(jni headers, ac_cv_jni_header_path, +[ +if test -f "$_JINC/jni.h"; then + ac_cv_jni_header_path="$_JINC" + JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $ac_cv_jni_header_path" +else + _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'` + if test -f "$_JTOPDIR/include/jni.h"; then + ac_cv_jni_header_path="$_JTOPDIR/include" + JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $ac_cv_jni_header_path" + else + ac_cv_jni_header_path=none + fi +fi +]) + + + +# get the likely subdirectories for system specific java includes +case "$host_os" in +bsdi*) _JNI_INC_SUBDIRS="bsdos";; +darwin*) _JNI_INC_SUBDIRS="darwin";; +freebsd*) _JNI_INC_SUBDIRS="freebsd";; +linux*) _JNI_INC_SUBDIRS="linux genunix";; +osf*) _JNI_INC_SUBDIRS="alpha";; +solaris*) _JNI_INC_SUBDIRS="solaris";; +mingw*) _JNI_INC_SUBDIRS="win32";; +cygwin*) _JNI_INC_SUBDIRS="win32";; +*) _JNI_INC_SUBDIRS="genunix";; +esac + +if test "x$ac_cv_jni_header_path" != "xnone"; then + # add any subdirectories that are present + for JINCSUBDIR in $_JNI_INC_SUBDIRS + do + if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then + JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR" + fi + done +fi +]) + +# _ACJNI_FOLLOW_SYMLINKS +# Follows symbolic links on , +# finally setting variable _ACJNI_FOLLOWED +# ---------------------------------------- +AC_DEFUN([_ACJNI_FOLLOW_SYMLINKS],[ +# find the include directory relative to the javac executable +_cur="$1" +while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do + AC_MSG_CHECKING([symlink for $_cur]) + _slink=`ls -ld "$_cur" | sed 's/.* -> //'` + case "$_slink" in + /*) _cur="$_slink";; + # 'X' avoids triggering unwanted echo options. + *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[[^/]]*$::'`"$_slink";; + esac + AC_MSG_RESULT([$_cur]) +done +_ACJNI_FOLLOWED="$_cur" +])# _ACJNI diff --git a/src/secp256k1/build-aux/m4/libtool.m4 b/src/secp256k1/build-aux/m4/libtool.m4 index d7c043f4..ee80844b 100644 --- a/src/secp256k1/build-aux/m4/libtool.m4 +++ b/src/secp256k1/build-aux/m4/libtool.m4 @@ -1,8 +1,6 @@ # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. +# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives @@ -10,36 +8,30 @@ # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of -# the License, or (at your option) any later version. +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. # -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. # -# GNU Libtool is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of +# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program. If not, see . ]) -# serial 57 LT_INIT +# serial 58 LT_INIT # LT_PREREQ(VERSION) @@ -67,7 +59,7 @@ esac # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl @@ -91,7 +83,7 @@ dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" +LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' @@ -111,26 +103,43 @@ dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + # _LT_CC_BASENAME(CC) # ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} @@ -177,15 +186,16 @@ m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl +m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our +# See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then +if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) -if test -n "${ZSH_VERSION+set}" ; then +if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi @@ -198,7 +208,7 @@ aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then + if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi @@ -209,14 +219,14 @@ esac ofile=libtool can_build_shared=yes -# All known linkers require a `.a' archive for static linking (except MSVC, +# All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a -with_gnu_ld="$lt_cv_prog_gnu_ld" +with_gnu_ld=$lt_cv_prog_gnu_ld -old_CC="$CC" -old_CFLAGS="$CFLAGS" +old_CC=$CC +old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc @@ -269,14 +279,14 @@ no_glob_subst='s/\*/\\\*/g' # _LT_PROG_LTMAIN # --------------- -# Note that this code is called both from `configure', and `config.status' +# Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, +# 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" +ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN @@ -286,7 +296,7 @@ ltmain="$ac_aux_dir/ltmain.sh" # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' +# in macros and then make a single call at the end using the 'libtool' # label. @@ -421,8 +431,8 @@ m4_define([_lt_decl_all_varnames], # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME +# Quote a variable value, and forward it to 'config.status' so that its +# declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) @@ -446,7 +456,7 @@ m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl +available_tags='_LT_TAGS'dnl ]) @@ -474,7 +484,7 @@ m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], @@ -500,8 +510,8 @@ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated +# into 'config.status', and then the shell code to quote escape them in +# for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], @@ -547,7 +557,7 @@ for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" @@ -560,7 +570,7 @@ for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" @@ -576,7 +586,7 @@ _LT_OUTPUT_LIBTOOL_INIT # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the -# `#!' sequence but before initialization text begins. After this +# '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). @@ -598,7 +608,7 @@ AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF -test $lt_write_fail = 0 && chmod +x $1[]dnl +test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT @@ -621,7 +631,7 @@ exec AS_MESSAGE_LOG_FD>>config.log } >&AS_MESSAGE_LOG_FD lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, +'$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. @@ -643,7 +653,7 @@ Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." -while test $[#] != 0 +while test 0 != $[#] do case $[1] in --version | --v* | -V ) @@ -656,10 +666,10 @@ do lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; +Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; +Try '$[0] --help' for more information.]) ;; esac shift done @@ -685,7 +695,7 @@ chmod +x "$CONFIG_LT" # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: -test "$silent" = yes && +test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false @@ -705,32 +715,46 @@ m4_defun([_LT_CONFIG], _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our + # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then + if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi - cfgfile="${ofile}T" + cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. -# + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + _LT_COPYING _LT_LIBTOOL_TAGS +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + _LT_EOF case $host_os in @@ -739,7 +763,7 @@ _LT_EOF # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then +if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi @@ -756,8 +780,6 @@ _LT_EOF sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) - _LT_PROG_REPLACE_SHELLFNS - mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" @@ -775,7 +797,6 @@ _LT_EOF [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS @@ -974,7 +995,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then + if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the @@ -992,7 +1013,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD @@ -1010,7 +1031,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], @@ -1032,7 +1053,7 @@ _LT_EOF _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD @@ -1042,32 +1063,32 @@ _LT_EOF ]) case $host_os in rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[[012]][[,.]]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then + if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= @@ -1087,29 +1108,29 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES], _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + if test yes = "$lt_cv_ld_force_load"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; + ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac - if test "$_lt_dar_can_shared" = "yes"; then + if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" +[ if test yes != "$lt_cv_apple_cc_single_mod"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else @@ -1129,7 +1150,7 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES], # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl -if test "${lt_cv_aix_libpath+set}" = set; then +if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], @@ -1147,7 +1168,7 @@ else _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) @@ -1167,8 +1188,8 @@ m4_define([_LT_SHELL_INIT], # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start -# of the generated configure script which will find a shell with a builtin -# printf (which we can use as an echo command). +# of the generated configure script that will find a shell with a builtin +# printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO @@ -1196,10 +1217,10 @@ fi # Invoke $ECHO with all args, space-separated. func_echo_all () { - $ECHO "$*" + $ECHO "$*" } -case "$ECHO" in +case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; @@ -1225,16 +1246,17 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], -[ --with-sysroot[=DIR] Search for dependent libraries within DIR - (or the compiler's sysroot if not specified).], +[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], + [Search for dependent libraries within DIR (or the compiler's sysroot + if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= -case ${with_sysroot} in #( +case $with_sysroot in #( yes) - if test "$GCC" = yes; then + if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( @@ -1244,14 +1266,14 @@ case ${with_sysroot} in #( no|'') ;; #( *) - AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl -[dependent libraries, and in which our libraries should be installed.])]) +[dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- @@ -1259,31 +1281,33 @@ m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes +test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) - HPUX_IA64_MODE="32" + HPUX_IA64_MODE=32 ;; *ELF-64*) - HPUX_IA64_MODE="64" + HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then + if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" @@ -1312,9 +1336,46 @@ ia64-*-hpux*) rm -rf conftest* ;; +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in @@ -1333,10 +1394,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) ;; esac ;; - powerpc64le-*) + powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; - powerpc64-*) + powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) @@ -1355,10 +1416,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; - powerpcle-*) + powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; - powerpc-*) + powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) @@ -1376,19 +1437,20 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" + SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then + if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" + CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) - # Find out which ABI we are using. + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in @@ -1396,7 +1458,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) case $lt_cv_prog_gnu_ld in yes*) case $host in - i?86-*-solaris*) + i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) @@ -1405,7 +1467,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" + LD=${LD-ld}_sol2 fi ;; *) @@ -1421,7 +1483,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) ;; esac -need_locks="$enable_libtool_lock" +need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK @@ -1440,11 +1502,11 @@ AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -eq 0; then + if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -ne 0; then + if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi @@ -1452,7 +1514,7 @@ AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], ]) ]) -if test "x$lt_cv_ar_at_file" = xno; then +if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file @@ -1483,7 +1545,7 @@ old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in - openbsd*) + bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) @@ -1519,7 +1581,7 @@ AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" + lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins @@ -1546,7 +1608,7 @@ AC_CACHE_CHECK([$1], [$2], $RM conftest* ]) -if test x"[$]$2" = xyes; then +if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) @@ -1568,7 +1630,7 @@ AC_DEFUN([_LT_LINKER_OPTION], m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no - save_LDFLAGS="$LDFLAGS" + save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then @@ -1587,10 +1649,10 @@ AC_CACHE_CHECK([$1], [$2], fi fi $RM -r conftest* - LDFLAGS="$save_LDFLAGS" + LDFLAGS=$save_LDFLAGS ]) -if test x"[$]$2" = xyes; then +if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) @@ -1611,7 +1673,7 @@ AC_DEFUN([LT_CMD_MAX_LEN], AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 - teststring="ABCD" + teststring=ABCD case $build_os in msdosdjgpp*) @@ -1651,7 +1713,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl lt_cv_sys_max_cmd_len=8192; ;; - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` @@ -1702,22 +1764,22 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ - test undefined != "$lt_cv_sys_max_cmd_len"; then + test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do + for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. - while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough + test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring @@ -1733,7 +1795,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl ;; esac ]) -if test -n $lt_cv_sys_max_cmd_len ; then +if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) @@ -1761,7 +1823,7 @@ m4_defun([_LT_HEADER_DLFCN], # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : +if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 @@ -1808,9 +1870,9 @@ else # endif #endif -/* When -fvisbility=hidden is used, assume the code has been annotated +/* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif @@ -1836,7 +1898,7 @@ int main () return status; }] _LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in @@ -1857,7 +1919,7 @@ rm -fr conftest* # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then +if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown @@ -1867,44 +1929,52 @@ else case $host_os in beos*) - lt_cv_dlopen="load_add_on" + lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) - lt_cv_dlopen="dlopen" + lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) - # if libdl is installed we need to link against it + # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ + lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + *) AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], + [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], + [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) @@ -1913,21 +1983,21 @@ else ;; esac - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else + if test no = "$lt_cv_dlopen"; then enable_dlopen=no + else + enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - save_LDFLAGS="$LDFLAGS" + save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - save_LIBS="$LIBS" + save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], @@ -1937,7 +2007,7 @@ else lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) - if test "x$lt_cv_dlopen_self" = xyes; then + if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl @@ -1947,9 +2017,9 @@ else ]) fi - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS ;; esac @@ -2041,8 +2111,8 @@ m4_defun([_LT_COMPILER_FILE_LOCKS], m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then +hard_links=nottested +if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes @@ -2052,8 +2122,8 @@ if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + if test no = "$hard_links"; then + AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else @@ -2080,8 +2150,8 @@ objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR @@ -2093,15 +2163,15 @@ m4_defun([_LT_LINKER_HARDCODE_LIBPATH], _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && + test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else @@ -2115,12 +2185,12 @@ else fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then +if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || + test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi @@ -2144,7 +2214,7 @@ else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) - if test -n "$STRIP" ; then + if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) @@ -2162,6 +2232,47 @@ _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics @@ -2172,17 +2283,18 @@ m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ -if test "$GCC" = yes; then +if test yes = "$GCC"; then case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; + mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in @@ -2198,28 +2310,35 @@ if test "$GCC" = yes; then ;; esac # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. + # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; + lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } @@ -2233,7 +2352,7 @@ BEGIN {RS=" "; FS="/|\n";} { # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else @@ -2242,7 +2361,7 @@ fi]) library_names_spec= libname_spec='lib$name' soname_spec= -shrext_cmds=".so" +shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= @@ -2259,14 +2378,17 @@ hardcode_into_libs=no # flags to be left without arguments need_version=unknown +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' + soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) @@ -2274,41 +2396,91 @@ aix[[4-9]]*) need_lib_prefix=no need_version=no hardcode_into_libs=yes - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac shlibpath_var=LIBPATH fi ;; @@ -2318,18 +2490,18 @@ amigaos*) powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) - library_names_spec='${libname}${shared_ext}' + library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; @@ -2337,8 +2509,8 @@ beos*) bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" @@ -2350,7 +2522,7 @@ bsdi[[45]]*) cygwin* | mingw* | pw32* | cegcc*) version_type=windows - shrext_cmds=".dll" + shrext_cmds=.dll need_version=no need_lib_prefix=no @@ -2359,8 +2531,8 @@ cygwin* | mingw* | pw32* | cegcc*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ @@ -2376,17 +2548,17 @@ cygwin* | mingw* | pw32* | cegcc*) case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' @@ -2395,8 +2567,8 @@ m4_if([$1], [],[ *,cl*) # Native MSVC libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' case $build_os in mingw*) @@ -2423,7 +2595,7 @@ m4_if([$1], [],[ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) - sys_lib_search_path_spec="$LIB" + sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` @@ -2436,8 +2608,8 @@ m4_if([$1], [],[ esac # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' @@ -2450,7 +2622,7 @@ m4_if([$1], [],[ *) # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac @@ -2463,8 +2635,8 @@ darwin* | rhapsody*) version_type=darwin need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' @@ -2477,8 +2649,8 @@ dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; @@ -2496,12 +2668,13 @@ freebsd* | dragonfly*) version_type=freebsd-$objformat case $version_type in freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac @@ -2531,10 +2704,10 @@ haiku*) need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes + shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; @@ -2552,14 +2725,15 @@ hpux9* | hpux10* | hpux11*) dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' @@ -2567,8 +2741,8 @@ hpux9* | hpux10* | hpux11*) dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; @@ -2577,8 +2751,8 @@ hpux9* | hpux10* | hpux11*) dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... @@ -2591,8 +2765,8 @@ interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no @@ -2603,7 +2777,7 @@ irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) - if test "$lt_cv_prog_gnu_ld" = yes; then + if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix @@ -2611,8 +2785,8 @@ irix5* | irix6* | nonstopux*) esac need_lib_prefix=no need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= @@ -2631,8 +2805,8 @@ irix5* | irix6* | nonstopux*) esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; @@ -2641,13 +2815,33 @@ linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no @@ -2672,7 +2866,12 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) # before this can be enabled. hardcode_into_libs=yes - # Append ld.so.conf contents to the search path + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" @@ -2704,12 +2903,12 @@ netbsd*) need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH @@ -2719,7 +2918,7 @@ netbsd*) newsos6) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; @@ -2728,58 +2927,68 @@ newsos6) version_type=qnx need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; -openbsd*) +openbsd* | bitrig*) version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" + sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no else - shlibpath_overrides_runpath=yes + need_version=yes fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' - shrext_cmds=".dll" + version_type=windows + shrext_cmds=.dll + need_version=no need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) @@ -2790,8 +2999,8 @@ solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes @@ -2801,11 +3010,11 @@ solaris*) sunos4*) version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes @@ -2813,8 +3022,8 @@ sunos4*) sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) @@ -2835,24 +3044,24 @@ sysv4 | sysv4.3*) ;; sysv4*MP*) - if test -d /usr/nec ;then + if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf + version_type=sco need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' @@ -2870,7 +3079,7 @@ tpf*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes @@ -2878,8 +3087,8 @@ tpf*) uts4*) version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; @@ -2888,20 +3097,30 @@ uts4*) ;; esac AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no +test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then +if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) @@ -2934,39 +3153,41 @@ _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- -# find a file program which can recognize shared library +# find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -f "$ac_dir/$1"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : @@ -2989,11 +3210,11 @@ _LT_EOF break fi done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else @@ -3011,7 +3232,7 @@ dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- -# find a file program which can recognize a shared library +# find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then @@ -3038,16 +3259,16 @@ m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], + [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld -if test "$GCC" = yes; then +if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw + # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; @@ -3061,7 +3282,7 @@ if test "$GCC" = yes; then while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done - test -z "$LD" && LD="$ac_prog" + test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. @@ -3072,37 +3293,37 @@ if test "$GCC" = yes; then with_gnu_ld=unknown ;; esac -elif test "$with_gnu_ld" = yes; then +elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" + lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies @@ -3188,13 +3446,13 @@ lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. +# 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) @@ -3221,8 +3479,7 @@ mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else @@ -3318,8 +3575,8 @@ newos6*) lt_cv_deplibs_check_method=pass_all ;; -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' @@ -3372,6 +3629,9 @@ sysv4 | sysv4.3*) tpf*) lt_cv_deplibs_check_method=pass_all ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; esac ]) @@ -3412,33 +3672,38 @@ AC_DEFUN([LT_PATH_NM], AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. - lt_cv_path_NM="$NM" + lt_cv_path_NM=$NM else - lt_nm_to_check="${ac_tool_prefix}nm" + lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" - break + break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" - break + break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but @@ -3449,21 +3714,21 @@ else esac fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) - DUMPBIN="$DUMPBIN -symbols" + DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: @@ -3471,8 +3736,8 @@ else esac fi AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" + if test : != "$DUMPBIN"; then + NM=$DUMPBIN fi fi test -z "$NM" && NM=nm @@ -3518,8 +3783,8 @@ lt_cv_sharedlib_from_linklib_cmd, case $host_os in cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib @@ -3531,7 +3796,7 @@ cygwin* | mingw* | pw32* | cegcc*) ;; *) # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" + lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) @@ -3558,13 +3823,28 @@ AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) -if test "x$lt_cv_path_mainfest_tool" != xyes; then +if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL +# _LT_DLL_DEF_P([FILE]) +# --------------------- +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with func_dll_def_p in the libtool script +AC_DEFUN([_LT_DLL_DEF_P], +[dnl + test DEF = "`$SED -n dnl + -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace + -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments + -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl + -e q dnl Only consider the first "real" line + $1`" dnl +])# _LT_DLL_DEF_P + + # LT_LIB_M # -------- # check for math library @@ -3576,11 +3856,11 @@ case $host in # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) - AC_CHECK_LIB(m, cos, LIBM="-lm") + AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) @@ -3599,7 +3879,7 @@ m4_defun([_LT_COMPILER_NO_RTTI], _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= -if test "$GCC" = yes; then +if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; @@ -3651,7 +3931,7 @@ cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; @@ -3684,14 +3964,44 @@ case `$NM -V 2>&1` in symcode='[[ABCDGIRSTW]]' ;; esac +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= @@ -3709,21 +4019,24 @@ for ac_symprfx in "" "_"; do # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" @@ -3763,11 +4076,11 @@ _LT_EOF if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST -#elif defined(__osf__) +#elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else @@ -3793,7 +4106,7 @@ lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; @@ -3813,9 +4126,9 @@ _LT_EOF mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" + LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS @@ -3836,7 +4149,7 @@ _LT_EOF rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then + if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= @@ -3863,12 +4176,16 @@ _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], + [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], + [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS @@ -3884,17 +4201,18 @@ _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then + if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) @@ -3905,8 +4223,8 @@ m4_if([$1], [CXX], [ ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac @@ -3922,6 +4240,11 @@ m4_if([$1], [CXX], [ # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac ;; darwin* | rhapsody*) # PIC is the default on this platform @@ -3971,7 +4294,7 @@ m4_if([$1], [CXX], [ case $host_os in aix[[4-9]]*) # All AIX code is PIC. - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else @@ -4012,14 +4335,14 @@ m4_if([$1], [CXX], [ case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default @@ -4056,7 +4379,7 @@ m4_if([$1], [CXX], [ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. + # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' @@ -4201,17 +4524,18 @@ m4_if([$1], [CXX], [ fi ], [ - if test "$GCC" = yes; then + if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) @@ -4222,8 +4546,8 @@ m4_if([$1], [CXX], [ ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac @@ -4240,6 +4564,11 @@ m4_if([$1], [CXX], [ # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac ;; darwin* | rhapsody*) @@ -4310,7 +4639,7 @@ m4_if([$1], [CXX], [ case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else @@ -4318,11 +4647,30 @@ m4_if([$1], [CXX], [ fi ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac ;; hpux9* | hpux10* | hpux11*) @@ -4338,7 +4686,7 @@ m4_if([$1], [CXX], [ ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) @@ -4349,7 +4697,7 @@ m4_if([$1], [CXX], [ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. + # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' @@ -4374,6 +4722,12 @@ m4_if([$1], [CXX], [ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) @@ -4471,7 +4825,7 @@ m4_if([$1], [CXX], [ ;; sysv4*MP*) - if test -d /usr/nec ;then + if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi @@ -4500,7 +4854,7 @@ m4_if([$1], [CXX], [ fi ]) case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: + # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; @@ -4566,17 +4920,21 @@ m4_if([$1], [CXX], [ case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in @@ -4625,9 +4983,9 @@ m4_if([$1], [CXX], [ # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if @@ -4643,7 +5001,7 @@ dnl Note also adjust exclude_expsyms for C++ above. # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. - if test "$GCC" != yes; then + if test yes != "$GCC"; then with_gnu_ld=no fi ;; @@ -4651,7 +5009,7 @@ dnl Note also adjust exclude_expsyms for C++ above. # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; - openbsd*) + openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) @@ -4664,7 +5022,7 @@ dnl Note also adjust exclude_expsyms for C++ above. # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then + if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility @@ -4686,24 +5044,24 @@ dnl Note also adjust exclude_expsyms for C++ above. esac fi - if test "$lt_use_gnu_ld_interface" = yes; then + if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' + wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no - case `$LD -v 2>&1` in + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... @@ -4716,7 +5074,7 @@ dnl Note also adjust exclude_expsyms for C++ above. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then + if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 @@ -4735,7 +5093,7 @@ _LT_EOF case $host_cpu in powerpc) # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) @@ -4751,7 +5109,7 @@ _LT_EOF _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi @@ -4761,7 +5119,7 @@ _LT_EOF # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes @@ -4769,61 +5127,89 @@ _LT_EOF _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no - if test "$host_os" = linux-dietlibc; then + if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no + && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; @@ -4834,42 +5220,47 @@ _LT_EOF lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in + tcc*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' + ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac @@ -4883,8 +5274,8 @@ _LT_EOF _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; @@ -4902,8 +5293,8 @@ _LT_EOF _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi @@ -4915,7 +5306,7 @@ _LT_EOF _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify @@ -4930,9 +5321,9 @@ _LT_EOF # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi @@ -4949,15 +5340,15 @@ _LT_EOF *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= @@ -4973,7 +5364,7 @@ _LT_EOF # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported @@ -4981,34 +5372,57 @@ _LT_EOF ;; aix[[4-9]]*) - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' - no_entry_flag="" + no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi ;; esac @@ -5027,13 +5441,21 @@ _LT_EOF _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac - if test "$GCC" = yes; then + if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` + collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then @@ -5052,62 +5474,80 @@ _LT_EOF ;; esac shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' fi - _LT_TAGVAR(link_all_deplibs, $1)=no + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' else # not using gcc - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' else - shared_flag='${wl}-bM:SRE' + shared_flag='$wl-bM:SRE' fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' fi fi - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; @@ -5116,7 +5556,7 @@ _LT_EOF case $host_cpu in powerpc) # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) @@ -5146,16 +5586,17 @@ _LT_EOF # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes @@ -5164,18 +5605,18 @@ _LT_EOF # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' ;; *) # Assume MSVC wrapper @@ -5184,7 +5625,7 @@ _LT_EOF # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. @@ -5234,33 +5675,33 @@ _LT_EOF ;; hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + if test yes,no = "$GCC,$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes @@ -5268,25 +5709,25 @@ _LT_EOF ;; hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then + if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ @@ -5294,14 +5735,14 @@ _LT_EOF # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in @@ -5312,7 +5753,7 @@ _LT_EOF *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. @@ -5323,16 +5764,16 @@ _LT_EOF ;; irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], - [save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + [save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], @@ -5345,21 +5786,32 @@ _LT_EOF end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) - LDFLAGS="$save_LDFLAGS"]) - if test "$lt_cv_irix_exported_symbol" = yes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + LDFLAGS=$save_LDFLAGS]) + if test yes = "$lt_cv_irix_exported_symbol"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi + _LT_TAGVAR(link_all_deplibs, $1)=no else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(ld_shlibs, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out @@ -5374,7 +5826,7 @@ _LT_EOF newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; @@ -5382,27 +5834,19 @@ _LT_EOF *nto* | *qnx*) ;; - openbsd*) + openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no @@ -5413,33 +5857,53 @@ _LT_EOF _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' @@ -5450,24 +5914,24 @@ _LT_EOF solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + if test yes = "$GCC"; then + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi @@ -5477,11 +5941,11 @@ _LT_EOF solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', + # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + if test yes = "$GCC"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi @@ -5491,10 +5955,10 @@ _LT_EOF ;; sunos4*) - if test "x$host_vendor" = xsequent; then + if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi @@ -5543,43 +6007,43 @@ _LT_EOF ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not + # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; @@ -5594,17 +6058,17 @@ _LT_EOF ;; esac - if test x$host_vendor = xsni; then + if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld @@ -5621,7 +6085,7 @@ x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - if test "$enable_shared" = yes && test "$GCC" = yes; then + if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. @@ -5701,12 +6165,12 @@ _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the + "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR @@ -5747,10 +6211,10 @@ dnl [Compiler flag to generate thread safe objects]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. +# the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" +lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. @@ -5790,18 +6254,18 @@ if test -n "$compiler"; then LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB - # Report which library types will actually be built + # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no + test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) - test "$enable_shared" = yes && enable_static=no + test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' @@ -5809,8 +6273,12 @@ if test -n "$compiler"; then ;; aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac fi ;; esac @@ -5818,13 +6286,13 @@ if test -n "$compiler"; then AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes + test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP -CC="$lt_save_CC" +CC=$lt_save_CC ])# _LT_LANG_C_CONFIG @@ -5832,14 +6300,14 @@ CC="$lt_save_CC" # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. +# the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then +if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes @@ -5881,7 +6349,7 @@ _LT_TAGVAR(objext, $1)=$objext # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then +if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" @@ -5923,35 +6391,35 @@ if test "$_lt_caught_CXX_error" != yes; then if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately - if test "$GXX" = yes; then + if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi - if test "$GXX" = yes; then + if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + if test yes = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) - wlarc='${wl}' + wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi @@ -5987,18 +6455,30 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' - no_entry_flag="" + no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in @@ -6008,6 +6488,13 @@ if test "$_lt_caught_CXX_error" != yes; then ;; esac done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi ;; esac @@ -6026,13 +6513,21 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac - if test "$GXX" = yes; then + if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` + collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then @@ -6050,64 +6545,84 @@ if test "$_lt_caught_CXX_error" != yes; then fi esac shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' else # not using gcc - if test "$host_cpu" = ia64; then + if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' else - shared_flag='${wl}-bM:SRE' + shared_flag='$wl-bM:SRE' fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' fi fi - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # The "-G" linker flag allows undefined symbols. + _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; @@ -6117,7 +6632,7 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi @@ -6145,57 +6660,58 @@ if test "$_lt_caught_CXX_error" != yes; then # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" + shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi @@ -6206,6 +6722,34 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_DARWIN_LINKER_FEATURES($1) ;; + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + dgux*) case $cc_basename in ec++*) @@ -6241,14 +6785,14 @@ if test "$_lt_caught_CXX_error" != yes; then ;; haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default @@ -6260,7 +6804,7 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. @@ -6269,11 +6813,11 @@ if test "$_lt_caught_CXX_error" != yes; then # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + if test yes = "$GXX"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no @@ -6283,15 +6827,15 @@ if test "$_lt_caught_CXX_error" != yes; then ;; hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi @@ -6317,13 +6861,13 @@ if test "$_lt_caught_CXX_error" != yes; then aCC*) case $host_cpu in hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists @@ -6334,20 +6878,20 @@ if test "$_lt_caught_CXX_error" != yes; then # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi @@ -6362,22 +6906,22 @@ if test "$_lt_caught_CXX_error" != yes; then interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is @@ -6386,17 +6930,17 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; @@ -6409,8 +6953,8 @@ if test "$_lt_caught_CXX_error" != yes; then # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. @@ -6419,10 +6963,10 @@ if test "$_lt_caught_CXX_error" != yes; then # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. @@ -6436,59 +6980,59 @@ if test "$_lt_caught_CXX_error" != yes; then # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' @@ -6502,18 +7046,18 @@ if test "$_lt_caught_CXX_error" != yes; then # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) @@ -6521,10 +7065,10 @@ if test "$_lt_caught_CXX_error" != yes; then *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on @@ -6582,22 +7126,17 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(ld_shlibs, $1)=yes ;; - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) + openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else @@ -6613,9 +7152,9 @@ if test "$_lt_caught_CXX_error" != yes; then # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using @@ -6633,17 +7172,17 @@ if test "$_lt_caught_CXX_error" != yes; then cxx*) case $host in osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac @@ -6658,21 +7197,21 @@ if test "$_lt_caught_CXX_error" != yes; then # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists @@ -6718,9 +7257,9 @@ if test "$_lt_caught_CXX_error" != yes; then # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no @@ -6728,7 +7267,7 @@ if test "$_lt_caught_CXX_error" != yes; then solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. + # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; @@ -6745,30 +7284,30 @@ if test "$_lt_caught_CXX_error" != yes; then ;; gcx*) # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else - # g++ 2.7 appears to require `-G' NOT `-shared' on this + # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when @@ -6776,11 +7315,11 @@ if test "$_lt_caught_CXX_error" != yes; then output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi @@ -6789,52 +7328,52 @@ if test "$_lt_caught_CXX_error" != yes; then ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not + # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ - '"$_LT_TAGVAR(old_archive_cmds, $1)" + '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ - '"$_LT_TAGVAR(reload_cmds, $1)" + '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; @@ -6865,10 +7404,10 @@ if test "$_lt_caught_CXX_error" != yes; then esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change @@ -6895,7 +7434,7 @@ if test "$_lt_caught_CXX_error" != yes; then lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes +fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG @@ -6917,13 +7456,14 @@ AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + case @S|@2 in + .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; + *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF + # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose @@ -7007,13 +7547,13 @@ if AC_TRY_EVAL(ac_compile); then pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in + case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. - if test $p = "-L" || - test $p = "-R"; then + if test x-L = "$p" || + test x-R = "$p"; then prev=$p continue fi @@ -7029,16 +7569,16 @@ if AC_TRY_EVAL(ac_compile); then case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in + if test no = "$pre_test_object_deps_done"; then + case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being @@ -7046,9 +7586,9 @@ if AC_TRY_EVAL(ac_compile); then esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" + _LT_TAGVAR(postdeps, $1)=$prev$p else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= @@ -7063,15 +7603,15 @@ if AC_TRY_EVAL(ac_compile); then continue fi - if test "$pre_test_object_deps_done" = no; then + if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" + _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" + _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi @@ -7102,51 +7642,6 @@ interix[[3-9]]*) _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; esac ]) @@ -7155,7 +7650,7 @@ case " $_LT_TAGVAR(postdeps, $1) " in esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) @@ -7175,10 +7670,10 @@ _LT_TAGDECL([], [compiler_lib_search_path], [1], # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) -if test -z "$F77" || test "X$F77" = "Xno"; then +if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi @@ -7215,7 +7710,7 @@ _LT_TAGVAR(objext, $1)=$objext # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then +if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t @@ -7237,7 +7732,7 @@ if test "$_lt_disable_F77" != yes; then _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. - lt_save_CC="$CC" + lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} @@ -7251,21 +7746,25 @@ if test "$_lt_disable_F77" != yes; then AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no + test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) - test "$enable_shared" = yes && enable_static=no + test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac fi ;; esac @@ -7273,11 +7772,11 @@ if test "$_lt_disable_F77" != yes; then AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes + test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change @@ -7294,9 +7793,9 @@ if test "$_lt_disable_F77" != yes; then fi # test -n "$compiler" GCC=$lt_save_GCC - CC="$lt_save_CC" - CFLAGS="$lt_save_CFLAGS" -fi # test "$_lt_disable_F77" != yes + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG @@ -7306,11 +7805,11 @@ AC_LANG_POP # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) -if test -z "$FC" || test "X$FC" = "Xno"; then +if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi @@ -7347,7 +7846,7 @@ _LT_TAGVAR(objext, $1)=$objext # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then +if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t @@ -7369,7 +7868,7 @@ if test "$_lt_disable_FC" != yes; then _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. - lt_save_CC="$CC" + lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} @@ -7385,21 +7884,25 @@ if test "$_lt_disable_FC" != yes; then AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no + test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) - test "$enable_shared" = yes && enable_static=no + test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac fi ;; esac @@ -7407,11 +7910,11 @@ if test "$_lt_disable_FC" != yes; then AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes + test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" + _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu + _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change @@ -7431,7 +7934,7 @@ if test "$_lt_disable_FC" != yes; then GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS -fi # test "$_lt_disable_FC" != yes +fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG @@ -7441,7 +7944,7 @@ AC_LANG_POP # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE @@ -7475,7 +7978,7 @@ CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" +_LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. @@ -7512,7 +8015,7 @@ CFLAGS=$lt_save_CFLAGS # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE @@ -7546,7 +8049,7 @@ CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" +_LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. @@ -7583,7 +8086,7 @@ CFLAGS=$lt_save_CFLAGS # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. +# to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE @@ -7599,7 +8102,7 @@ _LT_TAGVAR(objext, $1)=$objext lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" +lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER @@ -7609,7 +8112,7 @@ _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. -lt_save_CC="$CC" +lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= @@ -7638,7 +8141,7 @@ AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) @@ -7749,7 +8252,7 @@ lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue + test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in @@ -7766,9 +8269,9 @@ for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break + test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then + if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi @@ -7792,27 +8295,7 @@ dnl AC_DEFUN([LT_AC_PROG_SED], []) # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false @@ -7836,102 +8319,9 @@ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES -# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) -# ------------------------------------------------------ -# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and -# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. -m4_defun([_LT_PROG_FUNCTION_REPLACE], -[dnl { -sed -e '/^$1 ()$/,/^} # $1 /c\ -$1 ()\ -{\ -m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) -} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: -]) - - -# _LT_PROG_REPLACE_SHELLFNS -# ------------------------- -# Replace existing portable implementations of several shell functions with -# equivalent extended shell implementations where those features are available.. -m4_defun([_LT_PROG_REPLACE_SHELLFNS], -[if test x"$xsi_shell" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl - func_split_long_opt_name=${1%%=*} - func_split_long_opt_arg=${1#*=}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) - - _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) - - _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) - - _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) -fi - -if test x"$lt_shell_append" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) - - _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl - func_quote_for_eval "${2}" -dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ - eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) -fi -]) - # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- -# Determine which file name conversion functions should be used by +# Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], diff --git a/src/secp256k1/build-aux/m4/ltoptions.m4 b/src/secp256k1/build-aux/m4/ltoptions.m4 index 5d9acd8e..94b08297 100644 --- a/src/secp256k1/build-aux/m4/ltoptions.m4 +++ b/src/secp256k1/build-aux/m4/ltoptions.m4 @@ -1,14 +1,14 @@ # Helper functions for option handling. -*- Autoconf -*- # -# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, -# Inc. +# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software +# Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. -# serial 7 ltoptions.m4 +# serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) @@ -29,7 +29,7 @@ m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl + [m4_warning([Unknown $1 option '$2'])])[]dnl ]) @@ -75,13 +75,15 @@ m4_if([$1],[LT_INIT],[ dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) + [_LT_ENABLE_FAST_INSTALL]) + _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], + [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS @@ -112,7 +114,7 @@ AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) +put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: @@ -148,7 +150,7 @@ AU_DEFUN([AC_LIBTOOL_WIN32_DLL], _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) +put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: @@ -157,9 +159,9 @@ dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +# implement the --enable-shared flag, and supports the 'shared' and +# 'disable-shared' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], @@ -172,14 +174,14 @@ AC_ARG_ENABLE([shared], *) enable_shared=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) @@ -211,9 +213,9 @@ dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +# implement the --enable-static flag, and support the 'static' and +# 'disable-static' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], @@ -226,14 +228,14 @@ AC_ARG_ENABLE([static], *) enable_static=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) @@ -265,9 +267,9 @@ dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +# implement the --enable-fast-install flag, and support the 'fast-install' +# and 'disable-fast-install' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], @@ -280,14 +282,14 @@ AC_ARG_ENABLE([fast-install], *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) @@ -304,14 +306,14 @@ AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) +the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) +the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: @@ -319,11 +321,64 @@ dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) +# _LT_WITH_AIX_SONAME([DEFAULT]) +# ---------------------------------- +# implement the --with-aix-soname flag, and support the `aix-soname=aix' +# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT +# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +m4_define([_LT_WITH_AIX_SONAME], +[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl +shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[[5-9]]*,yes) + AC_MSG_CHECKING([which variant of shared library versioning to provide]) + AC_ARG_WITH([aix-soname], + [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) + with_aix_soname=$lt_cv_with_aix_soname]) + AC_MSG_RESULT([$with_aix_soname]) + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + +_LT_DECL([], [shared_archive_member_spec], [0], + [Shared archive member basename, for filename based shared library versioning on AIX])dnl +])# _LT_WITH_AIX_SONAME + +LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) + + # _LT_WITH_PIC([MODE]) # -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], @@ -334,19 +389,17 @@ m4_define([_LT_WITH_PIC], *) pic_mode=default # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do - IFS="$lt_save_ifs" + IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done - IFS="$lt_save_ifs" + IFS=$lt_save_ifs ;; esac], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC @@ -359,7 +412,7 @@ AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) +put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: diff --git a/src/secp256k1/build-aux/m4/ltsugar.m4 b/src/secp256k1/build-aux/m4/ltsugar.m4 index 9000a057..48bc9344 100644 --- a/src/secp256k1/build-aux/m4/ltsugar.m4 +++ b/src/secp256k1/build-aux/m4/ltsugar.m4 @@ -1,6 +1,7 @@ # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software +# Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives @@ -33,7 +34,7 @@ m4_define([_lt_join], # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. +# Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], @@ -44,7 +45,7 @@ m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different diff --git a/src/secp256k1/build-aux/m4/ltversion.m4 b/src/secp256k1/build-aux/m4/ltversion.m4 index 07a8602d..fa04b52a 100644 --- a/src/secp256k1/build-aux/m4/ltversion.m4 +++ b/src/secp256k1/build-aux/m4/ltversion.m4 @@ -1,6 +1,6 @@ # ltversion.m4 -- version numbers -*- Autoconf -*- # -# Copyright (C) 2004 Free Software Foundation, Inc. +# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives @@ -9,15 +9,15 @@ # @configure_input@ -# serial 3337 ltversion.m4 +# serial 4179 ltversion.m4 # This file is part of GNU Libtool -m4_define([LT_PACKAGE_VERSION], [2.4.2]) -m4_define([LT_PACKAGE_REVISION], [1.3337]) +m4_define([LT_PACKAGE_VERSION], [2.4.6]) +m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.2' -macro_revision='1.3337' +[macro_version='2.4.6' +macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) diff --git a/src/secp256k1/build-aux/m4/lt~obsolete.m4 b/src/secp256k1/build-aux/m4/lt~obsolete.m4 index c573da90..c6b26f88 100644 --- a/src/secp256k1/build-aux/m4/lt~obsolete.m4 +++ b/src/secp256k1/build-aux/m4/lt~obsolete.m4 @@ -1,6 +1,7 @@ # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # -# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software +# Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives @@ -11,7 +12,7 @@ # These exist entirely to fool aclocal when bootstrapping libtool. # -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # @@ -25,7 +26,7 @@ # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until diff --git a/src/secp256k1/build-aux/missing b/src/secp256k1/build-aux/missing index db98974f..f62bbae3 100755 --- a/src/secp256k1/build-aux/missing +++ b/src/secp256k1/build-aux/missing @@ -3,7 +3,7 @@ scriptversion=2013-10-28.13; # UTC -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify diff --git a/src/secp256k1/build-aux/test-driver b/src/secp256k1/build-aux/test-driver index d3060566..8e575b01 100755 --- a/src/secp256k1/build-aux/test-driver +++ b/src/secp256k1/build-aux/test-driver @@ -3,7 +3,7 @@ scriptversion=2013-07-13.22; # UTC -# Copyright (C) 2011-2013 Free Software Foundation, Inc. +# Copyright (C) 2011-2014 Free Software Foundation, Inc. # # 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 @@ -106,11 +106,14 @@ trap "st=143; $do_exit" 15 # Test script is run here. "$@" >$log_file 2>&1 estatus=$? + if test $enable_hard_errors = no && test $estatus -eq 99; then - estatus=1 + tweaked_estatus=1 +else + tweaked_estatus=$estatus fi -case $estatus:$expect_failure in +case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; @@ -119,6 +122,12 @@ case $estatus:$expect_failure in *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac +# Report the test outcome and exit status in the logs, so that one can +# know whether the test passed or failed simply by looking at the '.log' +# file, without the need of also peaking into the corresponding '.trs' +# file (automake bug#11814). +echo "$res $test_name (exit status: $estatus)" >>$log_file + # Report outcome to console. echo "${col}${res}${std}: $test_name" diff --git a/src/secp256k1/configure.ac b/src/secp256k1/configure.ac old mode 100755 new mode 100644 diff --git a/src/secp256k1/exhaustive_tests b/src/secp256k1/exhaustive_tests new file mode 100755 index 00000000..2b5c8464 Binary files /dev/null and b/src/secp256k1/exhaustive_tests differ diff --git a/src/secp256k1/libsecp256k1.pc.in b/src/secp256k1/libsecp256k1.pc.in old mode 100755 new mode 100644 diff --git a/src/secp256k1/src/asm/field_10x26_arm.s b/src/secp256k1/src/asm/field_10x26_arm.s new file mode 100644 index 00000000..5df561f2 --- /dev/null +++ b/src/secp256k1/src/asm/field_10x26_arm.s @@ -0,0 +1,919 @@ +@ vim: set tabstop=8 softtabstop=8 shiftwidth=8 noexpandtab syntax=armasm: +/********************************************************************** + * Copyright (c) 2014 Wladimir J. van der Laan * + * Distributed under the MIT software license, see the accompanying * + * file COPYING or http://www.opensource.org/licenses/mit-license.php.* + **********************************************************************/ +/* +ARM implementation of field_10x26 inner loops. + +Note: + +- To avoid unnecessary loads and make use of available registers, two + 'passes' have every time been interleaved, with the odd passes accumulating c' and d' + which will be added to c and d respectively in the the even passes + +*/ + + .syntax unified + .arch armv7-a + @ eabi attributes - see readelf -A + .eabi_attribute 8, 1 @ Tag_ARM_ISA_use = yes + .eabi_attribute 9, 0 @ Tag_Thumb_ISA_use = no + .eabi_attribute 10, 0 @ Tag_FP_arch = none + .eabi_attribute 24, 1 @ Tag_ABI_align_needed = 8-byte + .eabi_attribute 25, 1 @ Tag_ABI_align_preserved = 8-byte, except leaf SP + .eabi_attribute 30, 2 @ Tag_ABI_optimization_goals = Agressive Speed + .eabi_attribute 34, 1 @ Tag_CPU_unaligned_access = v6 + .text + + @ Field constants + .set field_R0, 0x3d10 + .set field_R1, 0x400 + .set field_not_M, 0xfc000000 @ ~M = ~0x3ffffff + + .align 2 + .global secp256k1_fe_mul_inner + .type secp256k1_fe_mul_inner, %function + @ Arguments: + @ r0 r Restrict: can overlap with a, not with b + @ r1 a + @ r2 b + @ Stack (total 4+10*4 = 44) + @ sp + #0 saved 'r' pointer + @ sp + #4 + 4*X t0,t1,t2,t3,t4,t5,t6,t7,u8,t9 +secp256k1_fe_mul_inner: + stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r14} + sub sp, sp, #48 @ frame=44 + alignment + str r0, [sp, #0] @ save result address, we need it only at the end + + /****************************************** + * Main computation code. + ****************************************** + + Allocation: + r0,r14,r7,r8 scratch + r1 a (pointer) + r2 b (pointer) + r3:r4 c + r5:r6 d + r11:r12 c' + r9:r10 d' + + Note: do not write to r[] here, it may overlap with a[] + */ + + /* A - interleaved with B */ + ldr r7, [r1, #0*4] @ a[0] + ldr r8, [r2, #9*4] @ b[9] + ldr r0, [r1, #1*4] @ a[1] + umull r5, r6, r7, r8 @ d = a[0] * b[9] + ldr r14, [r2, #8*4] @ b[8] + umull r9, r10, r0, r8 @ d' = a[1] * b[9] + ldr r7, [r1, #2*4] @ a[2] + umlal r5, r6, r0, r14 @ d += a[1] * b[8] + ldr r8, [r2, #7*4] @ b[7] + umlal r9, r10, r7, r14 @ d' += a[2] * b[8] + ldr r0, [r1, #3*4] @ a[3] + umlal r5, r6, r7, r8 @ d += a[2] * b[7] + ldr r14, [r2, #6*4] @ b[6] + umlal r9, r10, r0, r8 @ d' += a[3] * b[7] + ldr r7, [r1, #4*4] @ a[4] + umlal r5, r6, r0, r14 @ d += a[3] * b[6] + ldr r8, [r2, #5*4] @ b[5] + umlal r9, r10, r7, r14 @ d' += a[4] * b[6] + ldr r0, [r1, #5*4] @ a[5] + umlal r5, r6, r7, r8 @ d += a[4] * b[5] + ldr r14, [r2, #4*4] @ b[4] + umlal r9, r10, r0, r8 @ d' += a[5] * b[5] + ldr r7, [r1, #6*4] @ a[6] + umlal r5, r6, r0, r14 @ d += a[5] * b[4] + ldr r8, [r2, #3*4] @ b[3] + umlal r9, r10, r7, r14 @ d' += a[6] * b[4] + ldr r0, [r1, #7*4] @ a[7] + umlal r5, r6, r7, r8 @ d += a[6] * b[3] + ldr r14, [r2, #2*4] @ b[2] + umlal r9, r10, r0, r8 @ d' += a[7] * b[3] + ldr r7, [r1, #8*4] @ a[8] + umlal r5, r6, r0, r14 @ d += a[7] * b[2] + ldr r8, [r2, #1*4] @ b[1] + umlal r9, r10, r7, r14 @ d' += a[8] * b[2] + ldr r0, [r1, #9*4] @ a[9] + umlal r5, r6, r7, r8 @ d += a[8] * b[1] + ldr r14, [r2, #0*4] @ b[0] + umlal r9, r10, r0, r8 @ d' += a[9] * b[1] + ldr r7, [r1, #0*4] @ a[0] + umlal r5, r6, r0, r14 @ d += a[9] * b[0] + @ r7,r14 used in B + + bic r0, r5, field_not_M @ t9 = d & M + str r0, [sp, #4 + 4*9] + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + + /* B */ + umull r3, r4, r7, r14 @ c = a[0] * b[0] + adds r5, r5, r9 @ d += d' + adc r6, r6, r10 + + bic r0, r5, field_not_M @ u0 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u0 * R0 + umlal r3, r4, r0, r14 + + bic r14, r3, field_not_M @ t0 = c & M + str r14, [sp, #4 + 0*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u0 * R1 + umlal r3, r4, r0, r14 + + /* C - interleaved with D */ + ldr r7, [r1, #0*4] @ a[0] + ldr r8, [r2, #2*4] @ b[2] + ldr r14, [r2, #1*4] @ b[1] + umull r11, r12, r7, r8 @ c' = a[0] * b[2] + ldr r0, [r1, #1*4] @ a[1] + umlal r3, r4, r7, r14 @ c += a[0] * b[1] + ldr r8, [r2, #0*4] @ b[0] + umlal r11, r12, r0, r14 @ c' += a[1] * b[1] + ldr r7, [r1, #2*4] @ a[2] + umlal r3, r4, r0, r8 @ c += a[1] * b[0] + ldr r14, [r2, #9*4] @ b[9] + umlal r11, r12, r7, r8 @ c' += a[2] * b[0] + ldr r0, [r1, #3*4] @ a[3] + umlal r5, r6, r7, r14 @ d += a[2] * b[9] + ldr r8, [r2, #8*4] @ b[8] + umull r9, r10, r0, r14 @ d' = a[3] * b[9] + ldr r7, [r1, #4*4] @ a[4] + umlal r5, r6, r0, r8 @ d += a[3] * b[8] + ldr r14, [r2, #7*4] @ b[7] + umlal r9, r10, r7, r8 @ d' += a[4] * b[8] + ldr r0, [r1, #5*4] @ a[5] + umlal r5, r6, r7, r14 @ d += a[4] * b[7] + ldr r8, [r2, #6*4] @ b[6] + umlal r9, r10, r0, r14 @ d' += a[5] * b[7] + ldr r7, [r1, #6*4] @ a[6] + umlal r5, r6, r0, r8 @ d += a[5] * b[6] + ldr r14, [r2, #5*4] @ b[5] + umlal r9, r10, r7, r8 @ d' += a[6] * b[6] + ldr r0, [r1, #7*4] @ a[7] + umlal r5, r6, r7, r14 @ d += a[6] * b[5] + ldr r8, [r2, #4*4] @ b[4] + umlal r9, r10, r0, r14 @ d' += a[7] * b[5] + ldr r7, [r1, #8*4] @ a[8] + umlal r5, r6, r0, r8 @ d += a[7] * b[4] + ldr r14, [r2, #3*4] @ b[3] + umlal r9, r10, r7, r8 @ d' += a[8] * b[4] + ldr r0, [r1, #9*4] @ a[9] + umlal r5, r6, r7, r14 @ d += a[8] * b[3] + ldr r8, [r2, #2*4] @ b[2] + umlal r9, r10, r0, r14 @ d' += a[9] * b[3] + umlal r5, r6, r0, r8 @ d += a[9] * b[2] + + bic r0, r5, field_not_M @ u1 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u1 * R0 + umlal r3, r4, r0, r14 + + bic r14, r3, field_not_M @ t1 = c & M + str r14, [sp, #4 + 1*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u1 * R1 + umlal r3, r4, r0, r14 + + /* D */ + adds r3, r3, r11 @ c += c' + adc r4, r4, r12 + adds r5, r5, r9 @ d += d' + adc r6, r6, r10 + + bic r0, r5, field_not_M @ u2 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u2 * R0 + umlal r3, r4, r0, r14 + + bic r14, r3, field_not_M @ t2 = c & M + str r14, [sp, #4 + 2*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u2 * R1 + umlal r3, r4, r0, r14 + + /* E - interleaved with F */ + ldr r7, [r1, #0*4] @ a[0] + ldr r8, [r2, #4*4] @ b[4] + umull r11, r12, r7, r8 @ c' = a[0] * b[4] + ldr r8, [r2, #3*4] @ b[3] + umlal r3, r4, r7, r8 @ c += a[0] * b[3] + ldr r7, [r1, #1*4] @ a[1] + umlal r11, r12, r7, r8 @ c' += a[1] * b[3] + ldr r8, [r2, #2*4] @ b[2] + umlal r3, r4, r7, r8 @ c += a[1] * b[2] + ldr r7, [r1, #2*4] @ a[2] + umlal r11, r12, r7, r8 @ c' += a[2] * b[2] + ldr r8, [r2, #1*4] @ b[1] + umlal r3, r4, r7, r8 @ c += a[2] * b[1] + ldr r7, [r1, #3*4] @ a[3] + umlal r11, r12, r7, r8 @ c' += a[3] * b[1] + ldr r8, [r2, #0*4] @ b[0] + umlal r3, r4, r7, r8 @ c += a[3] * b[0] + ldr r7, [r1, #4*4] @ a[4] + umlal r11, r12, r7, r8 @ c' += a[4] * b[0] + ldr r8, [r2, #9*4] @ b[9] + umlal r5, r6, r7, r8 @ d += a[4] * b[9] + ldr r7, [r1, #5*4] @ a[5] + umull r9, r10, r7, r8 @ d' = a[5] * b[9] + ldr r8, [r2, #8*4] @ b[8] + umlal r5, r6, r7, r8 @ d += a[5] * b[8] + ldr r7, [r1, #6*4] @ a[6] + umlal r9, r10, r7, r8 @ d' += a[6] * b[8] + ldr r8, [r2, #7*4] @ b[7] + umlal r5, r6, r7, r8 @ d += a[6] * b[7] + ldr r7, [r1, #7*4] @ a[7] + umlal r9, r10, r7, r8 @ d' += a[7] * b[7] + ldr r8, [r2, #6*4] @ b[6] + umlal r5, r6, r7, r8 @ d += a[7] * b[6] + ldr r7, [r1, #8*4] @ a[8] + umlal r9, r10, r7, r8 @ d' += a[8] * b[6] + ldr r8, [r2, #5*4] @ b[5] + umlal r5, r6, r7, r8 @ d += a[8] * b[5] + ldr r7, [r1, #9*4] @ a[9] + umlal r9, r10, r7, r8 @ d' += a[9] * b[5] + ldr r8, [r2, #4*4] @ b[4] + umlal r5, r6, r7, r8 @ d += a[9] * b[4] + + bic r0, r5, field_not_M @ u3 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u3 * R0 + umlal r3, r4, r0, r14 + + bic r14, r3, field_not_M @ t3 = c & M + str r14, [sp, #4 + 3*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u3 * R1 + umlal r3, r4, r0, r14 + + /* F */ + adds r3, r3, r11 @ c += c' + adc r4, r4, r12 + adds r5, r5, r9 @ d += d' + adc r6, r6, r10 + + bic r0, r5, field_not_M @ u4 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u4 * R0 + umlal r3, r4, r0, r14 + + bic r14, r3, field_not_M @ t4 = c & M + str r14, [sp, #4 + 4*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u4 * R1 + umlal r3, r4, r0, r14 + + /* G - interleaved with H */ + ldr r7, [r1, #0*4] @ a[0] + ldr r8, [r2, #6*4] @ b[6] + ldr r14, [r2, #5*4] @ b[5] + umull r11, r12, r7, r8 @ c' = a[0] * b[6] + ldr r0, [r1, #1*4] @ a[1] + umlal r3, r4, r7, r14 @ c += a[0] * b[5] + ldr r8, [r2, #4*4] @ b[4] + umlal r11, r12, r0, r14 @ c' += a[1] * b[5] + ldr r7, [r1, #2*4] @ a[2] + umlal r3, r4, r0, r8 @ c += a[1] * b[4] + ldr r14, [r2, #3*4] @ b[3] + umlal r11, r12, r7, r8 @ c' += a[2] * b[4] + ldr r0, [r1, #3*4] @ a[3] + umlal r3, r4, r7, r14 @ c += a[2] * b[3] + ldr r8, [r2, #2*4] @ b[2] + umlal r11, r12, r0, r14 @ c' += a[3] * b[3] + ldr r7, [r1, #4*4] @ a[4] + umlal r3, r4, r0, r8 @ c += a[3] * b[2] + ldr r14, [r2, #1*4] @ b[1] + umlal r11, r12, r7, r8 @ c' += a[4] * b[2] + ldr r0, [r1, #5*4] @ a[5] + umlal r3, r4, r7, r14 @ c += a[4] * b[1] + ldr r8, [r2, #0*4] @ b[0] + umlal r11, r12, r0, r14 @ c' += a[5] * b[1] + ldr r7, [r1, #6*4] @ a[6] + umlal r3, r4, r0, r8 @ c += a[5] * b[0] + ldr r14, [r2, #9*4] @ b[9] + umlal r11, r12, r7, r8 @ c' += a[6] * b[0] + ldr r0, [r1, #7*4] @ a[7] + umlal r5, r6, r7, r14 @ d += a[6] * b[9] + ldr r8, [r2, #8*4] @ b[8] + umull r9, r10, r0, r14 @ d' = a[7] * b[9] + ldr r7, [r1, #8*4] @ a[8] + umlal r5, r6, r0, r8 @ d += a[7] * b[8] + ldr r14, [r2, #7*4] @ b[7] + umlal r9, r10, r7, r8 @ d' += a[8] * b[8] + ldr r0, [r1, #9*4] @ a[9] + umlal r5, r6, r7, r14 @ d += a[8] * b[7] + ldr r8, [r2, #6*4] @ b[6] + umlal r9, r10, r0, r14 @ d' += a[9] * b[7] + umlal r5, r6, r0, r8 @ d += a[9] * b[6] + + bic r0, r5, field_not_M @ u5 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u5 * R0 + umlal r3, r4, r0, r14 + + bic r14, r3, field_not_M @ t5 = c & M + str r14, [sp, #4 + 5*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u5 * R1 + umlal r3, r4, r0, r14 + + /* H */ + adds r3, r3, r11 @ c += c' + adc r4, r4, r12 + adds r5, r5, r9 @ d += d' + adc r6, r6, r10 + + bic r0, r5, field_not_M @ u6 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u6 * R0 + umlal r3, r4, r0, r14 + + bic r14, r3, field_not_M @ t6 = c & M + str r14, [sp, #4 + 6*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u6 * R1 + umlal r3, r4, r0, r14 + + /* I - interleaved with J */ + ldr r8, [r2, #8*4] @ b[8] + ldr r7, [r1, #0*4] @ a[0] + ldr r14, [r2, #7*4] @ b[7] + umull r11, r12, r7, r8 @ c' = a[0] * b[8] + ldr r0, [r1, #1*4] @ a[1] + umlal r3, r4, r7, r14 @ c += a[0] * b[7] + ldr r8, [r2, #6*4] @ b[6] + umlal r11, r12, r0, r14 @ c' += a[1] * b[7] + ldr r7, [r1, #2*4] @ a[2] + umlal r3, r4, r0, r8 @ c += a[1] * b[6] + ldr r14, [r2, #5*4] @ b[5] + umlal r11, r12, r7, r8 @ c' += a[2] * b[6] + ldr r0, [r1, #3*4] @ a[3] + umlal r3, r4, r7, r14 @ c += a[2] * b[5] + ldr r8, [r2, #4*4] @ b[4] + umlal r11, r12, r0, r14 @ c' += a[3] * b[5] + ldr r7, [r1, #4*4] @ a[4] + umlal r3, r4, r0, r8 @ c += a[3] * b[4] + ldr r14, [r2, #3*4] @ b[3] + umlal r11, r12, r7, r8 @ c' += a[4] * b[4] + ldr r0, [r1, #5*4] @ a[5] + umlal r3, r4, r7, r14 @ c += a[4] * b[3] + ldr r8, [r2, #2*4] @ b[2] + umlal r11, r12, r0, r14 @ c' += a[5] * b[3] + ldr r7, [r1, #6*4] @ a[6] + umlal r3, r4, r0, r8 @ c += a[5] * b[2] + ldr r14, [r2, #1*4] @ b[1] + umlal r11, r12, r7, r8 @ c' += a[6] * b[2] + ldr r0, [r1, #7*4] @ a[7] + umlal r3, r4, r7, r14 @ c += a[6] * b[1] + ldr r8, [r2, #0*4] @ b[0] + umlal r11, r12, r0, r14 @ c' += a[7] * b[1] + ldr r7, [r1, #8*4] @ a[8] + umlal r3, r4, r0, r8 @ c += a[7] * b[0] + ldr r14, [r2, #9*4] @ b[9] + umlal r11, r12, r7, r8 @ c' += a[8] * b[0] + ldr r0, [r1, #9*4] @ a[9] + umlal r5, r6, r7, r14 @ d += a[8] * b[9] + ldr r8, [r2, #8*4] @ b[8] + umull r9, r10, r0, r14 @ d' = a[9] * b[9] + umlal r5, r6, r0, r8 @ d += a[9] * b[8] + + bic r0, r5, field_not_M @ u7 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u7 * R0 + umlal r3, r4, r0, r14 + + bic r14, r3, field_not_M @ t7 = c & M + str r14, [sp, #4 + 7*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u7 * R1 + umlal r3, r4, r0, r14 + + /* J */ + adds r3, r3, r11 @ c += c' + adc r4, r4, r12 + adds r5, r5, r9 @ d += d' + adc r6, r6, r10 + + bic r0, r5, field_not_M @ u8 = d & M + str r0, [sp, #4 + 8*4] + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u8 * R0 + umlal r3, r4, r0, r14 + + /****************************************** + * compute and write back result + ****************************************** + Allocation: + r0 r + r3:r4 c + r5:r6 d + r7 t0 + r8 t1 + r9 t2 + r11 u8 + r12 t9 + r1,r2,r10,r14 scratch + + Note: do not read from a[] after here, it may overlap with r[] + */ + ldr r0, [sp, #0] + add r1, sp, #4 + 3*4 @ r[3..7] = t3..7, r11=u8, r12=t9 + ldmia r1, {r2,r7,r8,r9,r10,r11,r12} + add r1, r0, #3*4 + stmia r1, {r2,r7,r8,r9,r10} + + bic r2, r3, field_not_M @ r[8] = c & M + str r2, [r0, #8*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u8 * R1 + umlal r3, r4, r11, r14 + movw r14, field_R0 @ c += d * R0 + umlal r3, r4, r5, r14 + adds r3, r3, r12 @ c += t9 + adc r4, r4, #0 + + add r1, sp, #4 + 0*4 @ r7,r8,r9 = t0,t1,t2 + ldmia r1, {r7,r8,r9} + + ubfx r2, r3, #0, #22 @ r[9] = c & (M >> 4) + str r2, [r0, #9*4] + mov r3, r3, lsr #22 @ c >>= 22 + orr r3, r3, r4, asl #10 + mov r4, r4, lsr #22 + movw r14, field_R1 << 4 @ c += d * (R1 << 4) + umlal r3, r4, r5, r14 + + movw r14, field_R0 >> 4 @ d = c * (R0 >> 4) + t0 (64x64 multiply+add) + umull r5, r6, r3, r14 @ d = c.lo * (R0 >> 4) + adds r5, r5, r7 @ d.lo += t0 + mla r6, r14, r4, r6 @ d.hi += c.hi * (R0 >> 4) + adc r6, r6, 0 @ d.hi += carry + + bic r2, r5, field_not_M @ r[0] = d & M + str r2, [r0, #0*4] + + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + + movw r14, field_R1 >> 4 @ d += c * (R1 >> 4) + t1 (64x64 multiply+add) + umull r1, r2, r3, r14 @ tmp = c.lo * (R1 >> 4) + adds r5, r5, r8 @ d.lo += t1 + adc r6, r6, #0 @ d.hi += carry + adds r5, r5, r1 @ d.lo += tmp.lo + mla r2, r14, r4, r2 @ tmp.hi += c.hi * (R1 >> 4) + adc r6, r6, r2 @ d.hi += carry + tmp.hi + + bic r2, r5, field_not_M @ r[1] = d & M + str r2, [r0, #1*4] + mov r5, r5, lsr #26 @ d >>= 26 (ignore hi) + orr r5, r5, r6, asl #6 + + add r5, r5, r9 @ d += t2 + str r5, [r0, #2*4] @ r[2] = d + + add sp, sp, #48 + ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc} + .size secp256k1_fe_mul_inner, .-secp256k1_fe_mul_inner + + .align 2 + .global secp256k1_fe_sqr_inner + .type secp256k1_fe_sqr_inner, %function + @ Arguments: + @ r0 r Can overlap with a + @ r1 a + @ Stack (total 4+10*4 = 44) + @ sp + #0 saved 'r' pointer + @ sp + #4 + 4*X t0,t1,t2,t3,t4,t5,t6,t7,u8,t9 +secp256k1_fe_sqr_inner: + stmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, r14} + sub sp, sp, #48 @ frame=44 + alignment + str r0, [sp, #0] @ save result address, we need it only at the end + /****************************************** + * Main computation code. + ****************************************** + + Allocation: + r0,r14,r2,r7,r8 scratch + r1 a (pointer) + r3:r4 c + r5:r6 d + r11:r12 c' + r9:r10 d' + + Note: do not write to r[] here, it may overlap with a[] + */ + /* A interleaved with B */ + ldr r0, [r1, #1*4] @ a[1]*2 + ldr r7, [r1, #0*4] @ a[0] + mov r0, r0, asl #1 + ldr r14, [r1, #9*4] @ a[9] + umull r3, r4, r7, r7 @ c = a[0] * a[0] + ldr r8, [r1, #8*4] @ a[8] + mov r7, r7, asl #1 + umull r5, r6, r7, r14 @ d = a[0]*2 * a[9] + ldr r7, [r1, #2*4] @ a[2]*2 + umull r9, r10, r0, r14 @ d' = a[1]*2 * a[9] + ldr r14, [r1, #7*4] @ a[7] + umlal r5, r6, r0, r8 @ d += a[1]*2 * a[8] + mov r7, r7, asl #1 + ldr r0, [r1, #3*4] @ a[3]*2 + umlal r9, r10, r7, r8 @ d' += a[2]*2 * a[8] + ldr r8, [r1, #6*4] @ a[6] + umlal r5, r6, r7, r14 @ d += a[2]*2 * a[7] + mov r0, r0, asl #1 + ldr r7, [r1, #4*4] @ a[4]*2 + umlal r9, r10, r0, r14 @ d' += a[3]*2 * a[7] + ldr r14, [r1, #5*4] @ a[5] + mov r7, r7, asl #1 + umlal r5, r6, r0, r8 @ d += a[3]*2 * a[6] + umlal r9, r10, r7, r8 @ d' += a[4]*2 * a[6] + umlal r5, r6, r7, r14 @ d += a[4]*2 * a[5] + umlal r9, r10, r14, r14 @ d' += a[5] * a[5] + + bic r0, r5, field_not_M @ t9 = d & M + str r0, [sp, #4 + 9*4] + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + + /* B */ + adds r5, r5, r9 @ d += d' + adc r6, r6, r10 + + bic r0, r5, field_not_M @ u0 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u0 * R0 + umlal r3, r4, r0, r14 + bic r14, r3, field_not_M @ t0 = c & M + str r14, [sp, #4 + 0*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u0 * R1 + umlal r3, r4, r0, r14 + + /* C interleaved with D */ + ldr r0, [r1, #0*4] @ a[0]*2 + ldr r14, [r1, #1*4] @ a[1] + mov r0, r0, asl #1 + ldr r8, [r1, #2*4] @ a[2] + umlal r3, r4, r0, r14 @ c += a[0]*2 * a[1] + mov r7, r8, asl #1 @ a[2]*2 + umull r11, r12, r14, r14 @ c' = a[1] * a[1] + ldr r14, [r1, #9*4] @ a[9] + umlal r11, r12, r0, r8 @ c' += a[0]*2 * a[2] + ldr r0, [r1, #3*4] @ a[3]*2 + ldr r8, [r1, #8*4] @ a[8] + umlal r5, r6, r7, r14 @ d += a[2]*2 * a[9] + mov r0, r0, asl #1 + ldr r7, [r1, #4*4] @ a[4]*2 + umull r9, r10, r0, r14 @ d' = a[3]*2 * a[9] + ldr r14, [r1, #7*4] @ a[7] + umlal r5, r6, r0, r8 @ d += a[3]*2 * a[8] + mov r7, r7, asl #1 + ldr r0, [r1, #5*4] @ a[5]*2 + umlal r9, r10, r7, r8 @ d' += a[4]*2 * a[8] + ldr r8, [r1, #6*4] @ a[6] + mov r0, r0, asl #1 + umlal r5, r6, r7, r14 @ d += a[4]*2 * a[7] + umlal r9, r10, r0, r14 @ d' += a[5]*2 * a[7] + umlal r5, r6, r0, r8 @ d += a[5]*2 * a[6] + umlal r9, r10, r8, r8 @ d' += a[6] * a[6] + + bic r0, r5, field_not_M @ u1 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u1 * R0 + umlal r3, r4, r0, r14 + bic r14, r3, field_not_M @ t1 = c & M + str r14, [sp, #4 + 1*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u1 * R1 + umlal r3, r4, r0, r14 + + /* D */ + adds r3, r3, r11 @ c += c' + adc r4, r4, r12 + adds r5, r5, r9 @ d += d' + adc r6, r6, r10 + + bic r0, r5, field_not_M @ u2 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u2 * R0 + umlal r3, r4, r0, r14 + bic r14, r3, field_not_M @ t2 = c & M + str r14, [sp, #4 + 2*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u2 * R1 + umlal r3, r4, r0, r14 + + /* E interleaved with F */ + ldr r7, [r1, #0*4] @ a[0]*2 + ldr r0, [r1, #1*4] @ a[1]*2 + ldr r14, [r1, #2*4] @ a[2] + mov r7, r7, asl #1 + ldr r8, [r1, #3*4] @ a[3] + ldr r2, [r1, #4*4] + umlal r3, r4, r7, r8 @ c += a[0]*2 * a[3] + mov r0, r0, asl #1 + umull r11, r12, r7, r2 @ c' = a[0]*2 * a[4] + mov r2, r2, asl #1 @ a[4]*2 + umlal r11, r12, r0, r8 @ c' += a[1]*2 * a[3] + ldr r8, [r1, #9*4] @ a[9] + umlal r3, r4, r0, r14 @ c += a[1]*2 * a[2] + ldr r0, [r1, #5*4] @ a[5]*2 + umlal r11, r12, r14, r14 @ c' += a[2] * a[2] + ldr r14, [r1, #8*4] @ a[8] + mov r0, r0, asl #1 + umlal r5, r6, r2, r8 @ d += a[4]*2 * a[9] + ldr r7, [r1, #6*4] @ a[6]*2 + umull r9, r10, r0, r8 @ d' = a[5]*2 * a[9] + mov r7, r7, asl #1 + ldr r8, [r1, #7*4] @ a[7] + umlal r5, r6, r0, r14 @ d += a[5]*2 * a[8] + umlal r9, r10, r7, r14 @ d' += a[6]*2 * a[8] + umlal r5, r6, r7, r8 @ d += a[6]*2 * a[7] + umlal r9, r10, r8, r8 @ d' += a[7] * a[7] + + bic r0, r5, field_not_M @ u3 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u3 * R0 + umlal r3, r4, r0, r14 + bic r14, r3, field_not_M @ t3 = c & M + str r14, [sp, #4 + 3*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u3 * R1 + umlal r3, r4, r0, r14 + + /* F */ + adds r3, r3, r11 @ c += c' + adc r4, r4, r12 + adds r5, r5, r9 @ d += d' + adc r6, r6, r10 + + bic r0, r5, field_not_M @ u4 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u4 * R0 + umlal r3, r4, r0, r14 + bic r14, r3, field_not_M @ t4 = c & M + str r14, [sp, #4 + 4*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u4 * R1 + umlal r3, r4, r0, r14 + + /* G interleaved with H */ + ldr r7, [r1, #0*4] @ a[0]*2 + ldr r0, [r1, #1*4] @ a[1]*2 + mov r7, r7, asl #1 + ldr r8, [r1, #5*4] @ a[5] + ldr r2, [r1, #6*4] @ a[6] + umlal r3, r4, r7, r8 @ c += a[0]*2 * a[5] + ldr r14, [r1, #4*4] @ a[4] + mov r0, r0, asl #1 + umull r11, r12, r7, r2 @ c' = a[0]*2 * a[6] + ldr r7, [r1, #2*4] @ a[2]*2 + umlal r11, r12, r0, r8 @ c' += a[1]*2 * a[5] + mov r7, r7, asl #1 + ldr r8, [r1, #3*4] @ a[3] + umlal r3, r4, r0, r14 @ c += a[1]*2 * a[4] + mov r0, r2, asl #1 @ a[6]*2 + umlal r11, r12, r7, r14 @ c' += a[2]*2 * a[4] + ldr r14, [r1, #9*4] @ a[9] + umlal r3, r4, r7, r8 @ c += a[2]*2 * a[3] + ldr r7, [r1, #7*4] @ a[7]*2 + umlal r11, r12, r8, r8 @ c' += a[3] * a[3] + mov r7, r7, asl #1 + ldr r8, [r1, #8*4] @ a[8] + umlal r5, r6, r0, r14 @ d += a[6]*2 * a[9] + umull r9, r10, r7, r14 @ d' = a[7]*2 * a[9] + umlal r5, r6, r7, r8 @ d += a[7]*2 * a[8] + umlal r9, r10, r8, r8 @ d' += a[8] * a[8] + + bic r0, r5, field_not_M @ u5 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u5 * R0 + umlal r3, r4, r0, r14 + bic r14, r3, field_not_M @ t5 = c & M + str r14, [sp, #4 + 5*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u5 * R1 + umlal r3, r4, r0, r14 + + /* H */ + adds r3, r3, r11 @ c += c' + adc r4, r4, r12 + adds r5, r5, r9 @ d += d' + adc r6, r6, r10 + + bic r0, r5, field_not_M @ u6 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u6 * R0 + umlal r3, r4, r0, r14 + bic r14, r3, field_not_M @ t6 = c & M + str r14, [sp, #4 + 6*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u6 * R1 + umlal r3, r4, r0, r14 + + /* I interleaved with J */ + ldr r7, [r1, #0*4] @ a[0]*2 + ldr r0, [r1, #1*4] @ a[1]*2 + mov r7, r7, asl #1 + ldr r8, [r1, #7*4] @ a[7] + ldr r2, [r1, #8*4] @ a[8] + umlal r3, r4, r7, r8 @ c += a[0]*2 * a[7] + ldr r14, [r1, #6*4] @ a[6] + mov r0, r0, asl #1 + umull r11, r12, r7, r2 @ c' = a[0]*2 * a[8] + ldr r7, [r1, #2*4] @ a[2]*2 + umlal r11, r12, r0, r8 @ c' += a[1]*2 * a[7] + ldr r8, [r1, #5*4] @ a[5] + umlal r3, r4, r0, r14 @ c += a[1]*2 * a[6] + ldr r0, [r1, #3*4] @ a[3]*2 + mov r7, r7, asl #1 + umlal r11, r12, r7, r14 @ c' += a[2]*2 * a[6] + ldr r14, [r1, #4*4] @ a[4] + mov r0, r0, asl #1 + umlal r3, r4, r7, r8 @ c += a[2]*2 * a[5] + mov r2, r2, asl #1 @ a[8]*2 + umlal r11, r12, r0, r8 @ c' += a[3]*2 * a[5] + umlal r3, r4, r0, r14 @ c += a[3]*2 * a[4] + umlal r11, r12, r14, r14 @ c' += a[4] * a[4] + ldr r8, [r1, #9*4] @ a[9] + umlal r5, r6, r2, r8 @ d += a[8]*2 * a[9] + @ r8 will be used in J + + bic r0, r5, field_not_M @ u7 = d & M + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u7 * R0 + umlal r3, r4, r0, r14 + bic r14, r3, field_not_M @ t7 = c & M + str r14, [sp, #4 + 7*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u7 * R1 + umlal r3, r4, r0, r14 + + /* J */ + adds r3, r3, r11 @ c += c' + adc r4, r4, r12 + umlal r5, r6, r8, r8 @ d += a[9] * a[9] + + bic r0, r5, field_not_M @ u8 = d & M + str r0, [sp, #4 + 8*4] + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + movw r14, field_R0 @ c += u8 * R0 + umlal r3, r4, r0, r14 + + /****************************************** + * compute and write back result + ****************************************** + Allocation: + r0 r + r3:r4 c + r5:r6 d + r7 t0 + r8 t1 + r9 t2 + r11 u8 + r12 t9 + r1,r2,r10,r14 scratch + + Note: do not read from a[] after here, it may overlap with r[] + */ + ldr r0, [sp, #0] + add r1, sp, #4 + 3*4 @ r[3..7] = t3..7, r11=u8, r12=t9 + ldmia r1, {r2,r7,r8,r9,r10,r11,r12} + add r1, r0, #3*4 + stmia r1, {r2,r7,r8,r9,r10} + + bic r2, r3, field_not_M @ r[8] = c & M + str r2, [r0, #8*4] + mov r3, r3, lsr #26 @ c >>= 26 + orr r3, r3, r4, asl #6 + mov r4, r4, lsr #26 + mov r14, field_R1 @ c += u8 * R1 + umlal r3, r4, r11, r14 + movw r14, field_R0 @ c += d * R0 + umlal r3, r4, r5, r14 + adds r3, r3, r12 @ c += t9 + adc r4, r4, #0 + + add r1, sp, #4 + 0*4 @ r7,r8,r9 = t0,t1,t2 + ldmia r1, {r7,r8,r9} + + ubfx r2, r3, #0, #22 @ r[9] = c & (M >> 4) + str r2, [r0, #9*4] + mov r3, r3, lsr #22 @ c >>= 22 + orr r3, r3, r4, asl #10 + mov r4, r4, lsr #22 + movw r14, field_R1 << 4 @ c += d * (R1 << 4) + umlal r3, r4, r5, r14 + + movw r14, field_R0 >> 4 @ d = c * (R0 >> 4) + t0 (64x64 multiply+add) + umull r5, r6, r3, r14 @ d = c.lo * (R0 >> 4) + adds r5, r5, r7 @ d.lo += t0 + mla r6, r14, r4, r6 @ d.hi += c.hi * (R0 >> 4) + adc r6, r6, 0 @ d.hi += carry + + bic r2, r5, field_not_M @ r[0] = d & M + str r2, [r0, #0*4] + + mov r5, r5, lsr #26 @ d >>= 26 + orr r5, r5, r6, asl #6 + mov r6, r6, lsr #26 + + movw r14, field_R1 >> 4 @ d += c * (R1 >> 4) + t1 (64x64 multiply+add) + umull r1, r2, r3, r14 @ tmp = c.lo * (R1 >> 4) + adds r5, r5, r8 @ d.lo += t1 + adc r6, r6, #0 @ d.hi += carry + adds r5, r5, r1 @ d.lo += tmp.lo + mla r2, r14, r4, r2 @ tmp.hi += c.hi * (R1 >> 4) + adc r6, r6, r2 @ d.hi += carry + tmp.hi + + bic r2, r5, field_not_M @ r[1] = d & M + str r2, [r0, #1*4] + mov r5, r5, lsr #26 @ d >>= 26 (ignore hi) + orr r5, r5, r6, asl #6 + + add r5, r5, r9 @ d += t2 + str r5, [r0, #2*4] @ r[2] = d + + add sp, sp, #48 + ldmfd sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc} + .size secp256k1_fe_sqr_inner, .-secp256k1_fe_sqr_inner + diff --git a/src/secp256k1/src/java/org/bitcoin/NativeSecp256k1Test.java b/src/secp256k1/src/java/org/bitcoin/NativeSecp256k1Test.java new file mode 100644 index 00000000..c00d0889 --- /dev/null +++ b/src/secp256k1/src/java/org/bitcoin/NativeSecp256k1Test.java @@ -0,0 +1,226 @@ +package org.bitcoin; + +import com.google.common.io.BaseEncoding; +import java.util.Arrays; +import java.math.BigInteger; +import javax.xml.bind.DatatypeConverter; +import static org.bitcoin.NativeSecp256k1Util.*; + +/** + * This class holds test cases defined for testing this library. + */ +public class NativeSecp256k1Test { + + //TODO improve comments/add more tests + /** + * This tests verify() for a valid signature + */ + public static void testVerifyPos() throws AssertFailException{ + boolean result = false; + byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A90".toLowerCase()); //sha256hash of "testing" + byte[] sig = BaseEncoding.base16().lowerCase().decode("3044022079BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F817980220294F14E883B3F525B5367756C2A11EF6CF84B730B36C17CB0C56F0AAB2C98589".toLowerCase()); + byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase()); + + result = NativeSecp256k1.verify( data, sig, pub); + assertEquals( result, true , "testVerifyPos"); + } + + /** + * This tests verify() for a non-valid signature + */ + public static void testVerifyNeg() throws AssertFailException{ + boolean result = false; + byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A91".toLowerCase()); //sha256hash of "testing" + byte[] sig = BaseEncoding.base16().lowerCase().decode("3044022079BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F817980220294F14E883B3F525B5367756C2A11EF6CF84B730B36C17CB0C56F0AAB2C98589".toLowerCase()); + byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase()); + + result = NativeSecp256k1.verify( data, sig, pub); + //System.out.println(" TEST " + new BigInteger(1, resultbytes).toString(16)); + assertEquals( result, false , "testVerifyNeg"); + } + + /** + * This tests secret key verify() for a valid secretkey + */ + public static void testSecKeyVerifyPos() throws AssertFailException{ + boolean result = false; + byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase()); + + result = NativeSecp256k1.secKeyVerify( sec ); + //System.out.println(" TEST " + new BigInteger(1, resultbytes).toString(16)); + assertEquals( result, true , "testSecKeyVerifyPos"); + } + + /** + * This tests secret key verify() for a invalid secretkey + */ + public static void testSecKeyVerifyNeg() throws AssertFailException{ + boolean result = false; + byte[] sec = BaseEncoding.base16().lowerCase().decode("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".toLowerCase()); + + result = NativeSecp256k1.secKeyVerify( sec ); + //System.out.println(" TEST " + new BigInteger(1, resultbytes).toString(16)); + assertEquals( result, false , "testSecKeyVerifyNeg"); + } + + /** + * This tests public key create() for a valid secretkey + */ + public static void testPubKeyCreatePos() throws AssertFailException{ + byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase()); + + byte[] resultArr = NativeSecp256k1.computePubkey( sec); + String pubkeyString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); + assertEquals( pubkeyString , "04C591A8FF19AC9C4E4E5793673B83123437E975285E7B442F4EE2654DFFCA5E2D2103ED494718C697AC9AEBCFD19612E224DB46661011863ED2FC54E71861E2A6" , "testPubKeyCreatePos"); + } + + /** + * This tests public key create() for a invalid secretkey + */ + public static void testPubKeyCreateNeg() throws AssertFailException{ + byte[] sec = BaseEncoding.base16().lowerCase().decode("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".toLowerCase()); + + byte[] resultArr = NativeSecp256k1.computePubkey( sec); + String pubkeyString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); + assertEquals( pubkeyString, "" , "testPubKeyCreateNeg"); + } + + /** + * This tests sign() for a valid secretkey + */ + public static void testSignPos() throws AssertFailException{ + + byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A90".toLowerCase()); //sha256hash of "testing" + byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase()); + + byte[] resultArr = NativeSecp256k1.sign(data, sec); + String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); + assertEquals( sigString, "30440220182A108E1448DC8F1FB467D06A0F3BB8EA0533584CB954EF8DA112F1D60E39A202201C66F36DA211C087F3AF88B50EDF4F9BDAA6CF5FD6817E74DCA34DB12390C6E9" , "testSignPos"); + } + + /** + * This tests sign() for a invalid secretkey + */ + public static void testSignNeg() throws AssertFailException{ + byte[] data = BaseEncoding.base16().lowerCase().decode("CF80CD8AED482D5D1527D7DC72FCEFF84E6326592848447D2DC0B0E87DFC9A90".toLowerCase()); //sha256hash of "testing" + byte[] sec = BaseEncoding.base16().lowerCase().decode("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF".toLowerCase()); + + byte[] resultArr = NativeSecp256k1.sign(data, sec); + String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); + assertEquals( sigString, "" , "testSignNeg"); + } + + /** + * This tests private key tweak-add + */ + public static void testPrivKeyTweakAdd_1() throws AssertFailException { + byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase()); + byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak" + + byte[] resultArr = NativeSecp256k1.privKeyTweakAdd( sec , data ); + String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); + assertEquals( sigString , "A168571E189E6F9A7E2D657A4B53AE99B909F7E712D1C23CED28093CD57C88F3" , "testPrivKeyAdd_1"); + } + + /** + * This tests private key tweak-mul + */ + public static void testPrivKeyTweakMul_1() throws AssertFailException { + byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase()); + byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak" + + byte[] resultArr = NativeSecp256k1.privKeyTweakMul( sec , data ); + String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); + assertEquals( sigString , "97F8184235F101550F3C71C927507651BD3F1CDB4A5A33B8986ACF0DEE20FFFC" , "testPrivKeyMul_1"); + } + + /** + * This tests private key tweak-add uncompressed + */ + public static void testPrivKeyTweakAdd_2() throws AssertFailException { + byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase()); + byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak" + + byte[] resultArr = NativeSecp256k1.pubKeyTweakAdd( pub , data ); + String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); + assertEquals( sigString , "0411C6790F4B663CCE607BAAE08C43557EDC1A4D11D88DFCB3D841D0C6A941AF525A268E2A863C148555C48FB5FBA368E88718A46E205FABC3DBA2CCFFAB0796EF" , "testPrivKeyAdd_2"); + } + + /** + * This tests private key tweak-mul uncompressed + */ + public static void testPrivKeyTweakMul_2() throws AssertFailException { + byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase()); + byte[] data = BaseEncoding.base16().lowerCase().decode("3982F19BEF1615BCCFBB05E321C10E1D4CBA3DF0E841C2E41EEB6016347653C3".toLowerCase()); //sha256hash of "tweak" + + byte[] resultArr = NativeSecp256k1.pubKeyTweakMul( pub , data ); + String sigString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); + assertEquals( sigString , "04E0FE6FE55EBCA626B98A807F6CAF654139E14E5E3698F01A9A658E21DC1D2791EC060D4F412A794D5370F672BC94B722640B5F76914151CFCA6E712CA48CC589" , "testPrivKeyMul_2"); + } + + /** + * This tests seed randomization + */ + public static void testRandomize() throws AssertFailException { + byte[] seed = BaseEncoding.base16().lowerCase().decode("A441B15FE9A3CF56661190A0B93B9DEC7D04127288CC87250967CF3B52894D11".toLowerCase()); //sha256hash of "random" + boolean result = NativeSecp256k1.randomize(seed); + assertEquals( result, true, "testRandomize"); + } + + public static void testCreateECDHSecret() throws AssertFailException{ + + byte[] sec = BaseEncoding.base16().lowerCase().decode("67E56582298859DDAE725F972992A07C6C4FB9F62A8FFF58CE3CA926A1063530".toLowerCase()); + byte[] pub = BaseEncoding.base16().lowerCase().decode("040A629506E1B65CD9D2E0BA9C75DF9C4FED0DB16DC9625ED14397F0AFC836FAE595DC53F8B0EFE61E703075BD9B143BAC75EC0E19F82A2208CAEB32BE53414C40".toLowerCase()); + + byte[] resultArr = NativeSecp256k1.createECDHSecret(sec, pub); + String ecdhString = javax.xml.bind.DatatypeConverter.printHexBinary(resultArr); + assertEquals( ecdhString, "2A2A67007A926E6594AF3EB564FC74005B37A9C8AEF2033C4552051B5C87F043" , "testCreateECDHSecret"); + } + + public static void main(String[] args) throws AssertFailException{ + + + System.out.println("\n libsecp256k1 enabled: " + Secp256k1Context.isEnabled() + "\n"); + + assertEquals( Secp256k1Context.isEnabled(), true, "isEnabled" ); + + //Test verify() success/fail + testVerifyPos(); + testVerifyNeg(); + + //Test secKeyVerify() success/fail + testSecKeyVerifyPos(); + testSecKeyVerifyNeg(); + + //Test computePubkey() success/fail + testPubKeyCreatePos(); + testPubKeyCreateNeg(); + + //Test sign() success/fail + testSignPos(); + testSignNeg(); + + //Test privKeyTweakAdd() 1 + testPrivKeyTweakAdd_1(); + + //Test privKeyTweakMul() 2 + testPrivKeyTweakMul_1(); + + //Test privKeyTweakAdd() 3 + testPrivKeyTweakAdd_2(); + + //Test privKeyTweakMul() 4 + testPrivKeyTweakMul_2(); + + //Test randomize() + testRandomize(); + + //Test ECDH + testCreateECDHSecret(); + + NativeSecp256k1.cleanup(); + + System.out.println(" All tests passed." ); + + } +} diff --git a/src/secp256k1/src/java/org/bitcoin/NativeSecp256k1Util.java b/src/secp256k1/src/java/org/bitcoin/NativeSecp256k1Util.java new file mode 100644 index 00000000..04732ba0 --- /dev/null +++ b/src/secp256k1/src/java/org/bitcoin/NativeSecp256k1Util.java @@ -0,0 +1,45 @@ +/* + * Copyright 2014-2016 the libsecp256k1 contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.bitcoin; + +public class NativeSecp256k1Util{ + + public static void assertEquals( int val, int val2, String message ) throws AssertFailException{ + if( val != val2 ) + throw new AssertFailException("FAIL: " + message); + } + + public static void assertEquals( boolean val, boolean val2, String message ) throws AssertFailException{ + if( val != val2 ) + throw new AssertFailException("FAIL: " + message); + else + System.out.println("PASS: " + message); + } + + public static void assertEquals( String val, String val2, String message ) throws AssertFailException{ + if( !val.equals(val2) ) + throw new AssertFailException("FAIL: " + message); + else + System.out.println("PASS: " + message); + } + + public static class AssertFailException extends Exception { + public AssertFailException(String message) { + super( message ); + } + } +} diff --git a/src/secp256k1/src/java/org/bitcoin/Secp256k1Context.java b/src/secp256k1/src/java/org/bitcoin/Secp256k1Context.java new file mode 100644 index 00000000..216c986a --- /dev/null +++ b/src/secp256k1/src/java/org/bitcoin/Secp256k1Context.java @@ -0,0 +1,51 @@ +/* + * Copyright 2014-2016 the libsecp256k1 contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.bitcoin; + +/** + * This class holds the context reference used in native methods + * to handle ECDSA operations. + */ +public class Secp256k1Context { + private static final boolean enabled; //true if the library is loaded + private static final long context; //ref to pointer to context obj + + static { //static initializer + boolean isEnabled = true; + long contextRef = -1; + try { + System.loadLibrary("secp256k1"); + contextRef = secp256k1_init_context(); + } catch (UnsatisfiedLinkError e) { + System.out.println("UnsatisfiedLinkError: " + e.toString()); + isEnabled = false; + } + enabled = isEnabled; + context = contextRef; + } + + public static boolean isEnabled() { + return enabled; + } + + public static long getContext() { + if(!enabled) return -1; //sanity check + return context; + } + + private static native long secp256k1_init_context(); +} diff --git a/src/secp256k1/src/java/org_bitcoin_Secp256k1Context.c b/src/secp256k1/src/java/org_bitcoin_Secp256k1Context.c new file mode 100644 index 00000000..a52939e7 --- /dev/null +++ b/src/secp256k1/src/java/org_bitcoin_Secp256k1Context.c @@ -0,0 +1,15 @@ +#include +#include +#include "org_bitcoin_Secp256k1Context.h" +#include "include/secp256k1.h" + +SECP256K1_API jlong JNICALL Java_org_bitcoin_Secp256k1Context_secp256k1_1init_1context + (JNIEnv* env, jclass classObject) +{ + secp256k1_context *ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); + + (void)classObject;(void)env; + + return (uintptr_t)ctx; +} + diff --git a/src/secp256k1/src/java/org_bitcoin_Secp256k1Context.h b/src/secp256k1/src/java/org_bitcoin_Secp256k1Context.h new file mode 100644 index 00000000..0d2bc84b --- /dev/null +++ b/src/secp256k1/src/java/org_bitcoin_Secp256k1Context.h @@ -0,0 +1,22 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +#include "include/secp256k1.h" +/* Header for class org_bitcoin_Secp256k1Context */ + +#ifndef _Included_org_bitcoin_Secp256k1Context +#define _Included_org_bitcoin_Secp256k1Context +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_bitcoin_Secp256k1Context + * Method: secp256k1_init_context + * Signature: ()J + */ +SECP256K1_API jlong JNICALL Java_org_bitcoin_Secp256k1Context_secp256k1_1init_1context + (JNIEnv *, jclass); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/secp256k1/src/modules/recovery/main_impl.h b/src/secp256k1/src/modules/recovery/main_impl.h old mode 100644 new mode 100755 diff --git a/src/secp256k1/src/scalar_low.h b/src/secp256k1/src/scalar_low.h new file mode 100644 index 00000000..5574c44c --- /dev/null +++ b/src/secp256k1/src/scalar_low.h @@ -0,0 +1,15 @@ +/********************************************************************** + * Copyright (c) 2015 Andrew Poelstra * + * Distributed under the MIT software license, see the accompanying * + * file COPYING or http://www.opensource.org/licenses/mit-license.php.* + **********************************************************************/ + +#ifndef _SECP256K1_SCALAR_REPR_ +#define _SECP256K1_SCALAR_REPR_ + +#include + +/** A scalar modulo the group order of the secp256k1 curve. */ +typedef uint32_t secp256k1_scalar; + +#endif diff --git a/src/secp256k1/src/scalar_low_impl.h b/src/secp256k1/src/scalar_low_impl.h new file mode 100644 index 00000000..4f94441f --- /dev/null +++ b/src/secp256k1/src/scalar_low_impl.h @@ -0,0 +1,114 @@ +/********************************************************************** + * Copyright (c) 2015 Andrew Poelstra * + * Distributed under the MIT software license, see the accompanying * + * file COPYING or http://www.opensource.org/licenses/mit-license.php.* + **********************************************************************/ + +#ifndef _SECP256K1_SCALAR_REPR_IMPL_H_ +#define _SECP256K1_SCALAR_REPR_IMPL_H_ + +#include "scalar.h" + +#include + +SECP256K1_INLINE static int secp256k1_scalar_is_even(const secp256k1_scalar *a) { + return !(*a & 1); +} + +SECP256K1_INLINE static void secp256k1_scalar_clear(secp256k1_scalar *r) { *r = 0; } +SECP256K1_INLINE static void secp256k1_scalar_set_int(secp256k1_scalar *r, unsigned int v) { *r = v; } + +SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits(const secp256k1_scalar *a, unsigned int offset, unsigned int count) { + if (offset < 32) + return ((*a >> offset) & ((((uint32_t)1) << count) - 1)); + else + return 0; +} + +SECP256K1_INLINE static unsigned int secp256k1_scalar_get_bits_var(const secp256k1_scalar *a, unsigned int offset, unsigned int count) { + return secp256k1_scalar_get_bits(a, offset, count); +} + +SECP256K1_INLINE static int secp256k1_scalar_check_overflow(const secp256k1_scalar *a) { return *a >= EXHAUSTIVE_TEST_ORDER; } + +static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) { + *r = (*a + *b) % EXHAUSTIVE_TEST_ORDER; + return *r < *b; +} + +static void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag) { + if (flag && bit < 32) + *r += (1 << bit); +#ifdef VERIFY + VERIFY_CHECK(secp256k1_scalar_check_overflow(r) == 0); +#endif +} + +static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *b32, int *overflow) { + const int base = 0x100 % EXHAUSTIVE_TEST_ORDER; + int i; + *r = 0; + for (i = 0; i < 32; i++) { + *r = ((*r * base) + b32[i]) % EXHAUSTIVE_TEST_ORDER; + } + /* just deny overflow, it basically always happens */ + if (overflow) *overflow = 0; +} + +static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar* a) { + memset(bin, 0, 32); + bin[28] = *a >> 24; bin[29] = *a >> 16; bin[30] = *a >> 8; bin[31] = *a; +} + +SECP256K1_INLINE static int secp256k1_scalar_is_zero(const secp256k1_scalar *a) { + return *a == 0; +} + +static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a) { + if (*a == 0) { + *r = 0; + } else { + *r = EXHAUSTIVE_TEST_ORDER - *a; + } +} + +SECP256K1_INLINE static int secp256k1_scalar_is_one(const secp256k1_scalar *a) { + return *a == 1; +} + +static int secp256k1_scalar_is_high(const secp256k1_scalar *a) { + return *a > EXHAUSTIVE_TEST_ORDER / 2; +} + +static int secp256k1_scalar_cond_negate(secp256k1_scalar *r, int flag) { + if (flag) secp256k1_scalar_negate(r, r); + return flag ? -1 : 1; +} + +static void secp256k1_scalar_mul(secp256k1_scalar *r, const secp256k1_scalar *a, const secp256k1_scalar *b) { + *r = (*a * *b) % EXHAUSTIVE_TEST_ORDER; +} + +static int secp256k1_scalar_shr_int(secp256k1_scalar *r, int n) { + int ret; + VERIFY_CHECK(n > 0); + VERIFY_CHECK(n < 16); + ret = *r & ((1 << n) - 1); + *r >>= n; + return ret; +} + +static void secp256k1_scalar_sqr(secp256k1_scalar *r, const secp256k1_scalar *a) { + *r = (*a * *a) % EXHAUSTIVE_TEST_ORDER; +} + +static void secp256k1_scalar_split_128(secp256k1_scalar *r1, secp256k1_scalar *r2, const secp256k1_scalar *a) { + *r1 = *a; + *r2 = 0; +} + +SECP256K1_INLINE static int secp256k1_scalar_eq(const secp256k1_scalar *a, const secp256k1_scalar *b) { + return *a == *b; +} + +#endif diff --git a/src/secp256k1/src/tests_exhaustive.c b/src/secp256k1/src/tests_exhaustive.c new file mode 100644 index 00000000..b040bb07 --- /dev/null +++ b/src/secp256k1/src/tests_exhaustive.c @@ -0,0 +1,470 @@ +/*********************************************************************** + * Copyright (c) 2016 Andrew Poelstra * + * Distributed under the MIT software license, see the accompanying * + * file COPYING or http://www.opensource.org/licenses/mit-license.php.* + **********************************************************************/ + +#if defined HAVE_CONFIG_H +#include "libsecp256k1-config.h" +#endif + +#include +#include + +#include + +#undef USE_ECMULT_STATIC_PRECOMPUTATION + +#ifndef EXHAUSTIVE_TEST_ORDER +/* see group_impl.h for allowable values */ +#define EXHAUSTIVE_TEST_ORDER 13 +#define EXHAUSTIVE_TEST_LAMBDA 9 /* cube root of 1 mod 13 */ +#endif + +#include "include/secp256k1.h" +#include "group.h" +#include "secp256k1.c" +#include "testrand_impl.h" + +#ifdef ENABLE_MODULE_RECOVERY +#include "src/modules/recovery/main_impl.h" +#include "include/secp256k1_recovery.h" +#endif + +/** stolen from tests.c */ +void ge_equals_ge(const secp256k1_ge *a, const secp256k1_ge *b) { + CHECK(a->infinity == b->infinity); + if (a->infinity) { + return; + } + CHECK(secp256k1_fe_equal_var(&a->x, &b->x)); + CHECK(secp256k1_fe_equal_var(&a->y, &b->y)); +} + +void ge_equals_gej(const secp256k1_ge *a, const secp256k1_gej *b) { + secp256k1_fe z2s; + secp256k1_fe u1, u2, s1, s2; + CHECK(a->infinity == b->infinity); + if (a->infinity) { + return; + } + /* Check a.x * b.z^2 == b.x && a.y * b.z^3 == b.y, to avoid inverses. */ + secp256k1_fe_sqr(&z2s, &b->z); + secp256k1_fe_mul(&u1, &a->x, &z2s); + u2 = b->x; secp256k1_fe_normalize_weak(&u2); + secp256k1_fe_mul(&s1, &a->y, &z2s); secp256k1_fe_mul(&s1, &s1, &b->z); + s2 = b->y; secp256k1_fe_normalize_weak(&s2); + CHECK(secp256k1_fe_equal_var(&u1, &u2)); + CHECK(secp256k1_fe_equal_var(&s1, &s2)); +} + +void random_fe(secp256k1_fe *x) { + unsigned char bin[32]; + do { + secp256k1_rand256(bin); + if (secp256k1_fe_set_b32(x, bin)) { + return; + } + } while(1); +} +/** END stolen from tests.c */ + +int secp256k1_nonce_function_smallint(unsigned char *nonce32, const unsigned char *msg32, + const unsigned char *key32, const unsigned char *algo16, + void *data, unsigned int attempt) { + secp256k1_scalar s; + int *idata = data; + (void)msg32; + (void)key32; + (void)algo16; + /* Some nonces cannot be used because they'd cause s and/or r to be zero. + * The signing function has retry logic here that just re-calls the nonce + * function with an increased `attempt`. So if attempt > 0 this means we + * need to change the nonce to avoid an infinite loop. */ + if (attempt > 0) { + *idata = (*idata + 1) % EXHAUSTIVE_TEST_ORDER; + } + secp256k1_scalar_set_int(&s, *idata); + secp256k1_scalar_get_b32(nonce32, &s); + return 1; +} + +#ifdef USE_ENDOMORPHISM +void test_exhaustive_endomorphism(const secp256k1_ge *group, int order) { + int i; + for (i = 0; i < order; i++) { + secp256k1_ge res; + secp256k1_ge_mul_lambda(&res, &group[i]); + ge_equals_ge(&group[i * EXHAUSTIVE_TEST_LAMBDA % EXHAUSTIVE_TEST_ORDER], &res); + } +} +#endif + +void test_exhaustive_addition(const secp256k1_ge *group, const secp256k1_gej *groupj, int order) { + int i, j; + + /* Sanity-check (and check infinity functions) */ + CHECK(secp256k1_ge_is_infinity(&group[0])); + CHECK(secp256k1_gej_is_infinity(&groupj[0])); + for (i = 1; i < order; i++) { + CHECK(!secp256k1_ge_is_infinity(&group[i])); + CHECK(!secp256k1_gej_is_infinity(&groupj[i])); + } + + /* Check all addition formulae */ + for (j = 0; j < order; j++) { + secp256k1_fe fe_inv; + secp256k1_fe_inv(&fe_inv, &groupj[j].z); + for (i = 0; i < order; i++) { + secp256k1_ge zless_gej; + secp256k1_gej tmp; + /* add_var */ + secp256k1_gej_add_var(&tmp, &groupj[i], &groupj[j], NULL); + ge_equals_gej(&group[(i + j) % order], &tmp); + /* add_ge */ + if (j > 0) { + secp256k1_gej_add_ge(&tmp, &groupj[i], &group[j]); + ge_equals_gej(&group[(i + j) % order], &tmp); + } + /* add_ge_var */ + secp256k1_gej_add_ge_var(&tmp, &groupj[i], &group[j], NULL); + ge_equals_gej(&group[(i + j) % order], &tmp); + /* add_zinv_var */ + zless_gej.infinity = groupj[j].infinity; + zless_gej.x = groupj[j].x; + zless_gej.y = groupj[j].y; + secp256k1_gej_add_zinv_var(&tmp, &groupj[i], &zless_gej, &fe_inv); + ge_equals_gej(&group[(i + j) % order], &tmp); + } + } + + /* Check doubling */ + for (i = 0; i < order; i++) { + secp256k1_gej tmp; + if (i > 0) { + secp256k1_gej_double_nonzero(&tmp, &groupj[i], NULL); + ge_equals_gej(&group[(2 * i) % order], &tmp); + } + secp256k1_gej_double_var(&tmp, &groupj[i], NULL); + ge_equals_gej(&group[(2 * i) % order], &tmp); + } + + /* Check negation */ + for (i = 1; i < order; i++) { + secp256k1_ge tmp; + secp256k1_gej tmpj; + secp256k1_ge_neg(&tmp, &group[i]); + ge_equals_ge(&group[order - i], &tmp); + secp256k1_gej_neg(&tmpj, &groupj[i]); + ge_equals_gej(&group[order - i], &tmpj); + } +} + +void test_exhaustive_ecmult(const secp256k1_context *ctx, const secp256k1_ge *group, const secp256k1_gej *groupj, int order) { + int i, j, r_log; + for (r_log = 1; r_log < order; r_log++) { + for (j = 0; j < order; j++) { + for (i = 0; i < order; i++) { + secp256k1_gej tmp; + secp256k1_scalar na, ng; + secp256k1_scalar_set_int(&na, i); + secp256k1_scalar_set_int(&ng, j); + + secp256k1_ecmult(&ctx->ecmult_ctx, &tmp, &groupj[r_log], &na, &ng); + ge_equals_gej(&group[(i * r_log + j) % order], &tmp); + + if (i > 0) { + secp256k1_ecmult_const(&tmp, &group[i], &ng); + ge_equals_gej(&group[(i * j) % order], &tmp); + } + } + } + } +} + +void r_from_k(secp256k1_scalar *r, const secp256k1_ge *group, int k) { + secp256k1_fe x; + unsigned char x_bin[32]; + k %= EXHAUSTIVE_TEST_ORDER; + x = group[k].x; + secp256k1_fe_normalize(&x); + secp256k1_fe_get_b32(x_bin, &x); + secp256k1_scalar_set_b32(r, x_bin, NULL); +} + +void test_exhaustive_verify(const secp256k1_context *ctx, const secp256k1_ge *group, int order) { + int s, r, msg, key; + for (s = 1; s < order; s++) { + for (r = 1; r < order; r++) { + for (msg = 1; msg < order; msg++) { + for (key = 1; key < order; key++) { + secp256k1_ge nonconst_ge; + secp256k1_ecdsa_signature sig; + secp256k1_pubkey pk; + secp256k1_scalar sk_s, msg_s, r_s, s_s; + secp256k1_scalar s_times_k_s, msg_plus_r_times_sk_s; + int k, should_verify; + unsigned char msg32[32]; + + secp256k1_scalar_set_int(&s_s, s); + secp256k1_scalar_set_int(&r_s, r); + secp256k1_scalar_set_int(&msg_s, msg); + secp256k1_scalar_set_int(&sk_s, key); + + /* Verify by hand */ + /* Run through every k value that gives us this r and check that *one* works. + * Note there could be none, there could be multiple, ECDSA is weird. */ + should_verify = 0; + for (k = 0; k < order; k++) { + secp256k1_scalar check_x_s; + r_from_k(&check_x_s, group, k); + if (r_s == check_x_s) { + secp256k1_scalar_set_int(&s_times_k_s, k); + secp256k1_scalar_mul(&s_times_k_s, &s_times_k_s, &s_s); + secp256k1_scalar_mul(&msg_plus_r_times_sk_s, &r_s, &sk_s); + secp256k1_scalar_add(&msg_plus_r_times_sk_s, &msg_plus_r_times_sk_s, &msg_s); + should_verify |= secp256k1_scalar_eq(&s_times_k_s, &msg_plus_r_times_sk_s); + } + } + /* nb we have a "high s" rule */ + should_verify &= !secp256k1_scalar_is_high(&s_s); + + /* Verify by calling verify */ + secp256k1_ecdsa_signature_save(&sig, &r_s, &s_s); + memcpy(&nonconst_ge, &group[sk_s], sizeof(nonconst_ge)); + secp256k1_pubkey_save(&pk, &nonconst_ge); + secp256k1_scalar_get_b32(msg32, &msg_s); + CHECK(should_verify == + secp256k1_ecdsa_verify(ctx, &sig, msg32, &pk)); + } + } + } + } +} + +void test_exhaustive_sign(const secp256k1_context *ctx, const secp256k1_ge *group, int order) { + int i, j, k; + + /* Loop */ + for (i = 1; i < order; i++) { /* message */ + for (j = 1; j < order; j++) { /* key */ + for (k = 1; k < order; k++) { /* nonce */ + const int starting_k = k; + secp256k1_ecdsa_signature sig; + secp256k1_scalar sk, msg, r, s, expected_r; + unsigned char sk32[32], msg32[32]; + secp256k1_scalar_set_int(&msg, i); + secp256k1_scalar_set_int(&sk, j); + secp256k1_scalar_get_b32(sk32, &sk); + secp256k1_scalar_get_b32(msg32, &msg); + + secp256k1_ecdsa_sign(ctx, &sig, msg32, sk32, secp256k1_nonce_function_smallint, &k); + + secp256k1_ecdsa_signature_load(ctx, &r, &s, &sig); + /* Note that we compute expected_r *after* signing -- this is important + * because our nonce-computing function function might change k during + * signing. */ + r_from_k(&expected_r, group, k); + CHECK(r == expected_r); + CHECK((k * s) % order == (i + r * j) % order || + (k * (EXHAUSTIVE_TEST_ORDER - s)) % order == (i + r * j) % order); + + /* Overflow means we've tried every possible nonce */ + if (k < starting_k) { + break; + } + } + } + } + + /* We would like to verify zero-knowledge here by counting how often every + * possible (s, r) tuple appears, but because the group order is larger + * than the field order, when coercing the x-values to scalar values, some + * appear more often than others, so we are actually not zero-knowledge. + * (This effect also appears in the real code, but the difference is on the + * order of 1/2^128th the field order, so the deviation is not useful to a + * computationally bounded attacker.) + */ +} + +#ifdef ENABLE_MODULE_RECOVERY +void test_exhaustive_recovery_sign(const secp256k1_context *ctx, const secp256k1_ge *group, int order) { + int i, j, k; + + /* Loop */ + for (i = 1; i < order; i++) { /* message */ + for (j = 1; j < order; j++) { /* key */ + for (k = 1; k < order; k++) { /* nonce */ + const int starting_k = k; + secp256k1_fe r_dot_y_normalized; + secp256k1_ecdsa_recoverable_signature rsig; + secp256k1_ecdsa_signature sig; + secp256k1_scalar sk, msg, r, s, expected_r; + unsigned char sk32[32], msg32[32]; + int expected_recid; + int recid; + secp256k1_scalar_set_int(&msg, i); + secp256k1_scalar_set_int(&sk, j); + secp256k1_scalar_get_b32(sk32, &sk); + secp256k1_scalar_get_b32(msg32, &msg); + + secp256k1_ecdsa_sign_recoverable(ctx, &rsig, msg32, sk32, secp256k1_nonce_function_smallint, &k); + + /* Check directly */ + secp256k1_ecdsa_recoverable_signature_load(ctx, &r, &s, &recid, &rsig); + r_from_k(&expected_r, group, k); + CHECK(r == expected_r); + CHECK((k * s) % order == (i + r * j) % order || + (k * (EXHAUSTIVE_TEST_ORDER - s)) % order == (i + r * j) % order); + /* In computing the recid, there is an overflow condition that is disabled in + * scalar_low_impl.h `secp256k1_scalar_set_b32` because almost every r.y value + * will exceed the group order, and our signing code always holds out for r + * values that don't overflow, so with a proper overflow check the tests would + * loop indefinitely. */ + r_dot_y_normalized = group[k].y; + secp256k1_fe_normalize(&r_dot_y_normalized); + /* Also the recovery id is flipped depending if we hit the low-s branch */ + if ((k * s) % order == (i + r * j) % order) { + expected_recid = secp256k1_fe_is_odd(&r_dot_y_normalized) ? 1 : 0; + } else { + expected_recid = secp256k1_fe_is_odd(&r_dot_y_normalized) ? 0 : 1; + } + CHECK(recid == expected_recid); + + /* Convert to a standard sig then check */ + secp256k1_ecdsa_recoverable_signature_convert(ctx, &sig, &rsig); + secp256k1_ecdsa_signature_load(ctx, &r, &s, &sig); + /* Note that we compute expected_r *after* signing -- this is important + * because our nonce-computing function function might change k during + * signing. */ + r_from_k(&expected_r, group, k); + CHECK(r == expected_r); + CHECK((k * s) % order == (i + r * j) % order || + (k * (EXHAUSTIVE_TEST_ORDER - s)) % order == (i + r * j) % order); + + /* Overflow means we've tried every possible nonce */ + if (k < starting_k) { + break; + } + } + } + } +} + +void test_exhaustive_recovery_verify(const secp256k1_context *ctx, const secp256k1_ge *group, int order) { + /* This is essentially a copy of test_exhaustive_verify, with recovery added */ + int s, r, msg, key; + for (s = 1; s < order; s++) { + for (r = 1; r < order; r++) { + for (msg = 1; msg < order; msg++) { + for (key = 1; key < order; key++) { + secp256k1_ge nonconst_ge; + secp256k1_ecdsa_recoverable_signature rsig; + secp256k1_ecdsa_signature sig; + secp256k1_pubkey pk; + secp256k1_scalar sk_s, msg_s, r_s, s_s; + secp256k1_scalar s_times_k_s, msg_plus_r_times_sk_s; + int recid = 0; + int k, should_verify; + unsigned char msg32[32]; + + secp256k1_scalar_set_int(&s_s, s); + secp256k1_scalar_set_int(&r_s, r); + secp256k1_scalar_set_int(&msg_s, msg); + secp256k1_scalar_set_int(&sk_s, key); + secp256k1_scalar_get_b32(msg32, &msg_s); + + /* Verify by hand */ + /* Run through every k value that gives us this r and check that *one* works. + * Note there could be none, there could be multiple, ECDSA is weird. */ + should_verify = 0; + for (k = 0; k < order; k++) { + secp256k1_scalar check_x_s; + r_from_k(&check_x_s, group, k); + if (r_s == check_x_s) { + secp256k1_scalar_set_int(&s_times_k_s, k); + secp256k1_scalar_mul(&s_times_k_s, &s_times_k_s, &s_s); + secp256k1_scalar_mul(&msg_plus_r_times_sk_s, &r_s, &sk_s); + secp256k1_scalar_add(&msg_plus_r_times_sk_s, &msg_plus_r_times_sk_s, &msg_s); + should_verify |= secp256k1_scalar_eq(&s_times_k_s, &msg_plus_r_times_sk_s); + } + } + /* nb we have a "high s" rule */ + should_verify &= !secp256k1_scalar_is_high(&s_s); + + /* We would like to try recovering the pubkey and checking that it matches, + * but pubkey recovery is impossible in the exhaustive tests (the reason + * being that there are 12 nonzero r values, 12 nonzero points, and no + * overlap between the sets, so there are no valid signatures). */ + + /* Verify by converting to a standard signature and calling verify */ + secp256k1_ecdsa_recoverable_signature_save(&rsig, &r_s, &s_s, recid); + secp256k1_ecdsa_recoverable_signature_convert(ctx, &sig, &rsig); + memcpy(&nonconst_ge, &group[sk_s], sizeof(nonconst_ge)); + secp256k1_pubkey_save(&pk, &nonconst_ge); + CHECK(should_verify == + secp256k1_ecdsa_verify(ctx, &sig, msg32, &pk)); + } + } + } + } +} +#endif + +int main(void) { + int i; + secp256k1_gej groupj[EXHAUSTIVE_TEST_ORDER]; + secp256k1_ge group[EXHAUSTIVE_TEST_ORDER]; + + /* Build context */ + secp256k1_context *ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); + + /* TODO set z = 1, then do num_tests runs with random z values */ + + /* Generate the entire group */ + secp256k1_gej_set_infinity(&groupj[0]); + secp256k1_ge_set_gej(&group[0], &groupj[0]); + for (i = 1; i < EXHAUSTIVE_TEST_ORDER; i++) { + /* Set a different random z-value for each Jacobian point */ + secp256k1_fe z; + random_fe(&z); + + secp256k1_gej_add_ge(&groupj[i], &groupj[i - 1], &secp256k1_ge_const_g); + secp256k1_ge_set_gej(&group[i], &groupj[i]); + secp256k1_gej_rescale(&groupj[i], &z); + + /* Verify against ecmult_gen */ + { + secp256k1_scalar scalar_i; + secp256k1_gej generatedj; + secp256k1_ge generated; + + secp256k1_scalar_set_int(&scalar_i, i); + secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &generatedj, &scalar_i); + secp256k1_ge_set_gej(&generated, &generatedj); + + CHECK(group[i].infinity == 0); + CHECK(generated.infinity == 0); + CHECK(secp256k1_fe_equal_var(&generated.x, &group[i].x)); + CHECK(secp256k1_fe_equal_var(&generated.y, &group[i].y)); + } + } + + /* Run the tests */ +#ifdef USE_ENDOMORPHISM + test_exhaustive_endomorphism(group, EXHAUSTIVE_TEST_ORDER); +#endif + test_exhaustive_addition(group, groupj, EXHAUSTIVE_TEST_ORDER); + test_exhaustive_ecmult(ctx, group, groupj, EXHAUSTIVE_TEST_ORDER); + test_exhaustive_sign(ctx, group, EXHAUSTIVE_TEST_ORDER); + test_exhaustive_verify(ctx, group, EXHAUSTIVE_TEST_ORDER); + +#ifdef ENABLE_MODULE_RECOVERY + test_exhaustive_recovery_sign(ctx, group, EXHAUSTIVE_TEST_ORDER); + test_exhaustive_recovery_verify(ctx, group, EXHAUSTIVE_TEST_ORDER); +#endif + + secp256k1_context_destroy(ctx); + return 0; +} + diff --git a/src/share/qt/Info.plist b/src/share/qt/Info.plist index 0702915e..e71876fd 100644 --- a/src/share/qt/Info.plist +++ b/src/share/qt/Info.plist @@ -7,23 +7,23 @@ CFBundlePackageType APPL CFBundleGetInfoString - memetic-Qt + pepecoin-Qt CFBundleSignature ???? CFBundleExecutable - memetic-Qt + pepecoin-Qt CFBundleIdentifier - co.memetic.memetic-Qt + co.pepecoin.pepecoin-Qt CFBundleURLTypes CFBundleTypeRole Editor CFBundleURLName - co.memetic.MemeticPayment + co.pepecoin.PepeCoinPayment CFBundleURLSchemes - memetic + pepecoin diff --git a/src/share/setup.nsi b/src/share/setup.nsi index 34e3afac..805b6ed0 100644 --- a/src/share/setup.nsi +++ b/src/share/setup.nsi @@ -102,7 +102,7 @@ Section -post SEC0001 # WriteRegStr HKCR "bitcoin" "URL Protocol" "" # WriteRegStr HKCR "bitcoin" "" "URL:Bitcoin" # WriteRegStr HKCR "bitcoin\DefaultIcon" "" $INSTDIR\bitcoin-qt.exe - # WriteRegStr HKCR "bitcoin\memetic\open\command" "" '"$INSTDIR\bitcoin-qt.exe" "$$1"' + # WriteRegStr HKCR "bitcoin\pepecoin\open\command" "" '"$INSTDIR\bitcoin-qt.exe" "$$1"' SectionEnd # Macro for selecting uninstaller sections diff --git a/src/spork.cpp b/src/spork.cpp index 17d984c9..3198b969 100644 --- a/src/spork.cpp +++ b/src/spork.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2015 The MEME developers +// Copyright (c) 2015 The CRAVE developers // Copyright (c) 2009-2012 The Darkcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -22,10 +22,9 @@ using namespace boost; class CSporkMessage; class CSporkManager; -CSporkManager sporkManager; - std::map mapSporks; std::map mapSporksActive; +CSporkManager sporkManager; void ProcessSpork(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) { @@ -41,7 +40,7 @@ void ProcessSpork(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) if(pindexBest == NULL) return; uint256 hash = spork.GetHash(); - if(mapSporksActive.count(spork.nSporkID)) { + if(mapSporks.count(hash) && mapSporksActive.count(spork.nSporkID)) { if(mapSporksActive[spork.nSporkID].nTimeSigned >= spork.nTimeSigned){ if(fDebug) LogPrintf("spork - seen %s block %d \n", hash.ToString().c_str(), pindexBest->nHeight); return; @@ -80,53 +79,35 @@ void ProcessSpork(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) // grab the spork, otherwise say it's off bool IsSporkActive(int nSporkID) { - int64_t r = -1; + int64_t r = 0; if(mapSporksActive.count(nSporkID)){ r = mapSporksActive[nSporkID].nValue; } else { if(nSporkID == SPORK_1_MASTERNODE_PAYMENTS_ENFORCEMENT) r = SPORK_1_MASTERNODE_PAYMENTS_ENFORCEMENT_DEFAULT; - if(nSporkID == SPORK_2_INSTANTX) r = SPORK_2_INSTANTX_DEFAULT; - if(nSporkID == SPORK_3_INSTANTX_BLOCK_FILTERING) r = SPORK_3_INSTANTX_BLOCK_FILTERING_DEFAULT; - if(nSporkID == SPORK_5_MAX_VALUE) r = SPORK_5_MAX_VALUE_DEFAULT; - if(nSporkID == SPORK_6_REPLAY_BLOCKS) r = SPORK_6_REPLAY_BLOCKS_DEFAULT; - if(nSporkID == SPORK_7_MASTERNODE_SCANNING) r = SPORK_7_MASTERNODE_SCANNING; - if(nSporkID == SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT) r = SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT_DEFAULT; - if(nSporkID == SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT) r = SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT_DEFAULT; - if(nSporkID == SPORK_10_MASTERNODE_PAY_UPDATED_NODES) r = SPORK_10_MASTERNODE_PAY_UPDATED_NODES_DEFAULT; - if(nSporkID == SPORK_11_RESET_BUDGET) r = SPORK_11_RESET_BUDGET_DEFAULT; - if(nSporkID == SPORK_12_RECONSIDER_BLOCKS) r = SPORK_12_RECONSIDER_BLOCKS_DEFAULT; - if(nSporkID == SPORK_13_ENABLE_SUPERBLOCKS) r = SPORK_13_ENABLE_SUPERBLOCKS_DEFAULT; - - if(r == -1) LogPrintf("GetSpork::Unknown Spork %d\n", nSporkID); + if(nSporkID == SPORK_2_MAX_VALUE) r = SPORK_2_MAX_VALUE_DEFAULT; + if(nSporkID == SPORK_3_REPLAY_BLOCKS) r = SPORK_3_REPLAY_BLOCKS_DEFAULT; + + if(r == 0 && fDebug) LogPrintf("GetSpork::Unknown Spork %d\n", nSporkID); } - if(r == -1) r = 4070908800; //return 2099-1-1 by default + if(r == 0) r = 4070908800; //return 2099-1-1 by default return r < GetTime(); } // grab the value of the spork on the network, or the default -int64_t GetSporkValue(int nSporkID) +int GetSporkValue(int nSporkID) { - int64_t r = -1; + int r = 0; if(mapSporksActive.count(nSporkID)){ r = mapSporksActive[nSporkID].nValue; } else { if(nSporkID == SPORK_1_MASTERNODE_PAYMENTS_ENFORCEMENT) r = SPORK_1_MASTERNODE_PAYMENTS_ENFORCEMENT_DEFAULT; - if(nSporkID == SPORK_2_INSTANTX) r = SPORK_2_INSTANTX_DEFAULT; - if(nSporkID == SPORK_3_INSTANTX_BLOCK_FILTERING) r = SPORK_3_INSTANTX_BLOCK_FILTERING_DEFAULT; - if(nSporkID == SPORK_5_MAX_VALUE) r = SPORK_5_MAX_VALUE_DEFAULT; - if(nSporkID == SPORK_6_REPLAY_BLOCKS) r = SPORK_6_REPLAY_BLOCKS_DEFAULT; - if(nSporkID == SPORK_7_MASTERNODE_SCANNING) r = SPORK_7_MASTERNODE_SCANNING; - if(nSporkID == SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT) r = SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT_DEFAULT; - if(nSporkID == SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT) r = SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT_DEFAULT; - if(nSporkID == SPORK_10_MASTERNODE_PAY_UPDATED_NODES) r = SPORK_10_MASTERNODE_PAY_UPDATED_NODES_DEFAULT; - if(nSporkID == SPORK_11_RESET_BUDGET) r = SPORK_11_RESET_BUDGET_DEFAULT; - if(nSporkID == SPORK_12_RECONSIDER_BLOCKS) r = SPORK_12_RECONSIDER_BLOCKS_DEFAULT; - if(nSporkID == SPORK_13_ENABLE_SUPERBLOCKS) r = SPORK_13_ENABLE_SUPERBLOCKS_DEFAULT; - - if(r == -1) LogPrintf("GetSpork::Unknown Spork %d\n", nSporkID); + if(nSporkID == SPORK_2_MAX_VALUE) r = SPORK_2_MAX_VALUE_DEFAULT; + if(nSporkID == SPORK_3_REPLAY_BLOCKS) r = SPORK_3_REPLAY_BLOCKS_DEFAULT; + + if(r == 0 && fDebug) LogPrintf("GetSpork::Unknown Spork %d\n", nSporkID); } return r; @@ -134,38 +115,12 @@ int64_t GetSporkValue(int nSporkID) void ExecuteSpork(int nSporkID, int nValue) { + //replay and process blocks (to sync to the longest chain after disabling sporks) + //if(nSporkID == SPORK_3_REPLAY_BLOCKS){ + //DisconnectBlocksAndReprocess(nValue); + //} } -/*void ReprocessBlocks(int nBlocks) -{ - std::map::iterator it = mapRejectedBlocks.begin(); - while(it != mapRejectedBlocks.end()){ - //use a window twice as large as is usual for the nBlocks we want to reset - if((*it).second > GetTime() - (nBlocks*60*5)) { - BlockMap::iterator mi = mapBlockIndex.find((*it).first); - if (mi != mapBlockIndex.end() && (*mi).second) { - LOCK(cs_main); - - CBlockIndex* pindex = (*mi).second; - LogPrintf("ReprocessBlocks - %s\n", (*it).first.ToString()); - - CValidationState state; - ReconsiderBlock(state, pindex); - } - } - ++it; - } - - CValidationState state; - { - LOCK(cs_main); - DisconnectBlocksAndReprocess(nBlocks); - } - - if (state.IsValid()) { - ActivateBestChain(state); - } -}*/ bool CSporkManager::CheckSignature(CSporkMessage& spork) { @@ -231,7 +186,12 @@ void CSporkManager::Relay(CSporkMessage& msg) { CInv inv(MSG_SPORK, msg.GetHash()); - RelayInventory(inv); + vector vInv; + vInv.push_back(inv); + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes){ + pnode->PushMessage("inv", vInv); + } } bool CSporkManager::SetPrivKey(std::string strPrivKey) @@ -254,17 +214,8 @@ bool CSporkManager::SetPrivKey(std::string strPrivKey) int CSporkManager::GetSporkIDByName(std::string strName) { if(strName == "SPORK_1_MASTERNODE_PAYMENTS_ENFORCEMENT") return SPORK_1_MASTERNODE_PAYMENTS_ENFORCEMENT; - if(strName == "SPORK_2_INSTANTX") return SPORK_2_INSTANTX; - if(strName == "SPORK_3_INSTANTX_BLOCK_FILTERING") return SPORK_3_INSTANTX_BLOCK_FILTERING; - if(strName == "SPORK_5_MAX_VALUE") return SPORK_5_MAX_VALUE; - if(strName == "SPORK_6_REPLAY_BLOCKS") return SPORK_6_REPLAY_BLOCKS; - if(strName == "SPORK_7_MASTERNODE_SCANNING") return SPORK_7_MASTERNODE_SCANNING; - if(strName == "SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT") return SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT; - if(strName == "SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT") return SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT; - if(strName == "SPORK_10_MASTERNODE_PAY_UPDATED_NODES") return SPORK_10_MASTERNODE_PAY_UPDATED_NODES; - if(strName == "SPORK_11_RESET_BUDGET") return SPORK_11_RESET_BUDGET; - if(strName == "SPORK_12_RECONSIDER_BLOCKS") return SPORK_12_RECONSIDER_BLOCKS; - if(strName == "SPORK_13_ENABLE_SUPERBLOCKS") return SPORK_13_ENABLE_SUPERBLOCKS; + if(strName == "SPORK_2_MAX_VALUE") return SPORK_2_MAX_VALUE; + if(strName == "SPORK_3_REPLAY_BLOCKS") return SPORK_3_REPLAY_BLOCKS; return -1; } @@ -272,17 +223,8 @@ int CSporkManager::GetSporkIDByName(std::string strName) std::string CSporkManager::GetSporkNameByID(int id) { if(id == SPORK_1_MASTERNODE_PAYMENTS_ENFORCEMENT) return "SPORK_1_MASTERNODE_PAYMENTS_ENFORCEMENT"; - if(id == SPORK_2_INSTANTX) return "SPORK_2_INSTANTX"; - if(id == SPORK_3_INSTANTX_BLOCK_FILTERING) return "SPORK_3_INSTANTX_BLOCK_FILTERING"; - if(id == SPORK_5_MAX_VALUE) return "SPORK_5_MAX_VALUE"; - if(id == SPORK_6_REPLAY_BLOCKS) return "SPORK_6_REPLAY_BLOCKS"; - if(id == SPORK_7_MASTERNODE_SCANNING) return "SPORK_7_MASTERNODE_SCANNING"; - if(id == SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT) return "SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT"; - if(id == SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT) return "SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT"; - if(id == SPORK_10_MASTERNODE_PAY_UPDATED_NODES) return "SPORK_10_MASTERNODE_PAY_UPDATED_NODES"; - if(id == SPORK_11_RESET_BUDGET) return "SPORK_11_RESET_BUDGET"; - if(id == SPORK_12_RECONSIDER_BLOCKS) return "SPORK_12_RECONSIDER_BLOCKS"; - if(id == SPORK_13_ENABLE_SUPERBLOCKS) return "SPORK_13_ENABLE_SUPERBLOCKS"; + if(id == SPORK_2_MAX_VALUE) return "SPORK_2_MAX_VALUE"; + if(id == SPORK_3_REPLAY_BLOCKS) return "SPORK_3_REPLAY_BLOCKS"; return "Unknown"; -} \ No newline at end of file +} diff --git a/src/spork.h b/src/spork.h index 9619689a..a90ddaa1 100644 --- a/src/spork.h +++ b/src/spork.h @@ -1,4 +1,4 @@ -// Copyright (c) 2015 The MEME developers +// Copyright (c) 2015 The CRAVE developers // Copyright (c) 2009-2012 The Darkcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -20,31 +20,15 @@ using namespace boost; // Don't ever reuse these IDs for other sporks #define SPORK_1_MASTERNODE_PAYMENTS_ENFORCEMENT 10000 -#define SPORK_2_INSTANTX 10001 -#define SPORK_3_INSTANTX_BLOCK_FILTERING 10002 -#define SPORK_4_NOTUSED 10003 -#define SPORK_5_MAX_VALUE 10004 -#define SPORK_6_REPLAY_BLOCKS 10005 -#define SPORK_7_MASTERNODE_SCANNING 10006 -#define SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT 10007 -#define SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT 10008 -#define SPORK_10_MASTERNODE_PAY_UPDATED_NODES 10009 -#define SPORK_11_RESET_BUDGET 10010 -#define SPORK_12_RECONSIDER_BLOCKS 10011 -#define SPORK_13_ENABLE_SUPERBLOCKS 10012 - -#define SPORK_1_MASTERNODE_PAYMENTS_ENFORCEMENT_DEFAULT 2428537599 //2015-4-8 23:59:59 GMT // NOT USED -#define SPORK_2_INSTANTX_DEFAULT 978307200 //2001-1-1 23:59:59 GMT -#define SPORK_3_INSTANTX_BLOCK_FILTERING_DEFAULT 978307200 //2001-1-1 23:59:59 GMT -#define SPORK_4_RECONVERGE_DEFAULT 1451606400 //2016-01-01 // NOT USED -#define SPORK_5_MAX_VALUE_DEFAULT 500 //500 MEME -#define SPORK_6_REPLAY_BLOCKS_DEFAULT 0 // NOT USED -#define SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT_DEFAULT 4070908800 //OFF -#define SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT_DEFAULT 4070908800 //OFF -#define SPORK_10_MASTERNODE_PAY_UPDATED_NODES_DEFAULT 4070908800 //OFF -#define SPORK_11_RESET_BUDGET_DEFAULT 0 -#define SPORK_12_RECONSIDER_BLOCKS_DEFAULT 0 -#define SPORK_13_ENABLE_SUPERBLOCKS_DEFAULT 4070908800 //OFF +#define SPORK_2_MAX_VALUE 10002 +#define SPORK_3_REPLAY_BLOCKS 10003 +#define SPORK_4_NOTUSED 10004 + + +#define SPORK_1_MASTERNODE_PAYMENTS_ENFORCEMENT_DEFAULT 2428537599 //2015-4-8 23:59:59 GMT +#define SPORK_2_MAX_VALUE_DEFAULT 500 //500 PEPE +#define SPORK_3_REPLAY_BLOCKS_DEFAULT 0 +#define SPORK_4_RECONVERGE_DEFAULT 1420070400 //2047-1-1 class CSporkMessage; class CSporkManager; @@ -65,10 +49,9 @@ extern std::map mapSporksActive; extern CSporkManager sporkManager; void ProcessSpork(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); -int64_t GetSporkValue(int nSporkID); +int GetSporkValue(int nSporkID); bool IsSporkActive(int nSporkID); void ExecuteSpork(int nSporkID, int nValue); -//void ReprocessBlocks(int nBlocks); // // Spork Class @@ -113,8 +96,8 @@ class CSporkManager public: CSporkManager() { - strMainPubKey = "02626bfeb86bc74a803055081e494e450b41d7555ad44cf448b5f9dd66e1c3e5d9"; - strTestPubKey = "02626bfeb86bc74a803055081e494e450b41d7555ad44cf448b5f9dd66e1c3e5d9"; + strMainPubKey = "04a983220ea7a38a7106385003fef77896538a382a0dcc389cc45f3c98751d9af423a097789757556259351198a8aaa628a1fd644c3232678c5845384c744ff8d7"; + strTestPubKey = "04a983220ea7a38a7106385003fef77896538a382a0dcc389cc45f3c98751d9af423a097789757556259351198a8aaa628a1fd644c3232678c5845384c744ff8d7"; } std::string GetSporkNameByID(int id); diff --git a/src/sync.cpp b/src/sync.cpp index e624a9ee..9f41cfbc 100644 --- a/src/sync.cpp +++ b/src/sync.cpp @@ -140,6 +140,9 @@ void AssertLockHeldInternal(const char *pszName, const char* pszFile, int nLine, { BOOST_FOREACH(const PAIRTYPE(void*, CLockLocation)&i, *lockstack) if (i.first == cs) return; + + LogPrintf("Assertion failed: lock %s not held in %s:%i; locks held:\n%s\n", + pszName, pszFile, nLine, LocksHeld().c_str()); fprintf(stderr, "Assertion failed: lock %s not held in %s:%i; locks held:\n%s", pszName, pszFile, nLine, LocksHeld().c_str()); abort(); diff --git a/src/timedata.cpp b/src/timedata.cpp index 08723fcd..5d80c230 100644 --- a/src/timedata.cpp +++ b/src/timedata.cpp @@ -16,6 +16,9 @@ using namespace std; static CCriticalSection cs_nTimeOffset; static int64_t nTimeOffset = 0; +bool fTimeOffsetUpdated = false; +int64_t nCachedTimeOffset = 0; + // // "Never go to sea with two chronometers; take one or three." // Our three time sources are: @@ -26,8 +29,17 @@ static int64_t nTimeOffset = 0; // int64_t GetTimeOffset() { - LOCK(cs_nTimeOffset); - return nTimeOffset; + if(!fTimeOffsetUpdated) + { + return nCachedTimeOffset; + } + else + { + LOCK(cs_nTimeOffset); + nCachedTimeOffset = nTimeOffset; + fTimeOffsetUpdated = false; + return nTimeOffset; + } } int64_t GetAdjustedTime() @@ -75,10 +87,12 @@ void AddTimeData(const CNetAddr& ip, int64_t nTime) if (abs64(nMedian) < 70 * 60) { nTimeOffset = nMedian; + fTimeOffsetUpdated = true; } else { nTimeOffset = 0; + fTimeOffsetUpdated = true; static bool fDone; if (!fDone) @@ -92,7 +106,7 @@ void AddTimeData(const CNetAddr& ip, int64_t nTime) if (!fMatch) { fDone = true; - string strMessage = _("Warning: Please check that your computer's date and time are correct! If your clock is wrong Memetic will not work properly."); + string strMessage = _("Warning: Please check that your computer's date and time are correct! If your clock is wrong PepeCoin will not work properly."); strMiscWarning = strMessage; LogPrintf("*** %s\n", strMessage); uiInterface.ThreadSafeMessageBox(strMessage, "", CClientUIInterface::MSG_WARNING); diff --git a/src/timedata.h b/src/timedata.h index 0e7bdc2c..5847b425 100644 --- a/src/timedata.h +++ b/src/timedata.h @@ -14,4 +14,7 @@ int64_t GetTimeOffset(); int64_t GetAdjustedTime(); void AddTimeData(const CNetAddr& ip, int64_t nTime); +extern bool fTimeOffsetUpdated; +extern int64_t nCachedTimeOffset; + #endif diff --git a/src/txdb-leveldb.cpp b/src/txdb-leveldb.cpp index b6091eab..63153790 100644 --- a/src/txdb-leveldb.cpp +++ b/src/txdb-leveldb.cpp @@ -28,9 +28,14 @@ leveldb::DB *txdb; // global pointer for LevelDB object instance static leveldb::Options GetOptions() { leveldb::Options options; - int nCacheSizeMB = GetArg("-dbcache", 25); + int nCacheSizeMB = GetArg("-leveldbcache", 100); options.block_cache = leveldb::NewLRUCache(nCacheSizeMB * 1048576); - options.filter_policy = leveldb::NewBloomFilterPolicy(10); + int nBloomFilterSize = GetArg("-leveldbbloomfilter", 32); + options.filter_policy = leveldb::NewBloomFilterPolicy(nBloomFilterSize); + int nWriteBufferSizeMB = GetArg("-writecache", 16); + options.write_buffer_size = nWriteBufferSizeMB * 1024 * 1024; + int nMaxOpenFiles = GetArg("-leveldbmaxopenfiles", 1000); + options.max_open_files = nMaxOpenFiles; return options; } @@ -81,8 +86,7 @@ CTxDB::CTxDB(const char* pszMode) options = GetOptions(); options.create_if_missing = fCreate; - options.filter_policy = leveldb::NewBloomFilterPolicy(10); - + init_blockindex(options); // Init directory pdb = txdb; @@ -118,6 +122,11 @@ CTxDB::CTxDB(const char* pszMode) fReadOnly = fTmp; } + if (!Read('S', salt)) { + salt = GetRandHash(); + Write('S', salt); + } + LogPrintf("Opened LevelDB successfully\n"); } @@ -198,30 +207,43 @@ bool CTxDB::ScanBatch(const CDataStream &key, string *value, bool *deleted) cons } bool CTxDB::WriteAddrIndex(uint160 addrHash, uint256 txHash) +{ + unsigned char foo[0]; + CHashWriter ss(SER_GETHASH, 0); + ss << salt; + ss << addrHash; + return Write(make_pair(make_pair('a', ss.GetHash().GetLow64()), txHash), FLATDATA(foo)); +} + +bool CTxDB::ReadAddrIndex(uint160 addrHash, std::vector& txHashes) { - std::vector txHashes; - if(!ReadAddrIndex(addrHash, txHashes)) + leveldb::Iterator *iterator = pdb->NewIterator(leveldb::ReadOptions()); + uint64_t lookupid; { - txHashes.push_back(txHash); - return Write(make_pair(string("adr"), addrHash), txHashes); + CHashWriter ss(SER_GETHASH, 0); + ss << salt; + ss << addrHash; + lookupid = ss.GetHash().GetLow64(); } - else - { - if(std::find(txHashes.begin(), txHashes.end(), txHash) == txHashes.end()) - { - txHashes.push_back(txHash); - return Write(make_pair(string("adr"), addrHash), txHashes); - } - else - { - return true; // already have this tx hash - } + + CDataStream ssStartKey(SER_DISK, CLIENT_VERSION); + ssStartKey << make_pair(string("a"), lookupid); + iterator->Seek(ssStartKey.str()); + + while (iterator->Valid()) { + std::pair, uint256> key; + CDataStream ssKey(SER_DISK, CLIENT_VERSION); + ssKey.write(iterator->key().data(), iterator->key().size()); + ssKey >> key; + if (key.first.first == 'a' && key.first.second == lookupid) { + txHashes.push_back(key.second); + } else { + break; + } + iterator->Next(); } -} -bool CTxDB::ReadAddrIndex(uint160 addrHash, std::vector& txHashes) -{ - return Read(make_pair(string("adr"), addrHash), txHashes); + return true; } bool CTxDB::WritePepeMessage(uint256 hash, const CPepeMessage& pmsg) @@ -337,6 +359,7 @@ static CBlockIndex *InsertBlockIndex(uint256 hash) bool CTxDB::LoadPepeMessages() { + // Lighten log writing LogPrintf("Txdb LoadPepeMessages\n"); if(mapPepeMessages.size() > 0) { // Already loaded once in this session. @@ -346,35 +369,35 @@ bool CTxDB::LoadPepeMessages() leveldb::Iterator *iterator = pdb->NewIterator(leveldb::ReadOptions()); CDataStream ssStartKey(SER_DISK, CLIENT_VERSION); ssStartKey << make_pair(string("pepe"), uint256(0)); - LogPrintf("CTxDB::LoadPepeMessages created iterator and ssStartKey\n"); + // LogPrintf("CTxDB::LoadPepeMessages created iterator and ssStartKey\n"); iterator->Seek(ssStartKey.str()); - LogPrintf("CTxDB::LoadPepeMessages iterator->Seek\n"); + // LogPrintf("CTxDB::LoadPepeMessages iterator->Seek\n"); while(iterator->Valid()) { boost::this_thread::interruption_point(); // Unpack keys and values. CDataStream ssKey(SER_DISK, CLIENT_VERSION); - LogPrintf("CTxDB::LoadPepeMessages: ssKey.write\n"); + // LogPrintf("CTxDB::LoadPepeMessages: ssKey.write\n"); ssKey.write(iterator->key().data(), iterator->key().size()); CDataStream ssValue(SER_DISK, CLIENT_VERSION); - LogPrintf("CTxDB::LoadPepeMessages: ssValue.write\n"); + // LogPrintf("CTxDB::LoadPepeMessages: ssValue.write\n"); ssValue.write(iterator->value().data(), iterator->value().size()); string strType; - LogPrintf("CTxDB::LoadPepeMessages: strType\n"); + // LogPrintf("CTxDB::LoadPepeMessages: strType\n"); ssKey >> strType; // Did we reach the end of the data to read? if (strType != "pepe") break; CPepeMessage pepemessage; - LogPrintf("CTxDB::LoadPepeMessages: ssValue to pepemessage\n"); + // LogPrintf("CTxDB::LoadPepeMessages: ssValue to pepemessage\n"); ssValue >> pepemessage; uint256 pepeHash = pepemessage.GetHash(); - LogPrintf("CTxDB::LoadPepeMessages: mapPepeMessages insert %s\n", pepeHash.ToString()); + // LogPrintf("CTxDB::LoadPepeMessages: mapPepeMessages insert %s\n", pepeHash.ToString()); if(mapPepeMessages.count(pepeHash) == 0) mapPepeMessages.insert(make_pair(pepeHash, pepemessage)); - LogPrintf("CTxDB::LoadPepeMessages: Iterator next\n"); + //LogPrintf("CTxDB::LoadPepeMessages: Iterator next\n"); iterator->Next(); } @@ -405,56 +428,63 @@ bool CTxDB::LoadBlockIndex() while (iterator->Valid()) { boost::this_thread::interruption_point(); - // Unpack keys and values. - CDataStream ssKey(SER_DISK, CLIENT_VERSION); - ssKey.write(iterator->key().data(), iterator->key().size()); - CDataStream ssValue(SER_DISK, CLIENT_VERSION); - ssValue.write(iterator->value().data(), iterator->value().size()); - string strType; - ssKey >> strType; - // Did we reach the end of the data to read? - if (strType != "blockindex") - break; - CDiskBlockIndex diskindex; - ssValue >> diskindex; - - uint256 blockHash = diskindex.GetBlockHash(); - - // Construct block index object - CBlockIndex* pindexNew = InsertBlockIndex(blockHash); - pindexNew->pprev = InsertBlockIndex(diskindex.hashPrev); - pindexNew->pnext = InsertBlockIndex(diskindex.hashNext); - pindexNew->nFile = diskindex.nFile; - pindexNew->nBlockPos = diskindex.nBlockPos; - pindexNew->nHeight = diskindex.nHeight; - pindexNew->nMint = diskindex.nMint; - pindexNew->nMoneySupply = diskindex.nMoneySupply; - pindexNew->nFlags = diskindex.nFlags; - pindexNew->nStakeModifier = diskindex.nStakeModifier; - pindexNew->bnStakeModifierV2 = diskindex.bnStakeModifierV2; - pindexNew->prevoutStake = diskindex.prevoutStake; - pindexNew->nStakeTime = diskindex.nStakeTime; - pindexNew->hashProof = diskindex.hashProof; - pindexNew->nVersion = diskindex.nVersion; - pindexNew->hashMerkleRoot = diskindex.hashMerkleRoot; - pindexNew->nTime = diskindex.nTime; - pindexNew->nBits = diskindex.nBits; - pindexNew->nNonce = diskindex.nNonce; - - // Watch for genesis block - if (pindexGenesisBlock == NULL && blockHash == Params().HashGenesisBlock()) - pindexGenesisBlock = pindexNew; - - if (!pindexNew->CheckIndex()) { - delete iterator; - return error("LoadBlockIndex() : CheckIndex failed at %d", pindexNew->nHeight); - } - // NovaCoin: build setStakeSeen - if (pindexNew->IsProofOfStake()) - setStakeSeen.insert(make_pair(pindexNew->prevoutStake, pindexNew->nStakeTime)); + try + { + // Unpack keys and values. + CDataStream ssKey(SER_DISK, CLIENT_VERSION); + ssKey.write(iterator->key().data(), iterator->key().size()); + CDataStream ssValue(SER_DISK, CLIENT_VERSION); + ssValue.write(iterator->value().data(), iterator->value().size()); + string strType; + ssKey >> strType; + // Did we reach the end of the data to read? + if (strType != "blockindex") + break; + CDiskBlockIndex diskindex; + ssValue >> diskindex; + + uint256 blockHash = diskindex.GetBlockHash(); + + // Construct block index object + CBlockIndex* pindexNew = InsertBlockIndex(blockHash); + pindexNew->pprev = InsertBlockIndex(diskindex.hashPrev); + pindexNew->pnext = InsertBlockIndex(diskindex.hashNext); + pindexNew->nFile = diskindex.nFile; + pindexNew->nBlockPos = diskindex.nBlockPos; + pindexNew->nHeight = diskindex.nHeight; + pindexNew->nMint = diskindex.nMint; + pindexNew->nMoneySupply = diskindex.nMoneySupply; + pindexNew->nFlags = diskindex.nFlags; + pindexNew->nStakeModifier = diskindex.nStakeModifier; + pindexNew->bnStakeModifierV2 = diskindex.bnStakeModifierV2; + pindexNew->prevoutStake = diskindex.prevoutStake; + pindexNew->nStakeTime = diskindex.nStakeTime; + pindexNew->hashProof = diskindex.hashProof; + pindexNew->nVersion = diskindex.nVersion; + pindexNew->hashMerkleRoot = diskindex.hashMerkleRoot; + pindexNew->nTime = diskindex.nTime; + pindexNew->nBits = diskindex.nBits; + pindexNew->nNonce = diskindex.nNonce; + + // Watch for genesis block + if (pindexGenesisBlock == NULL && blockHash == Params().HashGenesisBlock()) + pindexGenesisBlock = pindexNew; + + if (!pindexNew->CheckIndex()) { + delete iterator; + return error("LoadBlockIndex() : CheckIndex failed at %d", pindexNew->nHeight); + } - iterator->Next(); + // NovaCoin: build setStakeSeen + if (pindexNew->IsProofOfStake()) + setStakeSeen.insert(make_pair(pindexNew->prevoutStake, pindexNew->nStakeTime)); + + iterator->Next(); + } catch (std::exception& e) { + LogPrintf("%s : Deserialize or I/O error - %s\n", __func__, e.what()); + break; + } } delete iterator; diff --git a/src/txdb-leveldb.h b/src/txdb-leveldb.h index d99f6376..8da99999 100644 --- a/src/txdb-leveldb.h +++ b/src/txdb-leveldb.h @@ -49,6 +49,7 @@ class CTxDB leveldb::Options options; bool fReadOnly; int nVersion; + uint256 salt; protected: // Returns true and sets (value,false) if activeBatch contains the given key diff --git a/src/ui_interface.h b/src/ui_interface.h index 335e290d..08b75ff8 100644 --- a/src/ui_interface.h +++ b/src/ui_interface.h @@ -16,6 +16,7 @@ class CBasicKeyStore; class CWallet; class uint256; +class CmastertoadConfig; /** General change type (added, updated, removed). */ enum ChangeType @@ -96,6 +97,8 @@ class CClientUIInterface /** Show progress e.g. for verifychain */ boost::signals2::signal ShowProgress; + + boost::signals2::signal NotifymastertoadChanged; }; extern CClientUIInterface uiInterface; diff --git a/src/uint256.h b/src/uint256.h index 19318680..d94d8a17 100644 --- a/src/uint256.h +++ b/src/uint256.h @@ -374,6 +374,12 @@ class base_uint return pn[2*n] | (uint64_t)pn[2*n+1] << 32; } + uint64_t GetLow64() const + { + assert(WIDTH >= 2); + return pn[0] | (uint64_t)pn[1] << 32; + } + unsigned int GetSerializeSize(int nType, int nVersion) const { return sizeof(pn); diff --git a/src/util.cpp b/src/util.cpp index 83d11272..b1b8e8dc 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -77,7 +77,7 @@ bool fLiteMode = false; bool fEnableInstantX = true; int nInstantXDepth = 10; int nDarksendRounds = 2; -int nAnonymizeTransferAmount = 1000; +int nAnonymizePepeCoinAmount = 2; int nLiquidityProvider = 0; /** Spork enforcement enabled time */ int64_t enforceMasternodePaymentsTime = 4085657524; @@ -1044,7 +1044,7 @@ static std::string FormatException(std::exception* pex, const char* pszThread) char pszModule[MAX_PATH] = ""; GetModuleFileNameA(NULL, pszModule, sizeof(pszModule)); #else - const char* pszModule = "memetic"; + const char* pszModule = "pepecoin"; #endif if (pex) return strprintf( @@ -1074,13 +1074,13 @@ void PrintExceptionContinue(std::exception* pex, const char* pszThread) boost::filesystem::path GetDefaultDataDir() { namespace fs = boost::filesystem; - // Windows < Vista: C:\Documents and Settings\Username\Application Data\Memetic - // Windows >= Vista: C:\Users\Username\AppData\Roaming\Memetic - // Mac: ~/Library/Application Support/Memetic - // Unix: ~/.memetic + // Windows < Vista: C:\Documents and Settings\Username\Application Data\PepeCoin + // Windows >= Vista: C:\Users\Username\AppData\Roaming\PepeCoin + // Mac: ~/Library/Application Support/PepeCoin + // Unix: ~/.pepecoin #ifdef WIN32 // Windows - return GetSpecialFolderPath(CSIDL_APPDATA) / "Memetic"; + return GetSpecialFolderPath(CSIDL_APPDATA) / "PepeCoin"; #else fs::path pathRet; char* pszHome = getenv("HOME"); @@ -1092,10 +1092,10 @@ boost::filesystem::path GetDefaultDataDir() // Mac pathRet /= "Library/Application Support"; fs::create_directory(pathRet); - return pathRet / "Memetic"; + return pathRet / "PepeCoin"; #else // Unix - return pathRet / ".memetic"; + return pathRet / ".pepecoin"; #endif #endif } @@ -1144,7 +1144,7 @@ void ClearDatadirCache() boost::filesystem::path GetConfigFile() { - boost::filesystem::path pathConfigFile(GetArg("-conf", "memetic.conf")); + boost::filesystem::path pathConfigFile(GetArg("-conf", "pepecoin.conf")); if (!pathConfigFile.is_complete()) pathConfigFile = GetDataDir(false) / pathConfigFile; return pathConfigFile; } @@ -1189,7 +1189,7 @@ void ReadConfigFile(map& mapSettingsRet, boost::filesystem::path GetPidFile() { - boost::filesystem::path pathPidFile(GetArg("-pid", "memeticd.pid")); + boost::filesystem::path pathPidFile(GetArg("-pid", "pepecoind.pid")); if (!pathPidFile.is_complete()) pathPidFile = GetDataDir() / pathPidFile; return pathPidFile; } diff --git a/src/util.h b/src/util.h index 9fe68f58..31ce07c6 100644 --- a/src/util.h +++ b/src/util.h @@ -119,7 +119,7 @@ extern bool fLiteMode; extern bool fEnableInstantX; extern int nInstantXDepth; extern int nDarksendRounds; -extern int nAnonymizeTransferAmount; +extern int nAnonymizePepeCoinAmount; extern int nLiquidityProvider; extern bool fEnableDarksend; extern int64_t enforceMasternodePaymentsTime; @@ -592,7 +592,7 @@ inline uint32_t ByteReverse(uint32_t value) // threadGroup.create_thread(boost::bind(&LoopForever >, "nothing", f, milliseconds)); template void LoopForever(const char* name, Callable func, int64_t msecs) { - std::string s = strprintf("memetic-%s", name); + std::string s = strprintf("pepecoin-%s", name); RenameThread(s.c_str()); LogPrintf("%s thread start\n", name); try @@ -618,7 +618,7 @@ template void LoopForever(const char* name, Callable func, // .. and a wrapper that just calls func once template void TraceThread(const char* name, Callable func) { - std::string s = strprintf("memetic-%s", name); + std::string s = strprintf("pepecoin-%s", name); RenameThread(s.c_str()); try { diff --git a/src/version.cpp b/src/version.cpp index d3146e8c..29e1aff4 100644 --- a/src/version.cpp +++ b/src/version.cpp @@ -8,10 +8,10 @@ // Name of client reported in the 'version' message. Report the same name // for both bitcoind and bitcoin-qt, to make it harder for attackers to // target servers or GUI users specifically. -const std::string CLIENT_NAME("Memetic-Core-1.8.8-61407"); +const std::string CLIENT_NAME("Memetic-PepeCoin-3.1.1.0"); // Client version number -#define CLIENT_VERSION_SUFFIX "-Shadilay" +#define CLIENT_VERSION_SUFFIX "-Multithread" // The following part of the code determines the CLIENT_BUILD variable. @@ -28,6 +28,7 @@ const std::string CLIENT_NAME("Memetic-Core-1.8.8-61407"); // * otherwise, use v[maj].[min].[rev].[build]-unk // finally CLIENT_VERSION_SUFFIX is added + // First, include build.h if requested #ifdef HAVE_BUILD_INFO # include "build.h" @@ -36,7 +37,7 @@ const std::string CLIENT_NAME("Memetic-Core-1.8.8-61407"); // git will put "#define GIT_ARCHIVE 1" on the next line inside archives. #define GIT_ARCHIVE 1 #ifdef GIT_ARCHIVE -# define GIT_COMMIT_ID "61407" +# define GIT_COMMIT_ID "61416" #endif #define BUILD_DESC_FROM_COMMIT(maj,min,rev,build,commit) \ diff --git a/src/version.h b/src/version.h index 9ae16dff..9f9ccb99 100644 --- a/src/version.h +++ b/src/version.h @@ -30,32 +30,33 @@ static const int DATABASE_VERSION = 70509; // network protocol versioning // -static const int PROTOCOL_VERSION = 61407; +static const int PROTOCOL_VERSION = 61416; // intial proto version, to be increased after version/verack negotiation static const int INIT_PROTO_VERSION = 209; // disconnect from peers older than this proto version -static const int MIN_PEER_PROTO_VERSION = 61407; +static const int MIN_PEER_PROTO_VERSION = 61416; // minimum peer version accepted by DarkSendPool -static const int MIN_POOL_PEER_PROTO_VERSION = 61402; +static const int MIN_POOL_PEER_PROTO_VERSION = 61416; -static const int MIN_INSTANTX_PROTO_VERSION = 61402; +static const int MIN_INSTANTX_PROTO_VERSION = 61416; +static const int MIN_MN_PROTO_VERSION = 61416; //! minimum peer version that can receive masternode payments // V1 - Last protocol version before update // V2 - Newest protocol version -static const int MIN_MASTERNODE_PAYMENT_PROTO_VERSION_1 = 61402; -static const int MIN_MASTERNODE_PAYMENT_PROTO_VERSION_2 = 61402; +static const int MIN_MASTERNODE_PAYMENT_PROTO_VERSION_1 = 61414; +static const int MIN_MASTERNODE_PAYMENT_PROTO_VERSION_2 = 61414; // nTime field added to CAddress, starting with this version; // if possible, avoid requesting addresses nodes older than this static const int CADDR_TIME_VERSION = 31402; // only request blocks from nodes outside this range of versions -static const int NOBLKS_VERSION_START = 60020; -static const int NOBLKS_VERSION_END = 61405; +static const int NOBLKS_VERSION_START = 0; +static const int NOBLKS_VERSION_END = 61415; // BIP 0031, pong message, is enabled for all versions AFTER this one static const int BIP0031_VERSION = 60000; diff --git a/src/wallet.cpp b/src/wallet.cpp index be1e2b33..da4b0db2 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -18,10 +18,11 @@ #include "spork.h" #include "darksend.h" #include "instantx.h" -#include "masternodeman.h" -#include "masternode-payments.h" +#include "masternode.h" #include "chainparams.h" #include "smessage.h" +#include "main.h" +#include "util.h" #include #include @@ -34,7 +35,7 @@ int64_t nTransactionFee = MIN_TX_FEE; int64_t nReserveBalance = 0; int64_t nMinimumInputValue = 0; -static int64_t GetStakeCombineThreshold() { return 100 * COIN; } +static int64_t GetStakeCombineThreshold() { return 1000 * COIN; } static int64_t GetStakeSplitThreshold() { return 1 * GetStakeCombineThreshold(); } int64_t gcd(int64_t n,int64_t m) { return m == 0 ? n : gcd(m, n % m); } @@ -592,30 +593,7 @@ int64_t CWallet::IncOrderPosNext(CWalletDB *pwalletdb) return nRet; } -CWallet::TxItems CWallet::OrderedTxItems(std::list& acentries, std::string strAccount) -{ - AssertLockHeld(cs_wallet); // mapWallet - CWalletDB walletdb(strWalletFile); - - // First: get all CWalletTx and CAccountingEntry into a sorted-by-order multimap. - TxItems txOrdered; - - // Note: maintaining indices in the database of (account,time) --> txid and (account, time) --> acentry - // would make this much faster for applications that do this a lot. - for (map::iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) - { - CWalletTx* wtx = &((*it).second); - txOrdered.insert(make_pair(wtx->nOrderPos, TxPair(wtx, (CAccountingEntry*)0))); - } - acentries.clear(); - walletdb.ListAccountCreditDebit(strAccount, acentries); - BOOST_FOREACH(CAccountingEntry& entry, acentries) - { - txOrdered.insert(make_pair(entry.nOrderPos, TxPair((CWalletTx*)0, &entry))); - } - return txOrdered; -} void CWallet::WalletUpdateSpent(const CTransaction &tx, bool fBlock) { @@ -677,7 +655,9 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn, bool fFromLoadWallet) if (fFromLoadWallet) { mapWallet[hash] = wtxIn; - mapWallet[hash].BindWallet(this); + CWalletTx& wtx = mapWallet[hash]; + wtx.BindWallet(this); + wtxOrdered.insert(make_pair(wtx.nOrderPos, TxPair(&wtx, (CAccountingEntry*)0))); AddToSpends(hash); } else @@ -692,6 +672,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn, bool fFromLoadWallet) { wtx.nTimeReceived = GetAdjustedTime(); wtx.nOrderPos = IncOrderPosNext(); + wtxOrdered.insert(make_pair(wtx.nOrderPos, TxPair(&wtx, (CAccountingEntry*)0))); wtx.nTimeSmart = wtx.nTimeReceived; if (wtxIn.hashBlock != 0) @@ -703,9 +684,9 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn, bool fFromLoadWallet) { // Tolerate times up to the last timestamp in the wallet not more than 5 minutes into the future int64_t latestTolerated = latestNow + 300; - std::list acentries; - TxItems txOrdered = OrderedTxItems(acentries); - for (TxItems::reverse_iterator it = txOrdered.rbegin(); it != txOrdered.rend(); ++it) + const TxItems & txOrdered = wtxOrdered; + + for (TxItems::const_reverse_iterator it = txOrdered.rbegin(); it != txOrdered.rend(); ++it) { CWalletTx *const pwtx = (*it).second.first; if (pwtx == &wtx) @@ -786,6 +767,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn, bool fFromLoadWallet) boost::thread t(runCommand, strCmd); // thread runs free } + fCachedBalanceNeedsUpdating = true; } return true; } @@ -817,8 +799,7 @@ bool CWallet::AddToWalletIfInvolvingMe(const CTransaction& tx, const CBlock* pbl return AddToWallet(wtx); } - else - WalletUpdateSpent(tx); + } return false; } @@ -1323,7 +1304,7 @@ void CWallet::ReacceptWalletTransactions() } if (fUpdated) { - LogPrintf("ReacceptWalletTransactions found spent coin %s MEME %s\n", FormatMoney(wtx.GetCredit(ISMINE_ALL)), wtx.GetHash().ToString()); + LogPrintf("ReacceptWalletTransactions found spent coin %s PEPE %s\n", FormatMoney(wtx.GetCredit(ISMINE_ALL)), wtx.GetHash().ToString()); wtx.MarkDirty(); wtx.WriteToDisk(); } @@ -1346,19 +1327,22 @@ void CWallet::ReacceptWalletTransactions() void CWalletTx::RelayWalletTransaction(CTxDB& txdb, std::string strCommand) { + /* BOOST_FOREACH(const CMerkleTx& tx, vtxPrev) + { + if (!(tx.IsCoinBase() || tx.IsCoinStake())) + { + uint256 hash = tx.GetHash(); + if (!txdb.ContainsTx(hash)) + RelayTransaction((CTransaction)tx, hash); + } + } */ if (!(IsCoinBase() || IsCoinStake())) { - if (GetDepthInMainChain() == 0) { - uint256 hash = GetHash(); - if(strCommand == "txlreq"){ - LogPrintf("Relaying txlreq %s\n", hash.ToString()); - mapTxLockReq.insert(make_pair(hash, ((CTransaction)*this))); - CreateNewLock(((CTransaction)*this)); - RelayTransactionLockReq((CTransaction)*this, true); - } else { - LogPrintf("Relaying wtx %s\n", hash.ToString()); - RelayTransaction((CTransaction)*this, hash); - } + uint256 hash = GetHash(); + if (!txdb.ContainsTx(hash)) + { + LogPrintf("Relaying wtx %s\n", hash.ToString()); + RelayTransaction((CTransaction)*this, hash); } } } @@ -1437,8 +1421,11 @@ void CWallet::ResendWalletTransactions(bool fForce) // -CAmount CWallet::GetBalance() const +CAmount CWallet::GetBalance() { + if(!fCachedBalanceNeedsUpdating) + return nCachedBalance; + CAmount nTotal = 0; { LOCK2(cs_main, cs_wallet); @@ -1448,6 +1435,8 @@ CAmount CWallet::GetBalance() const if (pcoin->IsTrusted()) nTotal += pcoin->GetAvailableCredit(); } + nCachedBalance = nTotal; + fCachedBalanceNeedsUpdating = false; } return nTotal; @@ -1818,62 +1807,86 @@ void CWallet::AvailableCoinsForStaking(vector& vCoins, unsigned int nSp vCoins.clear(); { - LOCK2(cs_main, cs_wallet); - int nStakeMinConfirmations = 360; - if(pindexBest->nHeight >= PEPE_STAKE_WINTER_SWITCH_HEIGHT) - nStakeMinConfirmations = 60; - - for (map::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) + //LOCK2(cs_main, cs_wallet); + while(true){ + TRY_LOCK(cs_main, lockMain); + if(!lockMain) { MilliSleep(1); continue; } { - const CWalletTx* pcoin = &(*it).second; + while(true){ + TRY_LOCK(cs_wallet, lockWallet); + if(!lockWallet) { MilliSleep(1); continue; } + { + CBlockIndex* pindexPrev = pindexBest; + + int nStakeMinConfirmations = 360; + + if(pindexBest->nHeight >= PEPE_STAKE_WINTER_SWITCH_HEIGHT || Params().NetworkID() == CChainParams::TESTNET) + nStakeMinConfirmations = 60; + // if(pindexPrev->nHeight+1 > PEPE_KEKDAQ_MID_FIX_HEIGHT) removed to resolve block loading issue + // nStakeMinConfirmations = 600; + if(pindexPrev->nHeight+1 > PEPE_STAKE_CONF_HEIGHT) + nStakeMinConfirmations = 360; + if(pindexPrev->nHeight+1 > PEPE_STAKE_CONF_TWEAK) + nStakeMinConfirmations = 600; + + for (map::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) + { + const CWalletTx* pcoin = &(*it).second; - int nDepth = pcoin->GetDepthInMainChain(); - if (nDepth < 1) - continue; + int nDepth = pcoin->GetDepthInMainChain(); + if (nDepth < 1) + continue; - if (nDepth < nStakeMinConfirmations) - { - continue; - } - else - { - // Filtering by tx timestamp instead of block timestamp may give false positives but never false negatives - if (pcoin->nTime + nStakeMinAge > nSpendTime) - continue; - } + if (nDepth < nStakeMinConfirmations) + { + continue; + } + else + { + // Filtering by tx timestamp instead of block timestamp may give false positives but never false negatives + if (pcoin->nTime + nStakeMinAge > nSpendTime) + continue; + } - if (pcoin->GetBlocksToMaturity() > 0) - continue; + if (pcoin->GetBlocksToMaturity() > 0) + continue; - bool found = false; - for (unsigned int i = 0; i < pcoin->vout.size(); i++){ - if (IsDenominatedAmount(pcoin->vout[i].nValue)){ + bool found = false; + for (unsigned int i = 0; i < pcoin->vout.size(); i++){ + if (IsDenominatedAmount(pcoin->vout[i].nValue)){ - //LogPrintf("CWallet::AvailableCoinsForStaking - Found denominated amounts.\n"); - found = true; - break; - } - if (pcoin->vout[i].nValue == GetMNCollateral(pindexBest->nHeight)*COIN){ + //LogPrintf("CWallet::AvailableCoinsForStaking - Found denominated amounts.\n"); + found = true; + break; + } + if (pcoin->vout[i].nValue == GetMNCollateral(pindexBest->nHeight)*COIN){ - //LogPrintf("CWallet::AvailableCoinsForStaking - Found Masternode collateral.\n"); - found = true; - break; - } - if (IsCollateralAmount(pcoin->vout[i].nValue)){ + //LogPrintf("CWallet::AvailableCoinsForStaking - Found Masternode collateral.\n"); + found = true; + break; + } + if (IsCollateralAmount(pcoin->vout[i].nValue)){ - //LogPrintf("CWallet::AvailableCoinsForStaking - Found Collateral amount.\n"); - found = true; - break; - } - } + //LogPrintf("CWallet::AvailableCoinsForStaking - Found Collateral amount.\n"); + found = true; + break; + } + } - if(found) continue; + if(found) continue; - for (unsigned int i = 0; i < pcoin->vout.size(); i++){ - if (!(pcoin->IsSpent(i)) && IsMine(pcoin->vout[i]) && pcoin->vout[i].nValue >= nMinimumInputValue) - vCoins.push_back(COutput(pcoin, i, nDepth, true)); + for (unsigned int i = 0; i < pcoin->vout.size(); i++) { + isminetype mine = IsMine(pcoin->vout[i]); + if (!(pcoin->IsSpent(i)) && mine != ISMINE_NO && pcoin->vout[i].nValue >= nMinimumInputValue) + vCoins.push_back(COutput(pcoin, i, nDepth, mine & ISMINE_SPENDABLE)); + } + } + } + break; } } + break; + } } } @@ -2769,7 +2782,7 @@ bool CWallet::CreateTransaction(const vector >& vecSend, } else if (coin_type == ONLY_NOT10000IFMN) { strFailReason = _(" Unable to locate enough Darksend non-denominated funds for this transaction."); } else if (coin_type == ONLY_NONDENOMINATED_NOT10000IFMN ) { - strFailReason = _(" Unable to locate enough Darksend non-denominated funds for this transaction that are not equal 1000 MEME."); + strFailReason = _(" Unable to locate enough Darksend non-denominated funds for this transaction that are not equal 1000 PEPE."); } else { strFailReason = _(" Unable to locate enough Darksend denominated funds for this transaction."); strFailReason += _(" Darksend uses exact denominated amounts to send funds, you might simply need to anonymize some more coins."); @@ -2807,7 +2820,7 @@ bool CWallet::CreateTransaction(const vector >& vecSend, { // Fill a vout to ourself // TODO: pass in scriptChange instead of reservekey so - // change transaction isn't always pay-to-memetic-address + // change transaction isn't always pay-to-pepecoin-address CScript scriptChange; // coin control: send change to custom address @@ -3674,6 +3687,7 @@ bool CWallet::FindStealthTransactions(const CTransaction& tx, mapValue_t& mapNar uint64_t CWallet::GetStakeWeight() const { + CBlockIndex* pindexPrev = pindexBest; // Choose coins to use int64_t nBalance = GetBalance(); @@ -3697,8 +3711,15 @@ uint64_t CWallet::GetStakeWeight() const LOCK2(cs_main, cs_wallet); int nStakeMinConfirmations = 360; - if(pindexBest->nHeight > PEPE_STAKE_WINTER_SWITCH_HEIGHT) - nStakeMinConfirmations = 60; + + if(pindexBest->nHeight+1 >= PEPE_STAKE_WINTER_SWITCH_HEIGHT || Params().NetworkID() == CChainParams::TESTNET) + nStakeMinConfirmations = 60; + // if((pindexPrev->nHeight+1) > PEPE_KEKDAQ_MID_FIX_HEIGHT) + // nStakeMinConfirmations = 600; + if((pindexPrev->nHeight+1) > PEPE_STAKE_CONF_HEIGHT) + nStakeMinConfirmations = 360; + if((pindexPrev->nHeight+1) > PEPE_STAKE_CONF_TWEAK) + nStakeMinConfirmations = 600; BOOST_FOREACH(PAIRTYPE(const CWalletTx*, unsigned int) pcoin, setCoins) { @@ -3871,64 +3892,305 @@ bool CWallet::CreateCoinStake(const CKeyStore& keystore, unsigned int nBits, int nCredit += nReward; } - // Masternode Payments - int payments = 1; - // start masternode payments - bool bMasterNodePayment = false; // note was false, set true to test set to false until MN start 4/14/06 - - CScript payee; - CTxIn vin; - bool hasPayment = false; - if(bMasterNodePayment) { - //spork - if(!masternodePayments.GetBlockPayee(pindexPrev->nHeight+1, payee, vin)){ - CMasternode* winningNode = mnodeman.GetCurrentMasterNode(1); - if(winningNode){ - payee = GetScriptForDestination(winningNode->pubkey.GetID()); - } else { - return error("CreateCoinStake: Failed to detect masternode to pay\n"); - } - } - } + int64_t blockValue = nCredit; - if(hasPayment){ - payments = txNew.vout.size() + 1; + // PepeCoin Rebrand Dev Reward + if(((Params().NetworkID() != CChainParams::TESTNET && pindexPrev->nHeight+1 >= PEPE_REBRAND_HEIGHT) && (Params().NetworkID() != CChainParams::TESTNET && pindexPrev->nHeight+1 <= PEPE_KEKDAQ_MID_FIX_HEIGHT)) + || ((Params().NetworkID() == CChainParams::TESTNET && pindexPrev->nHeight+1 >= PEPE_REBRAND_HEIGHT_TESTNET) && (Params().NetworkID() == CChainParams::TESTNET && pindexPrev->nHeight+1 <= PEPE_KEKDAQ_MID_HEIGHT_TESTNET))) + { + // add tx outputs for 3 dev reward splits + int payments = txNew.vout.size() + 3; + if(pindexPrev->nHeight+1 >= PEPE_STAKEONLY_HEIGHT) + payments = txNew.vout.size() + 4; txNew.vout.resize(payments); - txNew.vout[payments-1].scriptPubKey = payee; + CBitcoinAddress addrDevOne; + addrDevOne.SetString(DecodeBase64(PEPE_REBRAND_DEV_1)); + CScript payeeDevOne = GetScriptForDestination(addrDevOne.Get()); + CBitcoinAddress addrDevTwo; + addrDevTwo.SetString(DecodeBase64(PEPE_REBRAND_DEV_2)); + CScript payeeDevTwo = GetScriptForDestination(addrDevTwo.Get()); + CBitcoinAddress addrDevThree; + addrDevThree.SetString(DecodeBase64(PEPE_REBRAND_DEV_3)); + CScript payeeDevThree = GetScriptForDestination(addrDevThree.Get()); + CBitcoinAddress addrDevFour; + addrDevFour.SetString(DecodeBase64(PEPE_DEV_4)); + CScript payeeDevFour = GetScriptForDestination(addrDevFour.Get()); + + txNew.vout[payments-1].scriptPubKey = payeeDevOne; txNew.vout[payments-1].nValue = 0; + txNew.vout[payments-2].scriptPubKey = payeeDevTwo; + txNew.vout[payments-2].nValue = 0; + txNew.vout[payments-3].scriptPubKey = payeeDevThree; + txNew.vout[payments-3].nValue = 0; + if(pindexPrev->nHeight+1 >= PEPE_STAKEONLY_HEIGHT) + { + txNew.vout[payments-4].scriptPubKey = payeeDevFour; + txNew.vout[payments-4].nValue = 0; + } + + int64_t devPayment = 0.02 * nReward; // 2% of stake reward per dev payment + + if (pindexPrev->nHeight+1 > PEPE_REBRAND_PF_HEIGHT) + devPayment = 0.04 * nReward; // 4% per dev reward, approx 38k coins/yr x3 + + if (pindexPrev->nHeight+1 == PEPE_REBRAND_PF_HEIGHT) + devPayment = PEPE_DEV_GRANT; + if (pindexPrev->nHeight+1 == PEPE_KEKDAQ_MID_FIX_HEIGHT) + devPayment = PEPE_DEV_GRANT_MID; + if (pindexPrev->nHeight+1 == PEPE_IPFSMN_FNL_HEIGHT) + devPayment = PEPE_DEV_GRANT_FINAL; + if (pindexPrev->nHeight == PEPE_STAKE_CONF_HEIGHT) + devPayment = PEPE_DEV_GRANT; + if (pindexPrev->nHeight+1 == PEPE_KEKDAQ2_SWAP_HEIGHT) + devPayment = DEVFEE_OFF_SWAP_FINAL; + if (pindexPrev->nHeight+1 == PEPE_STAKEONLY_HEIGHT) + devPayment = PEPE_SO_SWAP_GRANT; + + + // Set output amount + if(txNew.vout.size() == 7 && pindexPrev->nHeight+1 >= PEPE_STAKEONLY_HEIGHT) // 2 stake outputs, stake was split, plus 4 dev payments + { + txNew.vout[payments-1].nValue = devPayment; + txNew.vout[payments-2].nValue = devPayment; + txNew.vout[payments-3].nValue = devPayment; + txNew.vout[payments-4].nValue = devPayment; + blockValue -= (4 * devPayment); + txNew.vout[1].nValue = (blockValue / 2 / CENT) * CENT; + txNew.vout[2].nValue = blockValue - txNew.vout[1].nValue; + } + else if(txNew.vout.size() == 6 && pindexPrev->nHeight+1 >= PEPE_STAKEONLY_HEIGHT) // 2 stake outputs, stake was split, plus 4 dev payments + { + txNew.vout[payments-1].nValue = devPayment; + txNew.vout[payments-2].nValue = devPayment; + txNew.vout[payments-3].nValue = devPayment; + txNew.vout[payments-4].nValue = devPayment; + blockValue -= (4 * devPayment); + txNew.vout[1].nValue = (blockValue / 2 / CENT) * CENT; + txNew.vout[2].nValue = blockValue - txNew.vout[1].nValue; + } + else if(txNew.vout.size() == 6) // 2 stake outputs, stake was split, plus 3 dev payments + { + txNew.vout[payments-1].nValue = devPayment; + txNew.vout[payments-2].nValue = devPayment; + txNew.vout[payments-3].nValue = devPayment; + blockValue -= (3 * devPayment); + txNew.vout[1].nValue = (blockValue / 2 / CENT) * CENT; + txNew.vout[2].nValue = blockValue - txNew.vout[1].nValue; + } + else if(txNew.vout.size() == 5) // only 1 stake output, was not split, plus 3 dev payments + { + txNew.vout[payments-1].nValue = devPayment; + txNew.vout[payments-2].nValue = devPayment; + txNew.vout[payments-3].nValue = devPayment; + blockValue -= (3 * devPayment); + txNew.vout[1].nValue = blockValue; + } + else + { + // this should never happen + LogPrintf("WARNING: Incorrect post-rebrand stake tx outputs count!\n"); + } + } + else + { + // Masternode Payments + int payments = 1; + // start masternode payments + bool bMasterNodePayment = false; // note was false, set true to test set to false until MN start 4/14/06 - CTxDestination address1; - ExtractDestination(payee, address1); - CBitcoinAddress address2(address1); + if ( Params().NetworkID() == CChainParams::TESTNET ){ + if (pindexPrev->nHeight+1 > PEPE_KEKDAQ_MID_HEIGHT_TESTNET ){ + bMasterNodePayment = true; + } + }else{ + if (pindexPrev->nHeight+1 > PEPE_KEKDAQ_MID_HEIGHT){ + bMasterNodePayment = true; + } + } - LogPrintf("Masternode payment to %s\n", address2.ToString().c_str()); - } + CScript payee; + bool hasPayment = true; + if(bMasterNodePayment) { + //spork + int winningNode = GetCurrentMasterNode(1); + if(winningNode >= 0){ + payee =GetScriptForDestination(vecMasternodes[winningNode].pubkey.GetID()); + } else { + LogPrintf("CreateCoinStake: Failed to detect masternode to pay\n"); + // pay the burn address if it can't detect + std::string burnAddy = "PKekDaqXXXXXXXXXXXXXXXXXXXXXWH8yfH"; + CBitcoinAddress burnAddr; + burnAddr.SetString(burnAddy); + payee = GetScriptForDestination(burnAddr.Get()); + } + + } - int64_t blockValue = nCredit; - int64_t masternodePayment = 0; //GetMasternodePayment(pindexPrev->nHeight+1, nReward); + if(hasPayment){ + payments = txNew.vout.size() + 4; + if(pindexPrev->nHeight+1 >= PEPE_STAKEONLY_HEIGHT) + payments = txNew.vout.size() + 5; + txNew.vout.resize(payments); + if(pindexPrev->nHeight+1 >= PEPE_STAKEONLY_HEIGHT) + { + txNew.vout[payments-5].scriptPubKey = payee; + txNew.vout[payments-5].nValue = 0; + } + else + { + txNew.vout[payments-4].scriptPubKey = payee; + txNew.vout[payments-4].nValue = 0; + } - // Set output amount - if (!hasPayment && txNew.vout.size() == 3) // 2 stake outputs, stake was split, no masternode payment - { - txNew.vout[1].nValue = (blockValue / 2 / CENT) * CENT; - txNew.vout[2].nValue = blockValue - txNew.vout[1].nValue; - } - else if(hasPayment && txNew.vout.size() == 4) // 2 stake outputs, stake was split, plus a masternode payment - { - txNew.vout[payments-1].nValue = masternodePayment; - blockValue -= masternodePayment; - txNew.vout[1].nValue = (blockValue / 2 / CENT) * CENT; - txNew.vout[2].nValue = blockValue - txNew.vout[1].nValue; - } - else if(!hasPayment && txNew.vout.size() == 2) // only 1 stake output, was not split, no masternode payment - txNew.vout[1].nValue = blockValue; - else if(hasPayment && txNew.vout.size() == 3) // only 1 stake output, was not split, plus a masternode payment - { - txNew.vout[payments-1].nValue = masternodePayment; - blockValue -= masternodePayment; - txNew.vout[1].nValue = blockValue; + CTxDestination address1; + ExtractDestination(payee, address1); + CBitcoinAddress address2(address1); + + LogPrintf("Masternode payment to %s\n", address2.ToString().c_str()); + } + else + { + // add tx outputs for 3 dev reward splits + int payments = txNew.vout.size() + 3; + if(pindexPrev->nHeight+1 >= PEPE_STAKEONLY_HEIGHT) + payments = txNew.vout.size() + 4; + txNew.vout.resize(payments); + } + + CBitcoinAddress addrDevOne; + addrDevOne.SetString(DecodeBase64(PEPE_REBRAND_DEV_1)); + CScript payeeDevOne = GetScriptForDestination(addrDevOne.Get()); + CBitcoinAddress addrDevTwo; + addrDevTwo.SetString(DecodeBase64(PEPE_REBRAND_DEV_2)); + CScript payeeDevTwo = GetScriptForDestination(addrDevTwo.Get()); + CBitcoinAddress addrDevThree; + addrDevThree.SetString(DecodeBase64(PEPE_REBRAND_DEV_3)); + CScript payeeDevThree = GetScriptForDestination(addrDevThree.Get()); + CBitcoinAddress addrDevFour; + addrDevFour.SetString(DecodeBase64(PEPE_DEV_4)); + CScript payeeDevFour = GetScriptForDestination(addrDevFour.Get()); + + txNew.vout[payments-1].scriptPubKey = payeeDevOne; + txNew.vout[payments-1].nValue = 0; + txNew.vout[payments-2].scriptPubKey = payeeDevTwo; + txNew.vout[payments-2].nValue = 0; + txNew.vout[payments-3].scriptPubKey = payeeDevThree; + txNew.vout[payments-3].nValue = 0; + if(pindexPrev->nHeight+1 >= PEPE_STAKEONLY_HEIGHT) + { + txNew.vout[payments-4].scriptPubKey = payeeDevFour; + txNew.vout[payments-4].nValue = 0; + } + + int64_t devPayment = 0.02 * nReward; // 2% of stake reward per dev payment + + if (pindexPrev->nHeight+1 > PEPE_REBRAND_PF_HEIGHT) + devPayment = 0.04 * nReward; // 4% per dev reward, approx 38k coins/yr x3 + if (pindexPrev->nHeight+1 == PEPE_REBRAND_PF_HEIGHT) + devPayment = PEPE_DEV_GRANT; + if (pindexPrev->nHeight+1 == PEPE_KEKDAQ_MID_FIX_HEIGHT) + devPayment = PEPE_DEV_GRANT_MID; + if (pindexPrev->nHeight+1 == PEPE_IPFSMN_FNL_HEIGHT) + devPayment = PEPE_DEV_GRANT_FINAL; + if (pindexPrev->nHeight+1 == PEPE_STAKE_CONF_HEIGHT) + devPayment = PEPE_DEV_GRANT; + if (pindexPrev->nHeight+1 == PEPE_KEKDAQ2_SWAP_HEIGHT) + devPayment = DEVFEE_OFF_SWAP_FINAL; + if (pindexPrev->nHeight+1 == PEPE_STAKEONLY_HEIGHT) + devPayment = PEPE_SO_SWAP_GRANT; + + int64_t masternodePayment = (nReward - (3 * devPayment)) * 0.375; //37.5% //GetMasternodePayment(pindexPrev->nHeight+1, nReward); + if (pindexPrev->nHeight+1 >= PEPE_STAKEONLY_HEIGHT) + masternodePayment = (nReward - (4 * devPayment)) * 0.375; + + // Set output amount + if(!hasPayment && txNew.vout.size() == 7 && pindexPrev->nHeight+1 >= PEPE_STAKEONLY_HEIGHT) // 2 stake outputs, stake was split, plus 3 dev payments + { + txNew.vout[payments-1].nValue = devPayment; + txNew.vout[payments-2].nValue = devPayment; + txNew.vout[payments-3].nValue = devPayment; + txNew.vout[payments-4].nValue = devPayment; + blockValue -= (4 * devPayment); + txNew.vout[1].nValue = (blockValue / 2 / CENT) * CENT; + txNew.vout[2].nValue = blockValue - txNew.vout[1].nValue; + } + else if(!hasPayment && txNew.vout.size() == 6 && pindexPrev->nHeight+1 >= PEPE_STAKEONLY_HEIGHT) // only 1 stake output, was not split, plus 4 dev payments + { + txNew.vout[payments-1].nValue = devPayment; + txNew.vout[payments-2].nValue = devPayment; + txNew.vout[payments-3].nValue = devPayment; + txNew.vout[payments-4].nValue = devPayment; + blockValue -= (4 * devPayment); + txNew.vout[1].nValue = blockValue; + } + else if(hasPayment && txNew.vout.size() == 8 && pindexPrev->nHeight+1 >= PEPE_STAKEONLY_HEIGHT) // 2 stake outputs, stake was split, mn payment plus 4 dev payments + { + txNew.vout[payments-1].nValue = devPayment; + txNew.vout[payments-2].nValue = devPayment; + txNew.vout[payments-3].nValue = devPayment; + txNew.vout[payments-4].nValue = devPayment; + blockValue -= (4 * devPayment); + txNew.vout[payments-5].nValue = masternodePayment; + blockValue -= masternodePayment; + txNew.vout[1].nValue = (blockValue / 2 / CENT) * CENT; + txNew.vout[2].nValue = blockValue - txNew.vout[1].nValue; + } + else if(hasPayment && txNew.vout.size() == 7 && pindexPrev->nHeight+1 >= PEPE_STAKEONLY_HEIGHT) // only 1 stake output, was not split, mn payment plus 4 dev payments + { + txNew.vout[payments-1].nValue = devPayment; + txNew.vout[payments-2].nValue = devPayment; + txNew.vout[payments-3].nValue = devPayment; + txNew.vout[payments-4].nValue = devPayment; + blockValue -= (4 * devPayment); + txNew.vout[payments-5].nValue = masternodePayment; + blockValue -= masternodePayment; + txNew.vout[1].nValue = blockValue; + } + else if(!hasPayment && txNew.vout.size() == 6 && pindexPrev->nHeight+1 < PEPE_STAKEONLY_HEIGHT) // 2 stake outputs, stake was split, plus 3 dev payments + { + txNew.vout[payments-1].nValue = devPayment; + txNew.vout[payments-2].nValue = devPayment; + txNew.vout[payments-3].nValue = devPayment; + blockValue -= (3 * devPayment); + txNew.vout[1].nValue = (blockValue / 2 / CENT) * CENT; + txNew.vout[2].nValue = blockValue - txNew.vout[1].nValue; + } + else if(!hasPayment && txNew.vout.size() == 5 && pindexPrev->nHeight+1 < PEPE_STAKEONLY_HEIGHT) // only 1 stake output, was not split, plus 3 dev payments + { + txNew.vout[payments-1].nValue = devPayment; + txNew.vout[payments-2].nValue = devPayment; + txNew.vout[payments-3].nValue = devPayment; + blockValue -= (3 * devPayment); + txNew.vout[1].nValue = blockValue; + } + else if(hasPayment && txNew.vout.size() == 7 && pindexPrev->nHeight+1 < PEPE_STAKEONLY_HEIGHT) // 2 stake outputs, stake was split, mn payment plus 3 dev payments + { + txNew.vout[payments-1].nValue = devPayment; + txNew.vout[payments-2].nValue = devPayment; + txNew.vout[payments-3].nValue = devPayment; + blockValue -= (3 * devPayment); + txNew.vout[payments-4].nValue = masternodePayment; + blockValue -= masternodePayment; + txNew.vout[1].nValue = (blockValue / 2 / CENT) * CENT; + txNew.vout[2].nValue = blockValue - txNew.vout[1].nValue; + } + else if(hasPayment && txNew.vout.size() == 6 && pindexPrev->nHeight+1 < PEPE_STAKEONLY_HEIGHT) // only 1 stake output, was not split, mn payment plus 3 dev payments + { + txNew.vout[payments-1].nValue = devPayment; + txNew.vout[payments-2].nValue = devPayment; + txNew.vout[payments-3].nValue = devPayment; + blockValue -= (3 * devPayment); + txNew.vout[payments-4].nValue = masternodePayment; + blockValue -= masternodePayment; + txNew.vout[1].nValue = blockValue; + } + else + { + // this should never happen + LogPrintf("WARNING: Incorrect post-rebrand stake tx outputs count!\n"); + } } // Sign @@ -4007,7 +4269,17 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey, std: return true; } +bool CWallet::AddAccountingEntry(const CAccountingEntry& acentry, CWalletDB & pwalletdb) +{ + if (!pwalletdb.WriteAccountingEntry_Backend(acentry)) + return false; + laccentries.push_back(acentry); + CAccountingEntry & entry = laccentries.back(); + wtxOrdered.insert(make_pair(entry.nOrderPos, TxPair((CWalletTx*)0, &entry))); + + return true; +} string CWallet::SendMoney(CScript scriptPubKey, int64_t nValue, std::string& sNarr, CWalletTx& wtxNew, bool fAskFee) @@ -4309,7 +4581,7 @@ bool CWallet::NewKeyPool() if (IsLocked()) return false; - fLiteMode = GetBoolArg("-litemode", false); + fLiteMode = GetBoolArg("-nomntesting", false); int64_t nKeys; if (fLiteMode) @@ -4340,7 +4612,7 @@ bool CWallet::TopUpKeyPool(unsigned int nSize) // Top up key pool unsigned int nTargetSize; - fLiteMode = GetBoolArg("-litemode", false); + fLiteMode = GetBoolArg("-nomntesting", false); if (nSize > 0) nTargetSize = nSize; @@ -4357,10 +4629,12 @@ bool CWallet::TopUpKeyPool(unsigned int nSize) if (!walletdb.WritePool(nEnd, CKeyPool(GenerateNewKey()))) throw runtime_error("TopUpKeyPool() : writing generated key failed"); setKeyPool.insert(nEnd); - LogPrintf("keypool added key %d, size=%u\n", nEnd, setKeyPool.size()); - double dProgress = 100.f * nEnd / (nTargetSize + 1); - std::string strMsg = strprintf(_("Loading wallet... (%3.2f %%)"), dProgress); - uiInterface.InitMessage(strMsg); + // LogPrintf("keypool added key %d, size=%u\n", nEnd, setKeyPool.size()); + + // remove some unneeded log messages to reduce disk thrashing + // double dProgress = 100.f * nEnd / (nTargetSize + 1); + // std::string strMsg = strprintf(_("Loading wallet... (%3.2f %%)"), dProgress); + // uiInterface.InitMessage(strMsg); } } return true; @@ -4620,7 +4894,7 @@ void CWallet::FixSpentCoins(int& nMismatchFound, int64_t& nBalanceInQuestion, bo { if (IsMine(pcoin->vout[n]) && pcoin->IsSpent(n) && (txindex.vSpent.size() <= n || txindex.vSpent[n].IsNull())) { - LogPrintf("FixSpentCoins found lost coin %s MEME %s[%d], %s\n", + LogPrintf("FixSpentCoins found lost coin %s PEPE %s[%d], %s\n", FormatMoney(pcoin->vout[n].nValue), pcoin->GetHash().ToString(), n, fCheckOnly? "repair not attempted" : "repairing"); nMismatchFound++; nBalanceInQuestion += pcoin->vout[n].nValue; @@ -4632,7 +4906,7 @@ void CWallet::FixSpentCoins(int& nMismatchFound, int64_t& nBalanceInQuestion, bo } else if (IsMine(pcoin->vout[n]) && !pcoin->IsSpent(n) && (txindex.vSpent.size() > n && !txindex.vSpent[n].IsNull())) { - LogPrintf("FixSpentCoins found spent coin %s MEME %s[%d], %s\n", + LogPrintf("FixSpentCoins found spent coin %s PEPE %s[%d], %s\n", FormatMoney(pcoin->vout[n].nValue), pcoin->GetHash().ToString(), n, fCheckOnly? "repair not attempted" : "repairing"); nMismatchFound++; nBalanceInQuestion += pcoin->vout[n].nValue; @@ -4644,6 +4918,8 @@ void CWallet::FixSpentCoins(int& nMismatchFound, int64_t& nBalanceInQuestion, bo } } } + + fCachedBalanceNeedsUpdating = true; } // ppcoin: disable transaction (only for coinstake) @@ -4666,6 +4942,8 @@ void CWallet::DisableTransaction(const CTransaction &tx) } } } + + fCachedBalanceNeedsUpdating = true; } bool CReserveKey::GetReservedKey(CPubKey& pubkey) @@ -4732,6 +5010,7 @@ bool CWallet::UpdatedTransaction(const uint256 &hashTx) // Only notify UI if this transaction is in this wallet map::const_iterator mi = mapWallet.find(hashTx); if (mi != mapWallet.end()){ + fCachedBalanceNeedsUpdating = true; NotifyTransactionChanged(this, hashTx, CT_UPDATED); return true; } @@ -4826,3 +5105,12 @@ void CWallet::GetKeyBirthTimes(std::map &mapKeyBirth) const { for (std::map::const_iterator it = mapKeyFirstBlock.begin(); it != mapKeyFirstBlock.end(); it++) mapKeyBirth[it->first] = it->second->nTime - 7200; // block times can be 2h off } + +bool CWallet::AddmastertoadConfig(CmastertoadConfig nodeConfig) +{ + bool rv = CWalletDB(strWalletFile).WritemastertoadConfig(nodeConfig.sAlias, nodeConfig); + if(rv) + uiInterface.NotifymastertoadChanged(nodeConfig); + + return rv; +} \ No newline at end of file diff --git a/src/wallet.h b/src/wallet.h index 9e869937..77b6605c 100644 --- a/src/wallet.h +++ b/src/wallet.h @@ -54,9 +54,12 @@ enum AvailableCoinsType ALL_COINS = 1, ONLY_DENOMINATED = 2, ONLY_NOT10000IFMN = 3, - ONLY_NONDENOMINATED_NOT10000IFMN = 4 + ONLY_NONDENOMINATED = 3, + ONLY_NONDENOMINATED_NOT10000IFMN = 4, + ONLY_NONDENOMINATED_NOTMN = 4 }; + /** A key pool entry */ class CKeyPool { @@ -119,6 +122,10 @@ class CWallet : public CCryptoKeyStore, public CWalletInterface /// strWalletFile (immutable after instantiation) mutable CCriticalSection cs_wallet; + // Cache balance for staker thread to reduce lock contention + CAmount nCachedBalance; + bool fCachedBalanceNeedsUpdating; + bool SelectCoinsDark(int64_t nValueMin, int64_t nValueMax, std::vector& setCoinsRet, int64_t& nValueRet, int nDarksendRoundsMin, int nDarksendRoundsMax) const; bool SelectCoinsByDenominations(int nDenom, int64_t nValueMin, int64_t nValueMax, std::vector& vCoinsRet, std::vector& vCoinsRet2, int64_t& nValueRet, int nDarksendRoundsMin, int nDarksendRoundsMax); bool SelectCoinsDarkDenominated(int64_t nTargetValue, std::vector& setCoinsRet, int64_t& nValueRet) const; @@ -149,6 +156,9 @@ class CWallet : public CCryptoKeyStore, public CWalletInterface MasterKeyMap mapMasterKeys; unsigned int nMasterKeyMaxID; + std::map mapMymastertoads; + bool AddmastertoadConfig(CmastertoadConfig nodeConfig); + CWallet() { SetNull(); @@ -175,6 +185,12 @@ class CWallet : public CCryptoKeyStore, public CWalletInterface } std::map mapWallet; + std::list laccentries; + + typedef std::pair TxPair; + typedef std::multimap TxItems; + TxItems wtxOrdered; + int64_t nOrderPosNext; std::map mapRequestCount; @@ -244,15 +260,6 @@ class CWallet : public CCryptoKeyStore, public CWalletInterface */ int64_t IncOrderPosNext(CWalletDB *pwalletdb = NULL); - typedef std::pair TxPair; - typedef std::multimap TxItems; - - /** Get the wallet's activity log - @return multimap of ordered transactions and accounting entries - @warning Returned pointers are *only* valid within the scope of passed acentries - */ - TxItems OrderedTxItems(std::list& acentries, std::string strAccount = ""); - void MarkDirty(); bool AddToWallet(const CWalletTx& wtxIn, bool fFromLoadWallet=false); void SyncTransaction(const CTransaction& tx, const CBlock* pblock, bool fConnect = true); @@ -263,7 +270,7 @@ class CWallet : public CCryptoKeyStore, public CWalletInterface void ReacceptWalletTransactions(); void ResendWalletTransactions(bool fForce = false); - CAmount GetBalance() const; + CAmount GetBalance(); CAmount GetStake() const; CAmount GetNewMint() const; CAmount GetUnconfirmedBalance() const; @@ -283,6 +290,8 @@ class CWallet : public CCryptoKeyStore, public CWalletInterface bool CreateTransactionWall(CScript scriptPubKey, int64_t nValue, std::string& sNarr, CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, std::string msg, const CCoinControl *coinControl=NULL); bool CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey, std::string strCommand="tx"); + bool AddAccountingEntry(const CAccountingEntry&, CWalletDB & pwalletdb); + uint64_t GetStakeWeight() const; bool CreateCoinStake(const CKeyStore& keystore, unsigned int nBits, int64_t nSearchInterval, int64_t nFees, CTransaction& txNew, CKey& key); diff --git a/src/walletdb.cpp b/src/walletdb.cpp index a9667a1a..12ad2ae8 100644 --- a/src/walletdb.cpp +++ b/src/walletdb.cpp @@ -76,6 +76,23 @@ bool CWalletDB::ReadStealthAddress(CStealthAddress& sxAddr) return Read(std::make_pair(std::string("sxAddr"), sxAddr.scan_pubkey), sxAddr); } +bool CWalletDB::WritemastertoadConfig(std::string sAlias, const CmastertoadConfig& nodeConfig) +{ + nWalletDBUpdated++; + return Write(std::make_pair(std::string("mastertoad"), sAlias), nodeConfig, true); +} + +bool CWalletDB::ReadmastertoadConfig(std::string sAlias, CmastertoadConfig& nodeConfig) +{ + return Read(std::make_pair(std::string("mastertoad"), sAlias), nodeConfig); +} + +bool CWalletDB::ErasemastertoadConfig(std::string sAlias) +{ + nWalletDBUpdated++; + return Erase(std::make_pair(std::string("mastertoad"), sAlias)); +} + bool CWalletDB::WriteKey(const CPubKey& vchPubKey, const CPrivKey& vchPrivKey, const CKeyMetadata& keyMeta) { nWalletDBUpdated++; @@ -199,7 +216,7 @@ bool CWalletDB::WriteAccountingEntry(const uint64_t nAccEntryNum, const CAccount return Write(boost::make_tuple(string("acentry"), acentry.strAccount, nAccEntryNum), acentry); } -bool CWalletDB::WriteAccountingEntry(const CAccountingEntry& acentry) +bool CWalletDB::WriteAccountingEntry_Backend(const CAccountingEntry& acentry) { return WriteAccountingEntry(++nAccountingEntryNumber, acentry); } @@ -376,13 +393,8 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, ssKey >> hash; CWalletTx& wtx = pwallet->mapWallet[hash]; ssValue >> wtx; - if (wtx.CheckTransaction() && (wtx.GetHash() == hash)) - wtx.BindWallet(pwallet); - else - { - pwallet->mapWallet.erase(hash); + if (!(wtx.CheckTransaction() && (wtx.GetHash() == hash))) return false; - } // Undo serialize changes in 31600 if (31404 <= wtx.fTimeReceivedIsTxTime && wtx.fTimeReceivedIsTxTime <= 31703) @@ -619,6 +631,14 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, { ssValue >> pwallet->nOrderPosNext; } + else if (strType == "mastertoad") + { + std::string sAlias; + ssKey >> sAlias; + CmastertoadConfig mastertoadConfig; + ssValue >> mastertoadConfig; + pwallet->mapMymastertoads.insert(make_pair(sAlias, mastertoadConfig)); + } } catch (...) { return false; @@ -737,7 +757,7 @@ DBErrors CWalletDB::LoadWallet(CWallet* pwallet) void ThreadFlushWalletDB(const string& strFile) { // Make this thread recognisable as the wallet flushing thread - RenameThread("memetic-wallet"); + RenameThread("pepecoin-wallet"); static bool fOneThread; if (fOneThread) diff --git a/src/walletdb.h b/src/walletdb.h index bf41ebff..f1c7afe8 100644 --- a/src/walletdb.h +++ b/src/walletdb.h @@ -91,6 +91,31 @@ class CStealthKeyMetadata }; +class CmastertoadConfig +{ +public: + int nVersion; + std::string sAlias; + std::string sAddress; + std::string sCollateralAddress; + std::string sMasternodePrivKey; + bool isLocal; + + CmastertoadConfig() + { + nVersion = 0; + } + + IMPLEMENT_SERIALIZE( + READWRITE(nVersion); + READWRITE(sAlias); + READWRITE(sAddress); + READWRITE(sCollateralAddress); + READWRITE(sMasternodePrivKey); + READWRITE(isLocal); + ) +}; + /** Access to the wallet database (wallet.dat) */ class CWalletDB : public CDB { @@ -114,6 +139,10 @@ class CWalletDB : public CDB bool WriteStealthAddress(const CStealthAddress& sxAddr); bool ReadStealthAddress(CStealthAddress& sxAddr); + bool WritemastertoadConfig(std::string sAlias, const CmastertoadConfig& nodeConfig); + bool ReadmastertoadConfig(std::string sAlias, CmastertoadConfig& nodeConfig); + bool ErasemastertoadConfig(std::string sAlias); + bool WriteKey(const CPubKey& vchPubKey, const CPrivKey& vchPrivKey, const CKeyMetadata &keyMeta); bool WriteCryptedKey(const CPubKey& vchPubKey, const std::vector& vchCryptedSecret, const CKeyMetadata &keyMeta); bool WriteMasterKey(unsigned int nID, const CMasterKey& kMasterKey); @@ -141,7 +170,10 @@ class CWalletDB : public CDB private: bool WriteAccountingEntry(const uint64_t nAccEntryNum, const CAccountingEntry& acentry); public: - bool WriteAccountingEntry(const CAccountingEntry& acentry); + /// This writes directly to the database, and will not update the CWallet's cached accounting entries! + /// Use wallet.AddAccountingEntry instead, to write *and* update its caches. + bool WriteAccountingEntry_Backend(const CAccountingEntry& acentry); + int64_t GetAccountCreditDebit(const std::string& strAccount); void ListAccountCreditDebit(const std::string& strAccount, std::list& acentries);