commit 6956e40f437d0be48ec88e9957ec13da201b7c4d Author: Martin Slachta Date: Wed Apr 8 11:21:35 2026 +0200 Initial diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ef7e7ef --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ +GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..601e620 --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +kidiplom: %: %.tex + @pdflatex $@ + @pdflatex $@ + @biber $@ + @makeglossaries $@ + @makeindex $@.idx + @pdflatex $@ + @pdflatex $@ + +clean: + @rm -v -f *.glsdefs *.bcf *.lo* *.aux *.ind *.idx *.ilg *.toc *.acn *.run.xml *-blx.bib *.ist *.glo *.blg *.bbl *.gls *.glg *.alg *.acr + +dist: + @mkdir kidiplom + @cp -r -f kidiplom.pdf kidiplom.tex kidiplom.cls kibase.sty graphics *bib *bx Makefile README.txt LICENSE kidiplom/ + @rm -f kidiplom.zip + @zip -r kidiplom.zip kidiplom + @rm -r -f kidiplom diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..20460d9 --- /dev/null +++ b/README.txt @@ -0,0 +1,116 @@ +KIdiplom +======== + +V tomto adresáři je styl KIdiplom pro text závěrečné (bakalářské a +diplomové) práce na Katedře informatiky Přírodovědecké fakulty +Univerzity Palackého v Olomouci (KI PřF UP v Olomouci) v typografickém systému +LaTeX, včetně ukázkového textu práce, který je zároveň dokumentací +stylu. + +Soubory a adresáře: + +kidiplom.tex + += zdrojový text, využívající styl KIdiplom, ukázkového textu závěrečné +práce a zároveň dokumentace stylu, doporučeno použít jako šablonu pro +text vlastní práce, instrukce pro použití stylu KIdiplom a překlad +zdrojového textu jsou v souboru ve formě komentářů, soubor je v +kódování UTF-8 (doporučeno zachovat) + +kidiplom.pdf + += přeložený PDF dokument ukázkového textu kidiplom.tex + +kidiplom.cls + += třída dokumentu v LaTeXu představující styl KIdiplom, pro použití ve +zdrojových textech dokumentů využívajících styl, doporučeno soubor +ponechat ve stejném adresáři, jako soubor kidiplom.tex, soubor +neupravujte! + +kibase.sty + += dodatečný styl využívaný třídou kidiplom.cls, doporučeno soubor +ponechat ve stejném adresáři, jako soubor kidiplom.tex, soubor +neupravujte! + +bibliografie.bib + += ukázková bibliografie dokumentu kidiplom.tex pro BibLaTeX + +graphics/ + += adresář s obrázky záhlaví a loga UP na titulní straně dokumentů +používajících styl KIdiplom, doporučeno adresář ponechat ve stejném +adresáři, jako soubor kidiplom.tex, soubory v adresáři neupravujte! + +*bx + += implementace stylů bibliografie pro BibLaTeX podle normy ISO 690, +doporučeno soubory ponechat ve stejném adresáři, jako soubor +kidiplom.tex, soubory neupravujte! + +Makefile + += předpis pro program Make obsahující (mj.) příkazy pro překlad +zdrojového textu kidiplom.tex do PDF dokumentu kidiplom.pdf, soubor +musí být ve stejném adresáři, jako soubor kidiplom.tex + +LICENSE + += text licence stylu KIdiplom + +README.txt + += tento text + +Styl byl testován s distribucí LaTeXu TeX Live (verze 2021). Pro svoji +plnou funkčnost vyžaduje následující (a jimy rekurzivně vyžadované) +dodatečné styly (balíky), které, pokud nejsou součástí standardní instalace +distribuce, lze v rámci distribuce doinstalovat: + +amsbsy +amsmath +amssymb +amsthm +babel +biblatex * +bookmark +csquotes +euscript +fontenc +geometry +glossaries * +graphicx +hyperref +ifpdf +ifthen +inputenc +iwona * +kvoptions +lastpage +lmodern * +listings +makeidx * +multicol * +savesym * +thmtools +xcolor + +* = vyžadování závisí na použitých volbách stylu + +Licence stylu KIdiplom je GNU GPLv3 nebo novější. + +Primární zdroj stylu pro použití na text odevzdávaných závěrečných +prací na KI PřF UP v Olomouci je + +http://www.inf.upol.cz/studium + +Chyby v souvislosti s tímto použitím reportuje na první kontakt níže. + +Styl je vyvíjen na https://github.com/martinrotter/kistyles. Zde +můžete reportovat technické chyby. + +Kontakt: + Jan Outrata (univerzitní oficiální zastoupení, spoluautor stylu) + Martin Rotter (autor stylu) diff --git a/bibliografie.bib b/bibliografie.bib new file mode 100644 index 0000000..2c6ef7a --- /dev/null +++ b/bibliografie.bib @@ -0,0 +1,193 @@ +% This file was created with JabRef 2.6. +% Encoding: UTF8 +@ONLINE{t00, + editor = {Bratková, Eva}, + editortype={compiler}, + title = {Metody citování literatury a strukturování bibliografických záznamů podle mezinárodních norem ISO 690 a ISO 690-2}, + subtitle = {metodický materiál pro autory vysokoškolských kvalifikačních prací}, edition = {Verze 2.0, aktualiz. a rozšíř.}, + location = {Praha}, + publisher = {Odborná komise pro otázky elektronického zpřístupňování vysokoškolských kvalifikačních prací, Asociace knihoven vysokých škol ČR}, + date = {2008-12-22}, + pagetotal = {60}, + url = {http://www.evskp.cz/SD/4c.pdf}, + urldate = {2011-02-02}, + hyphenation={czech} +} + +@BOOK{t01, + author = {Borgman, Christine L.}, + year={2003}, + title = {From Gutenberg to the global information infrastructure}, + subtitle = {access to information in the networked world}, + edition= {first}, + location = {Cambridge (Mass)}, + publisher = {The MIT Press}, + pagetotal = {xviii, 324}, + isbn = {0-262-52345-0}, + hyphenation={english} +} + +@INCOLLECTION{t02, + author = {Greenberg, David}, + year = {1998}, + title = {Camel drivers and gatecrashers}, + subtitle = {quality control in the digital research library}, + editor = {Hawkins, B.L and Battin, P}, + booktitle = {The mirage of continuity}, + booksubtitle = {reconfiguring academic information resources for the 21st century}, + location = {Washington (D.C.)}, + publisher = {Council on Library and Information Resources; Association of American Universities}, + pages = {105-116}, + hyphenation = {english} +} + +@ARTICLE{t03, + author = {LYNCH, C.}, + year = {2005}, + title = {Where do we go from here?}, + subtitle = {the next decade for digital libraries}, + journaltitle = {DLib Magazine}, + volume = {11}, + number = {7/8}, + urldate ={2005-08-15}, + url = {http://www.dlib.org/dlib/july05/lynch/07lynch.html}, + issn = {1082-9873}, + hyphenation = {english} +} + +@ARTICLE{cr, + author = {{Národní knihovna}}, + title = {A big paper}, + journaltitle = {The journal of big papers}, + year = {1991}, + volume = {12}, + number = {3}, + issn={2232-332X}, + hyphenation={english} +} + +@BOOK{kniha, + title = {A big paper}, + subtitle={Podtitul}, + publisher = {Academia}, + year = {1991}, + author = {Děťa, Hugh and Rychlík, Tomáš}, + edition = {2}, + pagetotal = {550}, + location = {Praha}, + series={Pokusná edice}, + isbn={978-44-55-X}, + url={http://pokus.cz}, + comment={Dostupné také z WWW}, + urldate = {2011-01-12}, + hyphenation={czech} +} + +@BOOK{kniha2, + title = {Úplně úžasná knížka}, + year = {1991}, + author = {Děťa, Hugh and Rychlík, Tomáš and Další, Pepa and Spousta, Pepa and Skoro, Moc and Ale, Nestačí and Hodně}, + edition = {3}, + address = {Praha}, + hyphenation={czech} +} + +@BOOK{kniha3, + title = {Úplně úžasná knížka}, + year = {1991}, + author = {Děťa, Hugh and Rychlík, Tomáš and Další, Pepa and Spousta, Pepa and Skoro, Moc and Ale, Nestačí and Hodně}, + edition = {3}, + publisher={MIT Press}, + address = {Praha}, + pagetotal={332}, + hyphenation={english} +} + +@ARTICLE{small, + author = {Freely, I.P.}, + title = {A small paper}, + subtitle = {Podtitulek}, + journaltitle = {The journal of small papers}, + year = {1997}, + volume = {1}, + note = {to appear}, + pages={2-5}, + number={3}, + hyphenation={czech} +} + +@ARTICLE{big, + author = {Jass, Hugh}, + title = {A big paper}, + journal = {The journal of big papers}, + year = {1991}, + volume = {23} +} + +@ARTICLE{cs, + author = {Černý, Hugh}, + title = {Titulek}, + journal = {The journal of big papers}, + year = {1991}, + volume = {12}, + pages = {22-44}, + doi = {10.112.22/jkn}, + number = {2}, +} + +@BOOK{koll, + author = {Kollmannová, Ludmila and Bubeniková, Libuše and Kopecká, Alena}, + title = {Angličtina pro samouky}, + edition = {5}, + location = {Praha}, + publisher = {Státní pedagogické nakladatelství}, + year = {1977}, + pagetotal = {525}, + series = {Učebnice pro samouky}, + isbn = {80-04-25663-5} +} + +@INBOOK{kap, + author = {Novotná, Pepina}, + title = {Podkapitola}, + pages = {22-29}, + chapter = {2.}, + crossref = {koll} +} + +@PERIODICAL{tug, + journaltitle = {TUGBoat}, + publisher = {TUG}, + issn = {1222-3333}, + hyphenation = {english}, + year={1980-}, + skipbib={true}, + url={http://tugboat.tug.org/} +} + +@ARTICLE{knuth, + author = {Knuth, Donald}, + title = {Journeys of \TeX}, + volume = {17}, + number = {3}, + year = {2003}, + pages = {12-22}, + url = {http://tugboat.tug.org/kkk.pdf}, + crossref={tug} +} + +@COLLECTION{sbornik, +title = {Mimořádně užitečný sborník}, +editor = {Geniální, Jiří}, +year = {2007}, +hyphenation = {czech}, +location = {Praha}, +publisher = {Academia}, +isbn = {978-222-626-222-2} +} +@INCOLLECTION{prispevek1, +crossref = {sbornik}, +title = {Velmi zajímavý článek}, +author = {Vlaštovka, Josef}, +pages = {22-45} +} diff --git a/czech-iso.lbx b/czech-iso.lbx new file mode 100644 index 0000000..43acaba --- /dev/null +++ b/czech-iso.lbx @@ -0,0 +1,11 @@ + +\ProvidesFile{czech-iso.lbx} + +\InheritBibliographyExtras{czech} +\InheritBibliographyStrings{czech} + +\DeclareBibliographyStrings{% + url = {{Do\-stup\-n\'y z}{WWW}}, + urlalso={{Do\-stup\-n\'y tak\'e z}{WWW}}, + urlcomercial={{Do\-stup\-n\'y tak\'e komer\b{c}n\v{e} z}{Komer\v{c}n\'i zdroj}} +} diff --git a/czech.lbx b/czech.lbx new file mode 100644 index 0000000..394ea8c --- /dev/null +++ b/czech.lbx @@ -0,0 +1,407 @@ +% $Id: historian.lbx,v 0.4 2010/08/22 gliboff $ + +\ProvidesFile{czech.lbx} + +\InheritBibliographyExtras{english} +\InheritBibliographyStrings{english} + +%Turabian calls for mostly abbreviated bibstrings in the footnotes, but mostly long forms in the bibliography. Here the entire list of bibstrings from the english.lbx file is redefined to select strings by bibliography vs. footnote environment, rather than long vs. short. + +\DeclareBibliographyExtras{ + \protected\def\mkbibordinal#1{ + \ifnumequal{#1}{1}{Prvn\'i}{% + \ifnumequal{#1}{2}{Druh\'e}{% + \ifnumequal{#1}{3}{T\v{r}et\'i}{% + #1\adddot}}}} + \renewcommand\finalandcomma{} + %\protected\def\nameprint#1#2{#2\space#1} +} + +\DeclareBibliographyStrings{% + %volume={{d\'il}{d\adddot}}, + edition={{vyd\'an\'i}{vyd\adddot}}, + page={{strana}{s\adddot}}, + pages={{strany}{s\adddot}}, + andothers={{a dal\v{s}\'i}{aj\adddot}}, + volume={{ro\v{c}n\'ik}{ro\v{c}\adddot}}, + jourvol={{ro\v{c}n\'ik}{ro\v{c}\adddot}}, + number={{\v{c}\'islo}{\v{c}\adddot}}, + urlseen={{citov\'ano}{cit\adddot}}, + url = {{Dostupn\'y z WWW}{WWW}}, + %urlcited = {{citov\'ano},{cit\adddot}} + bibliography = {{Bibliografie}{Bibliografie}}, + references = {{Literatura}{Literatura}}, + shorthands = {{Seznam zkratek}{Zkratky}}, + editor = {{editor}{ed\adddot}}, + editors = {{edotoři}{ed\adddot}}, + compiler = {{sestavil}{sest\adddot}}, + compilers = {{sestavili}{sest\adddot}}, + redactor = {{redaktor}{red\adddot}}, + redactors = {{redaktoři}{red\adddot}}, + founder = {{zakladatel}{zakl\adddot}}, + founders = {{zakladatelé}{zakl\adddot}}, + continuator = {{pokračující}{pok\adddot}}, % FIXME: unsure + continuators = {{pokračující}{pok\adddot}}, % FIXME: unsure + collaborator = {{spolupracovník}{spoluprac\adddot}}, % FIXME: unsure + collaborators = {{spolupracovníci}{spoluprac\adddot}}, % FIXME: unsure + translator = {{překladatel}{překl\adddot}}, + translators = {{překladatelé}{překl\adddot}}, + commentator = {{komentátor}{kom\adddot}}, + commentators = {{komentátoři}{kom\adddot}}, + annotator = {{anotátor}{anot\adddot}}, + annotators = {{anotátoři}{anot\adddot}}, + commentary = {{koment\'ař}{comm\adddot}}, + annotations = {{anotatace}{anot\adddot}}, + introduction = {{úvod}{úv\adddot}}, + foreword = {{předmluva}{předml\adddot}}, + afterword = {{doslov}{dosl\adddot}}, + editortr = {{editor a překladatel}% + {ed\adddotspace a překl\adddot}}, + editorstr = {{editoři a překladatel\'e}% + {ed\adddotspace a překl\adddot}}, + editorco = {{editor a koment\'ator}% + {ed\adddotspace a kom\adddot}}, + editorsco = {{editor a koment\'atoři}% + {ed\adddotspace a kom\adddot}}, + editoran = {{editor a anot\'ator}% + {ed\adddotspace a anot\adddot}}, + editorsan = {{editor a anot\'atoři}% + {ed\adddotspace a anot\adddot}}, + editorin = {{editor a \'uvod}% + {ed\adddotspace úv\adddot}}, + editorsin = {{editoři a úvod}% + {ed\adddotspace a úv\adddot}}, + editorfo = {{editor a předmluva}% + {ed\adddotspace a forew\adddot}}, + editorsfo = {{editoři a předmluva}% + {ed\adddotspace a forew\adddot}}, + editoraf = {{editor a doslov}% + {ed\adddotspace a doslov\adddot}}, + editorsaf = {{editoři a doslov}% + {ed\adddotspace a dosl\adddot}}, + editortrco = {{editor, překladatel a komentátor}% + {ed.,\addabbrvspace překl\adddot\ a comm\adddot}}, + editorstrco = {{editoři, překladatel\'e\ a koment\'atoři}% + {eds.,\addabbrvspace překl\adddot\ a comm\adddot}}, + editortran = {{editor, překladatel a koment\'ator}% + {ed.,\addabbrvspace překl\adddot\ a anot\adddot}}, + editorstran = {{editors, translators\ a annotators}% + {ed.,\addabbrvspace překl\adddot\ a anot\adddot}}, + editortrin = {{editor, translator\ a úvod}% + {ed.,\addabbrvspace překl\adddot\ a introd\adddot}}, + editorstrin = {{editors, translators\ a úvod}% + {ed.,\addabbrvspace překl\adddot\ a introd\adddot}}, + editortrfo = {{editor, translator\ a předmluva}% + {ed.,\addabbrvspace překl\adddot\ a forew\adddot}}, + editorstrfo = {{editors, translators\ a předmluva}% + {ed.,\addabbrvspace překl\adddot\ a forew\adddot}}, + editortraf = {{editor, translator\ a doslov}% + {ed.,\addabbrvspace překl\adddot\ a afterw\adddot}}, + editorstraf = {{editors, translators\ a doslov}% + {ed.,\addabbrvspace překl\adddot\ a afterw\adddot}}, + editorcoin = {{editor, commentator\ a úvod}% + {ed.,\addabbrvspace comm\adddot\ a introd\adddot}}, + editorscoin = {{editors, commentators\ a úvod}% + {ed.,\addabbrvspace comm\adddot\ a introd\adddot}}, + editorcofo = {{editor, commentator\ a předmluva}% + {ed.,\addabbrvspace comm\adddot\ a forew\adddot}}, + editorscofo = {{editors, commentators\ a předmluva}% + {ed.,\addabbrvspace comm\adddot\ a forew\adddot}}, + editorcoaf = {{editor, commentator\ a doslov}% + {ed.,\addabbrvspace comm\adddot\ a dosl\adddot}}, + editorscoaf = {{editors, commentators\ a doslov}% + {ed.,\addabbrvspace comm\adddot\ a dosl\adddot}}, + editoranin = {{editor, annotator\ a úvod}% + {ed.,\addabbrvspace anot\adddot\ a introd\adddot}}, + editorsanin = {{editors, annotators\ a úvod}% + {ed.,\addabbrvspace anot\adddot\ a introd\adddot}}, + editoranfo = {{editor, annotator\ a předmluva}% + {ed.,\addabbrvspace anot\adddot\ a forew\adddot}}, + editorsanfo = {{editors, annotators\ a předmluva}% + {ed.,\addabbrvspace anot\adddot\ a forew\adddot}}, + editoranaf = {{editor, annotator\ a doslov}% + {ed.,\addabbrvspace anot\adddot\ a dosl\adddot}}, + editorsanaf = {{editors, annotators\ a doslov}% + {ed.,\addabbrvspace anot\adddot\ a dosl\adddot}}, + editortrcoin = {{editor, překladatel, commentator\ a úvod}% + {ed.,\addabbrvspace trans., comm\adddot\ a introd\adddot}}, + editorstrcoin = {{editors, překladatelé, commentators\ a úvod}% + {ed.,\addabbrvspace trans., comm\adddot\ a introd\adddot}}, + editortrcofo = {{editor, překladatel, commentator\ a předmluva}% + {ed.,\addabbrvspace trans., comm\adddot\ a forew\adddot}}, + editorstrcofo = {{editors, překladatelé, commentators\ a předmluva}% + {ed.,\addabbrvspace trans., comm\adddot\ a forew\adddot}}, + editortrcoaf = {{editor, překladatel, commentator\ a doslov}% + {ed.,\addabbrvspace trans., comm\adddot\ a dosl\adddot}}, + editorstrcoaf = {{editors, překladatelé, commentators\ a doslov}% + {ed.,\addabbrvspace trans., comm\adddot\ a dosl\adddot}}, + editortranin = {{editor, překladatel, annotator\ a úvod}% + {ed.,\addabbrvspace trans., anot\adddot\ a introd\adddot}}, + editorstranin = {{editors, překladatelé, annotators\ a úvod}% + {ed.,\addabbrvspace trans., anot\adddot\ a introd\adddot}}, + editortranfo = {{editor, překladatel, annotator\ a předmluva}% + {ed.,\addabbrvspace trans., anot\adddot\ a forew\adddot}}, + editorstranfo = {{editors, překladatelé, annotators\ a předmluva}% + {ed.,\addabbrvspace trans., anot\adddot\ a forew\adddot}}, + editortranaf = {{editor, překladatel, annotator\ a doslov}% + {ed.,\addabbrvspace trans., anot\adddot\ a dosl\adddot}}, + editorstranaf = {{editors, překladatelé, annotators\ a doslov}% + {ed.,\addabbrvspace trans., anot\adddot\ a dosl\adddot}}, + translatorco = {{překladatel a komentátor}% + {překl\adddot\ a comm\adddot}}, + translatorsco = {{překladatelé a komentátoři}% + {překl\adddot\ a comm\adddot}}, + translatoran = {{překladatel a annotator}% + {překl\adddot\ a anot\adddot}}, + translatorsan = {{překladatelé a annotators}% + {překl\adddot\ a anot\adddot}}, + translatorin = {{překlad a úvod}% + {překl\adddot\ a introd\adddot}}, + translatorsin = {{překlad a úvod}% + {překl\adddot\ a introd\adddot}}, + translatorfo = {{překlad a předmluva}% + {překl\adddot\ a forew\adddot}}, + translatorsfo = {{překlad a předmluva}% + {překl\adddot\ a forew\adddot}}, + translatoraf = {{překlad a doslov}% + {překl\adddot\ a dosl\adddot}}, + translatorsaf = {{překlad a doslov}% + {překl\adddot\ a dosl\adddot}}, + translatorcoin = {{překlad, commentary\ a úvod}% + {trans., comm\adddot\ a introd\adddot}}, + translatorscoin = {{překlad, commentary\ a úvod}% + {trans., comm\adddot\ a introd\adddot}}, + translatorcofo = {{překlad, commentary\ a předmluva}% + {trans., comm\adddot\ a forew\adddot}}, + translatorscofo = {{překlad, commentary\ a předmluva}% + {trans., comm\adddot\ a forew\adddot}}, + translatorcoaf = {{překlad, commentary\ a doslov}% + {trans., comm\adddot\ a dosl\adddot}}, + translatorscoaf = {{překlad, commentary\ a doslov}% + {trans., comm\adddot\ a dosl\adddot}}, + translatoranin = {{překlad, anotace,\ a úvod}% + {trans., anot\adddot\ a introd\adddot}}, + translatorsanin = {{překlad, anotace,\ a úvod}% + {trans., anot\adddot\ a introd\adddot}}, + translatoranfo = {{překlad, anotace,\ a předmluva}% + {trans., anot\adddot\ a forew\adddot}}, + translatorsanfo = {{překlad, anotace,\ a předmluva}% + {trans., anot\adddot\ a forew\adddot}}, + translatoranaf = {{překlad, anotace,\ a doslov}% + {trans., anot\adddot\ a dosl\adddot}}, + translatorsanaf = {{překlad, anotace,\ a doslov}% + {trans., anot\adddot\ a dosl\adddot}}, + byauthor = {{by}{by}}, + byeditor = {{edited by}{ed\adddotspace by}}, + bycompiler = {{compiled by}{comp\adddotspace by}}, + byredactor = {{redacted by}{red\adddotspace by}}, + byfounder = {{founded by}{found\adddotspace by}}, + bycontinuator = {{continued by}{cont\adddotspace by}}, + bycollaborator = {{in collaboration with}{in collab\adddotspace with}}, % FIXME: unsure + bytranslator = {{translated \lbx@lfromlang\ by}{překl\adddot\ \lbx@sfromlang\ by}}, + bycommentator = {{commented by}{comm\adddot\ by}}, + byannotator = {{annotated by}{anot\adddot\ by}}, + withcommentator = {{with a commentary by}{with a comment\adddot\ by}}, + withannotator = {{s anotacemi od}{s anot\adddot\ od}}, + withintroduction = {{s úvodem od}{u úv\adddot\ od}}, + withforeword = {{s předmluvou od}{s předml\adddot\ od}}, + withafterword = {{with an afterword by}{with an dosl\adddot\ by}}, + byeditortr = {{edited a translated \lbx@lfromlang\ by}% + {ed\adddotspace a překl\adddot\ \lbx@sfromlang\ by}}, + byeditorco = {{edited a commented by}% + {ed\adddotspace a kom\adddot\ by}}, + byeditoran = {{edited a annotated by}% + {ed\adddotspace a anot\adddot\ by}}, + byeditorin = {{edited, with an úvod, by}% + {ed.,\addabbrvspace with an introd., by}}, + byeditorfo = {{edited, with a foreword, by}% + {ed.,\addabbrvspace with a forew., by}}, + byeditoraf = {{edited, with an afterword, by}% + {ed.,\addabbrvspace with an afterw., by}}, + byeditortrco = {{edited, translated \lbx@lfromlang\ a commented by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a kom\adddot\ by}}, + byeditortran = {{edited, translated \lbx@lfromlang\ a annotated by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a anot\adddot\ by}}, + byeditortrin = {{edited a translated \lbx@lfromlang, with an úvod, by}% + {ed\adddotspace a překl\adddot\ \lbx@sfromlang, with an introd., by}}, + byeditortrfo = {{edited a translated \lbx@lfromlang, with a foreword, by}% + {ed\adddotspace a překl\adddot\ \lbx@sfromlang, with a forew., by}}, + byeditortraf = {{edited a translated \lbx@lfromlang, with an afterword, by}% + {ed\adddotspace a překl\adddot\ \lbx@sfromlang, with an afterw., by}}, + byeditorcoin = {{edited a commented, with an úvod, by}% + {ed\adddotspace a comm., with an introd., by}}, + byeditorcofo = {{edited a commented, with a foreword, by}% + {ed\adddotspace a comm., with a forew., by}}, + byeditorcoaf = {{edited a commented, with an afterword, by}% + {ed\adddotspace a comm., with an afterw., by}}, + byeditoranin = {{edited a annotated, with an úvod, by}% + {ed\adddotspace a annot., with an introd., by}}, + byeditoranfo = {{edited a annotated, with a foreword, by}% + {ed\adddotspace a annot., with a forew., by}}, + byeditoranaf = {{edited a annotated, with an afterword, by}% + {ed\adddotspace a annot., with an afterw., by}}, + byeditortrcoin = {{edited, translated \lbx@lfromlang\ a commented, with an úvod, by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a comm., with an introd., by}}, + byeditortrcofo = {{edited, translated \lbx@lfromlang\ a commented, with a foreword, by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a comm., with a forew., by}}, + byeditortrcoaf = {{edited, translated \lbx@lfromlang\ a commented, with an afterword, by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a comm., with an afterw., by}}, + byeditortranin = {{edited, translated \lbx@lfromlang\ a annotated, with an úvod, by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a annot, with an introd., by}}, + byeditortranfo = {{edited, translated \lbx@lfromlang\ a annotated, with a foreword, by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a annot, with a forew., by}}, + byeditortranaf = {{edited, translated \lbx@lfromlang\ a annotated, with an afterword, by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a annot, with an afterw., by}}, + bytranslatorco = {{translated \lbx@lfromlang\ a commented by}% + {překl\adddot\ \lbx@sfromlang\ a kom\adddot\ by}}, + bytranslatoran = {{translated \lbx@lfromlang\ a annotated by}% + {překl\adddot\ \lbx@sfromlang\ a anot\adddot\ by}}, + bytranslatorin = {{translated \lbx@lfromlang, with an úvod, by}% + {překl\adddot\ \lbx@sfromlang, with an introd., by}}, + bytranslatorfo = {{translated \lbx@lfromlang, with a foreword, by}% + {překl\adddot\ \lbx@sfromlang, with a forew., by}}, + bytranslatoraf = {{translated \lbx@lfromlang, with an afterword, by}% + {překl\adddot\ \lbx@sfromlang, with an afterw., by}}, + bytranslatorcoin = {{translated \lbx@lfromlang\ a commented, with an úvod, by}% + {překl\adddot\ \lbx@sfromlang\ a comm., with an introd., by}}, + bytranslatorcofo = {{translated \lbx@lfromlang\ a commented, with a foreword, by}% + {překl\adddot\ \lbx@sfromlang\ a comm., with a forew., by}}, + bytranslatorcoaf = {{translated \lbx@lfromlang\ a commented, with an afterword, by}% + {překl\adddot\ \lbx@sfromlang\ a comm., with an afterw., by}}, + bytranslatoranin = {{translated \lbx@lfromlang\ a annotated, with an úvod, by}% + {překl\adddot\ \lbx@sfromlang\ a annot., with an introd., by}}, + bytranslatoranfo = {{translated \lbx@lfromlang\ a annotated, with a foreword, by}% + {překl\adddot\ \lbx@sfromlang\ a annot., with a forew., by}}, + bytranslatoranaf = {{translated \lbx@lfromlang\ a annotated, with an afterword, by}% + {překl\adddot\ \lbx@sfromlang\ a annot., with an afterw., by}}, + and = {{and}{and}}, + %andothers = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}}, + andmore = {{et\addabbrvspace al\adddot}{et\addabbrvspace al\adddot}}, + %volume = {{volume}{vol\adddot}}, + volumes = {{volumes}{vols\adddot}}, + %jourvol = {{volume}{vol\adddot}}, + jourser = {{series}{ser\adddot}}, + newseries = {{new series}{new ser\adddot}}, + oldseries = {{old series}{old ser\adddot}}, + %edition = {{edition}{ed\adddot}}, + reprint = {{reprint}{repr\adddot}}, + reprintof = {{reprint of}{repr\adddotspace of}}, + reprintas = {{reprinted as}{rpt\adddotspace as}}, + %page = {{page}{p\adddot}}, + %pages = {{pages}{pp\adddot}}, + column = {{column}{col\adddot}}, + columns = {{columns}{cols\adddot}}, + line = {{řádek}{ř\adddot}}, + lines = {{řádky}{ř\adddot}}, + verse = {{verš}{v\adddot}}, + verses = {{verše}{v\adddot}}, + section = {{sekce}{\S}}, + sections = {{secce}{\S\S}}, + paragraph = {{odstavec}{ods\adddot}}, + paragraphs = {{odstavce}{ods\adddot}}, + in = {{in}{in}}, + inseries = {{in}{in}}, + ofseries = {{of}{of}}, + %number = {{number}{no\adddot}}, + chapter = {{kapitola}{kap\adddot}}, + mathesis = {{diplomová práce}{dipl\addabbrvspace práce}}, + phdthesis = {{disertační práce}{dis\addabbrvspace práce}}, + resreport = {{výzkumná zpráca}{výzk\adddot zpr\adddot}}, + techreport = {{technická zpráva}{tech\adddotspace zpr\adddot}}, + software = {{počítačový software}{soft\adddot}}, + datacd = {{CD-ROM}{CD-ROM}}, + audiocd = {{audio CD}{audio CD}}, + version = {{version}{version}}, + %url = {{address}{address}}, + %urlseen = {{visited on}{visited on}}, + inpress = {{in press}{in press}}, + submitted = {{submitted}{submitted}}, + citedas = {{henceforth cited as}{henceforth cited as}}, + thiscite = {{especially}{esp\adddot}}, + seenote = {{viz poznámka}{viz poz\adddot}}, + quotedin = {{quoted in}{qtd\adddotspace in}}, + idem = {{idem}{idem}}, + idemsm = {{idem}{idem}}, + idemsf = {{eadem}{eadem}}, + idemsn = {{idem}{idem}}, + idempm = {{eidem}{eidem}}, + idempf = {{eaedem}{eaedem}}, + idempn = {{eadem}{eadem}}, + idempp = {{eidem}{eidem}}, + ibidem = {{ibidem}{ibid\adddot}}, + opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}}, + loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}}, + confer = {{cf\adddot}{cf\adddot}}, + sequens = {{sq\adddot}{sq\adddot}}, + sequentes = {{sqq\adddot}{sqq\adddot}}, + passim = {{passim}{pass\adddot}}, + see = {{viz}{viz}}, + seealso = {{viz také}{viz také}}, + backrefpage = {{citováno na straně}{cit\adddotspace na s\adddot}}, + backrefpages = {{citováno na stranách}{cit\adddotspace na s\adddot}}, + january = {{ledna}{led\adddot}}, + february = {{února}{ún\adddot}}, + march = {{března}{břez\adddot}}, + april = {{dubna}{dub\adddot}}, + may = {{kvetna}{květ\adddot}}, + june = {{června}{červ\adddot}}, + july = {{července}{čvc}}, + august = {{srpna}{srp\adddot}}, + september = {{září}{zář\adddot}}, + october = {{října}{říj\adddot}}, + november = {{listopadu}{lis\adddot}}, + december = {{prosince}{pros\adddot}}, + langamerican = {{Americká angličtina}{Am\adddot angl\adddot}}, + langbrazilian = {{Brazilská portugalština}{Braz\adddot portugal\adddot}}, + langdanish = {{Dánština}{Dán\adddot}}, + langdutch = {{Holandština}{Hol.\adddot}}, + langenglish = {{Angličtina}{Angl\adddot}}, + langfrench = {{Francouzština}{Franc\adddot}}, + langgerman = {{Němčina}{Něm\adddot}}, + langgreek = {{Řečtina}{Řeč\adddot}}, + langitalian = {{Italština}{Ital\adddot}}, + langlatin = {{Latina}{Lat\adddot}}, + langnorwegian = {{Norština}{Norš\adddot}}, + langportuguese = {{Portugalština}{Port\adddot}}, + langspanish = {{Šanělština}{Špaň\adddot}}, + langswedish = {{Švédština}{Švéd\adddot}}, + fromamerican = {{z americké Angličtiny}{z amer\adddot angl\adddot}}, + frombrazilian = {{z Brazilské Portugalštiny}{z Braz\adddot Port\adddot}}, + fromdanish = {{z Danštiny}{z Dán\adddot}}, + fromdutch = {{z Holandštiny}{z Hol\adddot}}, + fromenglish = {{z Angličtiny}{z Angl\adddot}}, + fromfrench = {{z Francouzštiny}{z Franc\adddot}}, + fromgerman = {{z Němčiny}{z Něm\adddot}}, + fromgreek = {{z Řečtiny}{z Řeč\adddot}}, + fromitalian = {{z Italštiny}{z Ital\adddot}}, + fromlatin = {{z Latiny}{z Lat\adddot}}, + fromnorwegian = {{z Norštiny}{z Nor\adddot}}, + fromportuguese = {{z Portugalštiny}{z Portuguese}}, + fromspanish = {{ze Španělštiny}{ze Špaň\adddot}}, + fromswedish = {{ze Švédštiny}{ze Švéd\adddot}}, + countryde = {{Německo}{DE}}, + countryeu = {{European Union}{EU}}, + countryep = {{European Union}{EP}}, + countryfr = {{Francie}{FR}}, + countryuk = {{Velká Británie}{GB}}, + countryus = {{Spojené Státy Americké}{US}}, + patent = {{patent}{pat\adddot}}, + patentde = {{German patent}{German pat\adddot}}, + patenteu = {{European patent}{European pat\adddot}}, + patentfr = {{French patent}{French pat\adddot}}, + patentuk = {{British patent}{British pat\adddot}}, + patentus = {{U.S\adddotspace patent}{U.S\adddotspace pat\adddot}}, + patreq = {{patent request}{pat\adddot\ req\adddot}}, + patreqde = {{German patent request}{German pat\adddot\ req\adddot}}, + patreqeu = {{European patent request}{European pat\adddot\ req\adddot}}, + patreqfr = {{French patent request}{French pat\adddot\ req\adddot}}, + patrequk = {{British patent request}{British pat\adddot\ req\adddot}}, + patrequs = {{U.S\adddotspace patent request}{U.S\adddotspace pat\adddot\ req\adddot}}, + file = {{soubor}{soub\adddot}}, + library = {{knihovna}{knih\adddot}}, + abstract = {{abstrakt}{abst\adddot}}, + annotation = {{anotace}{anot\adddot}}, +} + + +\endinput diff --git a/english-iso.lbx b/english-iso.lbx new file mode 100644 index 0000000..c8709cb --- /dev/null +++ b/english-iso.lbx @@ -0,0 +1,9 @@ +\ProvidesFile{english-iso.lbx} + +\InheritBibliographyExtras{english} +\InheritBibliographyStrings{english} +\DeclareBibliographyStrings{% + url = {{Available from WWW}{WWW}}, + urlalso={{Available also from WWW}{WWW}}, + urlcomercial={{Available aslo comericaly from WWWW}{Comericial source}} +} diff --git a/graphics/OutboundArchitecture.png b/graphics/OutboundArchitecture.png new file mode 100644 index 0000000..cc512a1 Binary files /dev/null and b/graphics/OutboundArchitecture.png differ diff --git a/graphics/TcpIp.png b/graphics/TcpIp.png new file mode 100644 index 0000000..fe1918b Binary files /dev/null and b/graphics/TcpIp.png differ diff --git a/graphics/UP_znak.pdf b/graphics/UP_znak.pdf new file mode 100644 index 0000000..9025d9e --- /dev/null +++ b/graphics/UP_znak.pdf @@ -0,0 +1,142 @@ +%PDF-1.5 +% +4 0 obj +<< +/Type /Page +/Parent 2 0 R +/Contents 5 0 R +/MediaBox [-1.0000 -1.0000 100.2126 100.2126] +/TrimBox [-1.0000 -1.0000 100.2126 100.2126] +/CropBox [-1.0000 -1.0000 100.2126 100.2126] +/Resources << +/ProcSet [/PDF] +/ExtGState << /GS6 6 0 R /GS8 8 0 R >> +/Properties << /Pr7 7 0 R >> +>> +>> +endobj +5 0 obj +<< +/Length 1531 +>> +stream +1.00000 0.00000 0.00000 1.00000 0.0000 0.0000 cm +/GS6 gs +/OC /Pr7 BDC +/GS8 gs +0 J +0 j +0.0000 w +22.925585626053735 M +[] 0 d +0.90 0.53 0.03 0.00 K +1.00 0.38 0.00 0.15 k +47.5322 14.5681 m +52.8639 22.0799 77.6245 45.4516 84.0645 85.1318 c +68.1146 80.4064 42.5565 81.0541 25.7250 84.6108 c +24.9242 79.4208 19.7637 75.3106 14.4459 74.5829 c +19.2674 43.9809 42.6917 21.7553 47.5322 14.5681 c +h +36.0011 64.4939 m +27.6316 64.4941 l +27.6489 63.9833 l +30.4211 63.8161 31.2077 60.9775 31.6947 56.9568 c +31.9586 54.7773 32.1457 52.3089 32.4420 49.5947 c +32.7285 46.9681 32.9377 44.4900 33.2311 42.2121 c +34.0214 36.0788 37.9185 31.6534 47.6614 31.3132 c +54.8861 31.5388 58.9158 34.1189 60.9426 37.8244 c +62.1584 40.0476 62.5465 42.7306 62.7732 45.4022 c +63.0862 49.0873 63.4680 53.2437 63.8212 56.4180 c +64.3550 61.2113 65.1504 64.2566 68.1344 63.9394 c +68.1330 64.4941 l +59.8221 64.4941 l +58.0280 42.3978 l +57.1652 37.0403 52.3321 34.0645 47.6011 34.3500 c +47.6011 40.6029 47.6011 48.3437 47.6011 54.5964 c +53.4419 54.3141 57.1637 57.2224 57.4914 65.5965 c +57.4914 73.9871 51.9843 75.8928 49.8487 76.0867 c +44.3336 76.1936 34.7117 75.5663 32.3918 76.8203 c +29.4687 73.9845 l +43.2541 73.9845 l +43.2541 34.9449 l +40.3064 35.2500 38.1611 37.5970 37.1100 42.3734 c +h +h +47.6351 73.8431 m +47.6351 56.6274 l +50.5468 56.4616 52.8769 59.1035 53.0762 65.2277 c +53.3296 70.7295 51.5999 74.1382 47.6351 73.8431 c +f* +/GS8 gs +0.0000 99.2126 m +99.2126 99.2126 l +99.2126 0.0000 l +0.0000 0.0000 l +h +n +EMC + +endstream +endobj +7 0 obj +<< +/Type/OCG/Name +>> +endobj +2 0 obj +<< +/Type /Pages +/Kids [4 0 R] +/Count 1 +>> +endobj +1 0 obj +<< +/Type /Catalog +/Pages 2 0 R +/OCProperties<< /D<< /Order[7 0 R ]/ON[7 0 R ]/OFF[]/RBGroups[]>>/OCGs[7 0 R ]>> +>> +endobj +3 0 obj +<< +/CreationDate (D:20141204152803+01'00') +/ModDate (D:20141204152803+01'00') +/Producer +/Author +/Creator +/Title +>> +endobj +6 0 obj +<< +/Type /ExtGState +/RI /RelativeColorimetric +>> +endobj +8 0 obj +<< +/Type /ExtGState +/op false/OP false/OPM 0 +>> +endobj +xref +0 9 +0000000000 65535 f +0000002067 00000 n +0000002003 00000 n +0000002204 00000 n +0000000017 00000 n +0000000333 00000 n +0000002640 00000 n +0000001924 00000 n +0000002710 00000 n +trailer +<< +/Size 9 +/Root 1 0 R +/Info 3 0 R +/ID [] +>> +startxref +2780 +%%EOF \ No newline at end of file diff --git a/graphics/UP_znak.ps b/graphics/UP_znak.ps new file mode 100644 index 0000000..98657c0 --- /dev/null +++ b/graphics/UP_znak.ps @@ -0,0 +1,499 @@ +%!PS-Adobe-3.0 +%Produced by poppler pdftops version: 0.18.4 (http://poppler.freedesktop.org) +%%Creator: CorelDRAW X6 +%%LanguageLevel: 2 +%%DocumentSuppliedResources: (atend) +%%DocumentMedia: plain 102 102 0 () () +%%BoundingBox: 0 0 102 102 +%%Pages: 1 +%%EndComments +%%BeginDefaults +%%PageMedia: plain +%%EndDefaults +%%BeginProlog +%%BeginResource: procset xpdf 3.00 0 +%%Copyright: Copyright 1996-2004 Glyph & Cog, LLC +/xpdf 75 dict def xpdf begin +% PDF special state +/pdfDictSize 15 def +/pdfSetup { + 3 1 roll 2 array astore + /setpagedevice where { + pop 3 dict begin + /PageSize exch def + /ImagingBBox null def + /Policies 1 dict dup begin /PageSize 3 def end def + { /Duplex true def } if + currentdict end setpagedevice + } { + pop pop + } ifelse +} def +/pdfStartPage { + pdfDictSize dict begin + /pdfFillCS [] def + /pdfFillXform {} def + /pdfStrokeCS [] def + /pdfStrokeXform {} def + /pdfFill [0] def + /pdfStroke [0] def + /pdfFillOP false def + /pdfStrokeOP false def + /pdfLastFill false def + /pdfLastStroke false def + /pdfTextMat [1 0 0 1 0 0] def + /pdfFontSize 0 def + /pdfCharSpacing 0 def + /pdfTextRender 0 def + /pdfPatternCS false def + /pdfTextRise 0 def + /pdfWordSpacing 0 def + /pdfHorizScaling 1 def + /pdfTextClipPath [] def +} def +/pdfEndPage { end } def +% PDF color state +/cs { /pdfFillXform exch def dup /pdfFillCS exch def + setcolorspace } def +/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def + setcolorspace } def +/sc { pdfLastFill not { pdfFillCS setcolorspace } if + dup /pdfFill exch def aload pop pdfFillXform setcolor + /pdfLastFill true def /pdfLastStroke false def } def +/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if + dup /pdfStroke exch def aload pop pdfStrokeXform setcolor + /pdfLastStroke true def /pdfLastFill false def } def +/op { /pdfFillOP exch def + pdfLastFill { pdfFillOP setoverprint } if } def +/OP { /pdfStrokeOP exch def + pdfLastStroke { pdfStrokeOP setoverprint } if } def +/fCol { + pdfLastFill not { + pdfFillCS setcolorspace + pdfFill aload pop pdfFillXform setcolor + pdfFillOP setoverprint + /pdfLastFill true def /pdfLastStroke false def + } if +} def +/sCol { + pdfLastStroke not { + pdfStrokeCS setcolorspace + pdfStroke aload pop pdfStrokeXform setcolor + pdfStrokeOP setoverprint + /pdfLastStroke true def /pdfLastFill false def + } if +} def +% build a font +/pdfMakeFont { + 4 3 roll findfont + 4 2 roll matrix scale makefont + dup length dict begin + { 1 index /FID ne { def } { pop pop } ifelse } forall + /Encoding exch def + currentdict + end + definefont pop +} def +/pdfMakeFont16 { + exch findfont + dup length dict begin + { 1 index /FID ne { def } { pop pop } ifelse } forall + /WMode exch def + currentdict + end + definefont pop +} def +% graphics state operators +/q { gsave pdfDictSize dict begin } def +/Q { + end grestore + /pdfLastFill where { + pop + pdfLastFill { + pdfFillOP setoverprint + } { + pdfStrokeOP setoverprint + } ifelse + } if +} def +/cm { concat } def +/d { setdash } def +/i { setflat } def +/j { setlinejoin } def +/J { setlinecap } def +/M { setmiterlimit } def +/w { setlinewidth } def +% path segment operators +/m { moveto } def +/l { lineto } def +/c { curveto } def +/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath } def +/h { closepath } def +% path painting operators +/S { sCol stroke } def +/Sf { fCol stroke } def +/f { fCol fill } def +/f* { fCol eofill } def +% clipping operators +/W { clip newpath } def +/W* { eoclip newpath } def +/Ws { strokepath clip newpath } def +% text state operators +/Tc { /pdfCharSpacing exch def } def +/Tf { dup /pdfFontSize exch def + dup pdfHorizScaling mul exch matrix scale + pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put + exch findfont exch makefont setfont } def +/Tr { /pdfTextRender exch def } def +/Tp { /pdfPatternCS exch def } def +/Ts { /pdfTextRise exch def } def +/Tw { /pdfWordSpacing exch def } def +/Tz { /pdfHorizScaling exch def } def +% text positioning operators +/Td { pdfTextMat transform moveto } def +/Tm { /pdfTextMat exch def } def +% text string operators +/cshow where { + pop + /cshow2 { + dup { + pop pop + 1 string dup 0 3 index put 3 index exec + } exch cshow + pop pop + } def +}{ + /cshow2 { + currentfont /FontType get 0 eq { + 0 2 2 index length 1 sub { + 2 copy get exch 1 add 2 index exch get + 2 copy exch 256 mul add + 2 string dup 0 6 5 roll put dup 1 5 4 roll put + 3 index exec + } for + } { + dup { + 1 string dup 0 3 index put 3 index exec + } forall + } ifelse + pop pop + } def +} ifelse +/awcp { + exch { + false charpath + 5 index 5 index rmoveto + 6 index eq { 7 index 7 index rmoveto } if + } exch cshow2 + 6 {pop} repeat +} def +/Tj { + fCol + 1 index stringwidth pdfTextMat idtransform pop + sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse + pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 + 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 + pdfTextMat dtransform + 6 5 roll Tj1 +} def +/Tj16 { + fCol + 2 index stringwidth pdfTextMat idtransform pop + sub exch div + pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 + 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 + pdfTextMat dtransform + 6 5 roll Tj1 +} def +/Tj16V { + fCol + 2 index stringwidth pdfTextMat idtransform exch pop + sub exch div + 0 pdfWordSpacing pdfTextMat dtransform 32 + 4 3 roll pdfCharSpacing add 0 exch + pdfTextMat dtransform + 6 5 roll Tj1 +} def +/Tj1 { + 0 pdfTextRise pdfTextMat dtransform rmoveto + currentpoint 8 2 roll + pdfTextRender 1 and 0 eq pdfPatternCS not and { + 6 copy awidthshow + } if + pdfTextRender 3 and dup 1 eq exch 2 eq or { + 7 index 7 index moveto + 6 copy + currentfont /FontType get 3 eq { fCol } { sCol } ifelse + false awcp currentpoint stroke moveto + } if + pdfTextRender 4 and 0 ne pdfPatternCS or { + 8 6 roll moveto + false awcp + /pdfTextClipPath [ pdfTextClipPath aload pop + {/moveto cvx} + {/lineto cvx} + {/curveto cvx} + {/closepath cvx} + pathforall ] def + currentpoint newpath moveto + } { + 8 {pop} repeat + } ifelse + 0 pdfTextRise neg pdfTextMat dtransform rmoveto +} def +/TJm { pdfFontSize 0.001 mul mul neg 0 + pdfTextMat dtransform rmoveto } def +/TJmV { pdfFontSize 0.001 mul mul neg 0 exch + pdfTextMat dtransform rmoveto } def +/Tclip { pdfTextClipPath cvx exec clip newpath + /pdfTextClipPath [] def } def +/Tclip* { pdfTextClipPath cvx exec eoclip newpath + /pdfTextClipPath [] def } def +% Level 2 image operators +/pdfImBuf 100 string def +/pdfIm { + image + { currentfile pdfImBuf readline + not { pop exit } if + (%-EOD-) eq { exit } if } loop +} def +/pdfImM { + fCol imagemask + { currentfile pdfImBuf readline + not { pop exit } if + (%-EOD-) eq { exit } if } loop +} def +/pr { 2 index 2 index 3 2 roll putinterval 4 add } def +/pdfImClip { + gsave + 0 2 4 index length 1 sub { + dup 4 index exch 2 copy + get 5 index div put + 1 add 3 index exch 2 copy + get 3 index div put + } for + pop pop rectclip +} def +/pdfImClipEnd { grestore } def +% shading operators +/colordelta { + false 0 1 3 index length 1 sub { + dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { + pop true + } if + } for + exch pop exch pop +} def +/funcCol { func n array astore } def +/funcSH { + dup 0 eq { + true + } { + dup 6 eq { + false + } { + 4 index 4 index funcCol dup + 6 index 4 index funcCol dup + 3 1 roll colordelta 3 1 roll + 5 index 5 index funcCol dup + 3 1 roll colordelta 3 1 roll + 6 index 8 index funcCol dup + 3 1 roll colordelta 3 1 roll + colordelta or or or + } ifelse + } ifelse + { + 1 add + 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch + 6 index 6 index 4 index 4 index 4 index funcSH + 2 index 6 index 6 index 4 index 4 index funcSH + 6 index 2 index 4 index 6 index 4 index funcSH + 5 3 roll 3 2 roll funcSH pop pop + } { + pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul + funcCol sc + dup 4 index exch mat transform m + 3 index 3 index mat transform l + 1 index 3 index mat transform l + mat transform l pop pop h f* + } ifelse +} def +/axialCol { + dup 0 lt { + pop t0 + } { + dup 1 gt { + pop t1 + } { + dt mul t0 add + } ifelse + } ifelse + func n array astore +} def +/axialSH { + dup 0 eq { + true + } { + dup 8 eq { + false + } { + 2 index axialCol 2 index axialCol colordelta + } ifelse + } ifelse + { + 1 add 3 1 roll 2 copy add 0.5 mul + dup 4 3 roll exch 4 index axialSH + exch 3 2 roll axialSH + } { + pop 2 copy add 0.5 mul + axialCol sc + exch dup dx mul x0 add exch dy mul y0 add + 3 2 roll dup dx mul x0 add exch dy mul y0 add + dx abs dy abs ge { + 2 copy yMin sub dy mul dx div add yMin m + yMax sub dy mul dx div add yMax l + 2 copy yMax sub dy mul dx div add yMax l + yMin sub dy mul dx div add yMin l + h f* + } { + exch 2 copy xMin sub dx mul dy div add xMin exch m + xMax sub dx mul dy div add xMax exch l + exch 2 copy xMax sub dx mul dy div add xMax exch l + xMin sub dx mul dy div add xMin exch l + h f* + } ifelse + } ifelse +} def +/radialCol { + dup t0 lt { + pop t0 + } { + dup t1 gt { + pop t1 + } if + } ifelse + func n array astore +} def +/radialSH { + dup 0 eq { + true + } { + dup 8 eq { + false + } { + 2 index dt mul t0 add radialCol + 2 index dt mul t0 add radialCol colordelta + } ifelse + } ifelse + { + 1 add 3 1 roll 2 copy add 0.5 mul + dup 4 3 roll exch 4 index radialSH + exch 3 2 roll radialSH + } { + pop 2 copy add 0.5 mul dt mul t0 add + radialCol sc + encl { + exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + 0 360 arc h + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + 360 0 arcn h f + } { + 2 copy + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a1 a2 arcn + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a2 a1 arcn h + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a1 a2 arc + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a2 a1 arc h f + } ifelse + } ifelse +} def +end +%%EndResource +%%EndProlog +%%BeginSetup +xpdf begin +102 102 false pdfSetup +%%EndSetup +%%Page: 1 1 +%%BeginPageSetup +%%PageOrientation: Portrait +pdfStartPage +1 1 translate +-1 -1 102 102 re W +%%EndPageSetup +[] 0 d +1 i +0 j +0 J +10 M +1 w +/DeviceGray {} cs +[0] sc +/DeviceGray {} CS +[0] SC +false op +false OP +{} settransfer +q +[1 0 0 1 0 0] cm +false op +false OP +0 J +0 j +0 w +22.925586 M +[] 0 d +/DeviceCMYK {} CS +[0.9 0.53 0.03 0] SC +/DeviceCMYK {} cs +[1 0.38 0 0.15] sc +47.5322 14.5681 m +52.8639 22.0799 77.6245 45.4516 84.0645 85.1318 c +68.1146 80.4064 42.5565 81.0541 25.725 84.6108 c +24.9242 79.4208 19.7637 75.3106 14.4459 74.5829 c +19.2674 43.9809 42.6917 21.7553 47.5322 14.5681 c +h +36.0011 64.4939 m +27.6316 64.4941 l +27.6489 63.9833 l +30.4211 63.8161 31.2077 60.9775 31.6947 56.9568 c +31.9586 54.7773 32.1457 52.3089 32.442 49.5947 c +32.7285 46.9681 32.9377 44.49 33.2311 42.2121 c +34.0214 36.0788 37.9185 31.6534 47.6614 31.3132 c +54.8861 31.5388 58.9158 34.1189 60.9426 37.8244 c +62.1584 40.0476 62.5465 42.7306 62.7732 45.4022 c +63.0862 49.0873 63.468 53.2437 63.8212 56.418 c +64.355 61.2113 65.1504 64.2566 68.1344 63.9394 c +68.133 64.4941 l +59.8221 64.4941 l +58.028 42.3978 l +57.1652 37.0403 52.3321 34.0645 47.6011 34.35 c +47.6011 40.6029 47.6011 48.3437 47.6011 54.5964 c +53.4419 54.3141 57.1637 57.2224 57.4914 65.5965 c +57.4914 73.9871 51.9843 75.8928 49.8487 76.0867 c +44.3336 76.1936 34.7117 75.5663 32.3918 76.8203 c +29.4687 73.9845 l +43.2541 73.9845 l +43.2541 34.9449 l +40.3064 35.25 38.1611 37.597 37.11 42.3734 c +36.0011 64.4939 l +h +47.6351 73.8431 m +47.6351 56.6274 l +50.5468 56.4616 52.8769 59.1035 53.0762 65.2277 c +53.3296 70.7295 51.5999 74.1382 47.6351 73.8431 c +f* +false op +false OP +Q +showpage +%%PageTrailer +pdfEndPage +%%Trailer +end +%%DocumentSuppliedResources: +%%EOF diff --git a/graphics/UP_znak_cerna.pdf b/graphics/UP_znak_cerna.pdf new file mode 100644 index 0000000..0b3cb1f --- /dev/null +++ b/graphics/UP_znak_cerna.pdf @@ -0,0 +1,142 @@ +%PDF-1.5 +% +4 0 obj +<< +/Type /Page +/Parent 2 0 R +/Contents 5 0 R +/MediaBox [-1.0000 -1.0000 100.2126 100.2126] +/TrimBox [-1.0000 -1.0000 100.2126 100.2126] +/CropBox [-1.0000 -1.0000 100.2126 100.2126] +/Resources << +/ProcSet [/PDF] +/ExtGState << /GS6 6 0 R /GS8 8 0 R >> +/Properties << /Pr7 7 0 R >> +>> +>> +endobj +5 0 obj +<< +/Length 1531 +>> +stream +1.00000 0.00000 0.00000 1.00000 0.0000 0.0000 cm +/GS6 gs +/OC /Pr7 BDC +/GS8 gs +0 J +0 j +0.0000 w +22.925585626053735 M +[] 0 d +0.90 0.53 0.03 0.00 K +0.00 0.00 0.00 1.00 k +47.5322 14.5681 m +52.8639 22.0799 77.6245 45.4516 84.0645 85.1318 c +68.1146 80.4064 42.5565 81.0541 25.7250 84.6108 c +24.9242 79.4208 19.7637 75.3106 14.4459 74.5829 c +19.2674 43.9809 42.6917 21.7553 47.5322 14.5681 c +h +36.0011 64.4939 m +27.6316 64.4941 l +27.6489 63.9833 l +30.4211 63.8161 31.2077 60.9775 31.6947 56.9568 c +31.9586 54.7773 32.1457 52.3089 32.4420 49.5947 c +32.7285 46.9681 32.9377 44.4900 33.2311 42.2121 c +34.0214 36.0788 37.9185 31.6534 47.6614 31.3132 c +54.8861 31.5388 58.9158 34.1189 60.9426 37.8244 c +62.1584 40.0476 62.5465 42.7306 62.7732 45.4022 c +63.0862 49.0873 63.4680 53.2437 63.8212 56.4180 c +64.3550 61.2113 65.1504 64.2566 68.1344 63.9394 c +68.1330 64.4941 l +59.8221 64.4941 l +58.0280 42.3978 l +57.1652 37.0403 52.3321 34.0645 47.6011 34.3500 c +47.6011 40.6029 47.6011 48.3437 47.6011 54.5964 c +53.4419 54.3141 57.1637 57.2224 57.4914 65.5965 c +57.4914 73.9871 51.9843 75.8928 49.8487 76.0867 c +44.3336 76.1936 34.7117 75.5663 32.3918 76.8203 c +29.4687 73.9845 l +43.2541 73.9845 l +43.2541 34.9449 l +40.3064 35.2500 38.1611 37.5970 37.1100 42.3734 c +h +h +47.6351 73.8431 m +47.6351 56.6274 l +50.5468 56.4616 52.8769 59.1035 53.0762 65.2277 c +53.3296 70.7295 51.5999 74.1382 47.6351 73.8431 c +f* +/GS8 gs +0.0000 99.2126 m +99.2126 99.2126 l +99.2126 0.0000 l +0.0000 0.0000 l +h +n +EMC + +endstream +endobj +7 0 obj +<< +/Type/OCG/Name +>> +endobj +2 0 obj +<< +/Type /Pages +/Kids [4 0 R] +/Count 1 +>> +endobj +1 0 obj +<< +/Type /Catalog +/Pages 2 0 R +/OCProperties<< /D<< /Order[7 0 R ]/ON[7 0 R ]/OFF[]/RBGroups[]>>/OCGs[7 0 R ]>> +>> +endobj +3 0 obj +<< +/CreationDate (D:20141204152817+01'00') +/ModDate (D:20141204152817+01'00') +/Producer +/Author +/Creator +/Title +>> +endobj +6 0 obj +<< +/Type /ExtGState +/RI /RelativeColorimetric +>> +endobj +8 0 obj +<< +/Type /ExtGState +/op false/OP false/OPM 0 +>> +endobj +xref +0 9 +0000000000 65535 f +0000002067 00000 n +0000002003 00000 n +0000002204 00000 n +0000000017 00000 n +0000000333 00000 n +0000002640 00000 n +0000001924 00000 n +0000002710 00000 n +trailer +<< +/Size 9 +/Root 1 0 R +/Info 3 0 R +/ID [] +>> +startxref +2780 +%%EOF \ No newline at end of file diff --git a/graphics/UP_znak_cerna.ps b/graphics/UP_znak_cerna.ps new file mode 100644 index 0000000..1327b01 --- /dev/null +++ b/graphics/UP_znak_cerna.ps @@ -0,0 +1,499 @@ +%!PS-Adobe-3.0 +%Produced by poppler pdftops version: 0.18.4 (http://poppler.freedesktop.org) +%%Creator: CorelDRAW X6 +%%LanguageLevel: 2 +%%DocumentSuppliedResources: (atend) +%%DocumentMedia: plain 102 102 0 () () +%%BoundingBox: 0 0 102 102 +%%Pages: 1 +%%EndComments +%%BeginDefaults +%%PageMedia: plain +%%EndDefaults +%%BeginProlog +%%BeginResource: procset xpdf 3.00 0 +%%Copyright: Copyright 1996-2004 Glyph & Cog, LLC +/xpdf 75 dict def xpdf begin +% PDF special state +/pdfDictSize 15 def +/pdfSetup { + 3 1 roll 2 array astore + /setpagedevice where { + pop 3 dict begin + /PageSize exch def + /ImagingBBox null def + /Policies 1 dict dup begin /PageSize 3 def end def + { /Duplex true def } if + currentdict end setpagedevice + } { + pop pop + } ifelse +} def +/pdfStartPage { + pdfDictSize dict begin + /pdfFillCS [] def + /pdfFillXform {} def + /pdfStrokeCS [] def + /pdfStrokeXform {} def + /pdfFill [0] def + /pdfStroke [0] def + /pdfFillOP false def + /pdfStrokeOP false def + /pdfLastFill false def + /pdfLastStroke false def + /pdfTextMat [1 0 0 1 0 0] def + /pdfFontSize 0 def + /pdfCharSpacing 0 def + /pdfTextRender 0 def + /pdfPatternCS false def + /pdfTextRise 0 def + /pdfWordSpacing 0 def + /pdfHorizScaling 1 def + /pdfTextClipPath [] def +} def +/pdfEndPage { end } def +% PDF color state +/cs { /pdfFillXform exch def dup /pdfFillCS exch def + setcolorspace } def +/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def + setcolorspace } def +/sc { pdfLastFill not { pdfFillCS setcolorspace } if + dup /pdfFill exch def aload pop pdfFillXform setcolor + /pdfLastFill true def /pdfLastStroke false def } def +/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if + dup /pdfStroke exch def aload pop pdfStrokeXform setcolor + /pdfLastStroke true def /pdfLastFill false def } def +/op { /pdfFillOP exch def + pdfLastFill { pdfFillOP setoverprint } if } def +/OP { /pdfStrokeOP exch def + pdfLastStroke { pdfStrokeOP setoverprint } if } def +/fCol { + pdfLastFill not { + pdfFillCS setcolorspace + pdfFill aload pop pdfFillXform setcolor + pdfFillOP setoverprint + /pdfLastFill true def /pdfLastStroke false def + } if +} def +/sCol { + pdfLastStroke not { + pdfStrokeCS setcolorspace + pdfStroke aload pop pdfStrokeXform setcolor + pdfStrokeOP setoverprint + /pdfLastStroke true def /pdfLastFill false def + } if +} def +% build a font +/pdfMakeFont { + 4 3 roll findfont + 4 2 roll matrix scale makefont + dup length dict begin + { 1 index /FID ne { def } { pop pop } ifelse } forall + /Encoding exch def + currentdict + end + definefont pop +} def +/pdfMakeFont16 { + exch findfont + dup length dict begin + { 1 index /FID ne { def } { pop pop } ifelse } forall + /WMode exch def + currentdict + end + definefont pop +} def +% graphics state operators +/q { gsave pdfDictSize dict begin } def +/Q { + end grestore + /pdfLastFill where { + pop + pdfLastFill { + pdfFillOP setoverprint + } { + pdfStrokeOP setoverprint + } ifelse + } if +} def +/cm { concat } def +/d { setdash } def +/i { setflat } def +/j { setlinejoin } def +/J { setlinecap } def +/M { setmiterlimit } def +/w { setlinewidth } def +% path segment operators +/m { moveto } def +/l { lineto } def +/c { curveto } def +/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath } def +/h { closepath } def +% path painting operators +/S { sCol stroke } def +/Sf { fCol stroke } def +/f { fCol fill } def +/f* { fCol eofill } def +% clipping operators +/W { clip newpath } def +/W* { eoclip newpath } def +/Ws { strokepath clip newpath } def +% text state operators +/Tc { /pdfCharSpacing exch def } def +/Tf { dup /pdfFontSize exch def + dup pdfHorizScaling mul exch matrix scale + pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put + exch findfont exch makefont setfont } def +/Tr { /pdfTextRender exch def } def +/Tp { /pdfPatternCS exch def } def +/Ts { /pdfTextRise exch def } def +/Tw { /pdfWordSpacing exch def } def +/Tz { /pdfHorizScaling exch def } def +% text positioning operators +/Td { pdfTextMat transform moveto } def +/Tm { /pdfTextMat exch def } def +% text string operators +/cshow where { + pop + /cshow2 { + dup { + pop pop + 1 string dup 0 3 index put 3 index exec + } exch cshow + pop pop + } def +}{ + /cshow2 { + currentfont /FontType get 0 eq { + 0 2 2 index length 1 sub { + 2 copy get exch 1 add 2 index exch get + 2 copy exch 256 mul add + 2 string dup 0 6 5 roll put dup 1 5 4 roll put + 3 index exec + } for + } { + dup { + 1 string dup 0 3 index put 3 index exec + } forall + } ifelse + pop pop + } def +} ifelse +/awcp { + exch { + false charpath + 5 index 5 index rmoveto + 6 index eq { 7 index 7 index rmoveto } if + } exch cshow2 + 6 {pop} repeat +} def +/Tj { + fCol + 1 index stringwidth pdfTextMat idtransform pop + sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse + pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 + 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 + pdfTextMat dtransform + 6 5 roll Tj1 +} def +/Tj16 { + fCol + 2 index stringwidth pdfTextMat idtransform pop + sub exch div + pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 + 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 + pdfTextMat dtransform + 6 5 roll Tj1 +} def +/Tj16V { + fCol + 2 index stringwidth pdfTextMat idtransform exch pop + sub exch div + 0 pdfWordSpacing pdfTextMat dtransform 32 + 4 3 roll pdfCharSpacing add 0 exch + pdfTextMat dtransform + 6 5 roll Tj1 +} def +/Tj1 { + 0 pdfTextRise pdfTextMat dtransform rmoveto + currentpoint 8 2 roll + pdfTextRender 1 and 0 eq pdfPatternCS not and { + 6 copy awidthshow + } if + pdfTextRender 3 and dup 1 eq exch 2 eq or { + 7 index 7 index moveto + 6 copy + currentfont /FontType get 3 eq { fCol } { sCol } ifelse + false awcp currentpoint stroke moveto + } if + pdfTextRender 4 and 0 ne pdfPatternCS or { + 8 6 roll moveto + false awcp + /pdfTextClipPath [ pdfTextClipPath aload pop + {/moveto cvx} + {/lineto cvx} + {/curveto cvx} + {/closepath cvx} + pathforall ] def + currentpoint newpath moveto + } { + 8 {pop} repeat + } ifelse + 0 pdfTextRise neg pdfTextMat dtransform rmoveto +} def +/TJm { pdfFontSize 0.001 mul mul neg 0 + pdfTextMat dtransform rmoveto } def +/TJmV { pdfFontSize 0.001 mul mul neg 0 exch + pdfTextMat dtransform rmoveto } def +/Tclip { pdfTextClipPath cvx exec clip newpath + /pdfTextClipPath [] def } def +/Tclip* { pdfTextClipPath cvx exec eoclip newpath + /pdfTextClipPath [] def } def +% Level 2 image operators +/pdfImBuf 100 string def +/pdfIm { + image + { currentfile pdfImBuf readline + not { pop exit } if + (%-EOD-) eq { exit } if } loop +} def +/pdfImM { + fCol imagemask + { currentfile pdfImBuf readline + not { pop exit } if + (%-EOD-) eq { exit } if } loop +} def +/pr { 2 index 2 index 3 2 roll putinterval 4 add } def +/pdfImClip { + gsave + 0 2 4 index length 1 sub { + dup 4 index exch 2 copy + get 5 index div put + 1 add 3 index exch 2 copy + get 3 index div put + } for + pop pop rectclip +} def +/pdfImClipEnd { grestore } def +% shading operators +/colordelta { + false 0 1 3 index length 1 sub { + dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { + pop true + } if + } for + exch pop exch pop +} def +/funcCol { func n array astore } def +/funcSH { + dup 0 eq { + true + } { + dup 6 eq { + false + } { + 4 index 4 index funcCol dup + 6 index 4 index funcCol dup + 3 1 roll colordelta 3 1 roll + 5 index 5 index funcCol dup + 3 1 roll colordelta 3 1 roll + 6 index 8 index funcCol dup + 3 1 roll colordelta 3 1 roll + colordelta or or or + } ifelse + } ifelse + { + 1 add + 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch + 6 index 6 index 4 index 4 index 4 index funcSH + 2 index 6 index 6 index 4 index 4 index funcSH + 6 index 2 index 4 index 6 index 4 index funcSH + 5 3 roll 3 2 roll funcSH pop pop + } { + pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul + funcCol sc + dup 4 index exch mat transform m + 3 index 3 index mat transform l + 1 index 3 index mat transform l + mat transform l pop pop h f* + } ifelse +} def +/axialCol { + dup 0 lt { + pop t0 + } { + dup 1 gt { + pop t1 + } { + dt mul t0 add + } ifelse + } ifelse + func n array astore +} def +/axialSH { + dup 0 eq { + true + } { + dup 8 eq { + false + } { + 2 index axialCol 2 index axialCol colordelta + } ifelse + } ifelse + { + 1 add 3 1 roll 2 copy add 0.5 mul + dup 4 3 roll exch 4 index axialSH + exch 3 2 roll axialSH + } { + pop 2 copy add 0.5 mul + axialCol sc + exch dup dx mul x0 add exch dy mul y0 add + 3 2 roll dup dx mul x0 add exch dy mul y0 add + dx abs dy abs ge { + 2 copy yMin sub dy mul dx div add yMin m + yMax sub dy mul dx div add yMax l + 2 copy yMax sub dy mul dx div add yMax l + yMin sub dy mul dx div add yMin l + h f* + } { + exch 2 copy xMin sub dx mul dy div add xMin exch m + xMax sub dx mul dy div add xMax exch l + exch 2 copy xMax sub dx mul dy div add xMax exch l + xMin sub dx mul dy div add xMin exch l + h f* + } ifelse + } ifelse +} def +/radialCol { + dup t0 lt { + pop t0 + } { + dup t1 gt { + pop t1 + } if + } ifelse + func n array astore +} def +/radialSH { + dup 0 eq { + true + } { + dup 8 eq { + false + } { + 2 index dt mul t0 add radialCol + 2 index dt mul t0 add radialCol colordelta + } ifelse + } ifelse + { + 1 add 3 1 roll 2 copy add 0.5 mul + dup 4 3 roll exch 4 index radialSH + exch 3 2 roll radialSH + } { + pop 2 copy add 0.5 mul dt mul t0 add + radialCol sc + encl { + exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + 0 360 arc h + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + 360 0 arcn h f + } { + 2 copy + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a1 a2 arcn + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a2 a1 arcn h + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a1 a2 arc + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a2 a1 arc h f + } ifelse + } ifelse +} def +end +%%EndResource +%%EndProlog +%%BeginSetup +xpdf begin +102 102 false pdfSetup +%%EndSetup +%%Page: 1 1 +%%BeginPageSetup +%%PageOrientation: Portrait +pdfStartPage +1 1 translate +-1 -1 102 102 re W +%%EndPageSetup +[] 0 d +1 i +0 j +0 J +10 M +1 w +/DeviceGray {} cs +[0] sc +/DeviceGray {} CS +[0] SC +false op +false OP +{} settransfer +q +[1 0 0 1 0 0] cm +false op +false OP +0 J +0 j +0 w +22.925586 M +[] 0 d +/DeviceCMYK {} CS +[0.9 0.53 0.03 0] SC +/DeviceCMYK {} cs +[0 0 0 1] sc +47.5322 14.5681 m +52.8639 22.0799 77.6245 45.4516 84.0645 85.1318 c +68.1146 80.4064 42.5565 81.0541 25.725 84.6108 c +24.9242 79.4208 19.7637 75.3106 14.4459 74.5829 c +19.2674 43.9809 42.6917 21.7553 47.5322 14.5681 c +h +36.0011 64.4939 m +27.6316 64.4941 l +27.6489 63.9833 l +30.4211 63.8161 31.2077 60.9775 31.6947 56.9568 c +31.9586 54.7773 32.1457 52.3089 32.442 49.5947 c +32.7285 46.9681 32.9377 44.49 33.2311 42.2121 c +34.0214 36.0788 37.9185 31.6534 47.6614 31.3132 c +54.8861 31.5388 58.9158 34.1189 60.9426 37.8244 c +62.1584 40.0476 62.5465 42.7306 62.7732 45.4022 c +63.0862 49.0873 63.468 53.2437 63.8212 56.418 c +64.355 61.2113 65.1504 64.2566 68.1344 63.9394 c +68.133 64.4941 l +59.8221 64.4941 l +58.028 42.3978 l +57.1652 37.0403 52.3321 34.0645 47.6011 34.35 c +47.6011 40.6029 47.6011 48.3437 47.6011 54.5964 c +53.4419 54.3141 57.1637 57.2224 57.4914 65.5965 c +57.4914 73.9871 51.9843 75.8928 49.8487 76.0867 c +44.3336 76.1936 34.7117 75.5663 32.3918 76.8203 c +29.4687 73.9845 l +43.2541 73.9845 l +43.2541 34.9449 l +40.3064 35.25 38.1611 37.597 37.11 42.3734 c +36.0011 64.4939 l +h +47.6351 73.8431 m +47.6351 56.6274 l +50.5468 56.4616 52.8769 59.1035 53.0762 65.2277 c +53.3296 70.7295 51.5999 74.1382 47.6351 73.8431 c +f* +false op +false OP +Q +showpage +%%PageTrailer +pdfEndPage +%%Trailer +end +%%DocumentSuppliedResources: +%%EOF diff --git a/graphics/UP_znak_outline.pdf b/graphics/UP_znak_outline.pdf new file mode 100644 index 0000000..a5d9614 --- /dev/null +++ b/graphics/UP_znak_outline.pdf @@ -0,0 +1,156 @@ +%PDF-1.5 +% +4 0 obj +<< +/Type /Page +/Parent 2 0 R +/Contents 5 0 R +/MediaBox [-1.0000 -1.0000 100.2126 100.2126] +/TrimBox [-1.0000 -1.0000 100.2126 100.2126] +/CropBox [-1.0000 -1.0000 100.2126 100.2126] +/Resources << +/ProcSet [/PDF] +/ExtGState << /GS6 6 0 R /GS8 8 0 R >> +/Properties << /Pr7 7 0 R >> +>> +>> +endobj +5 0 obj +<< +/Length 2078 +>> +stream +1.00000 0.00000 0.00000 1.00000 0.0000 0.0000 cm +/GS6 gs +/OC /Pr7 BDC +/GS8 gs +0.0000 99.2126 m +99.2126 99.2126 l +99.2126 0.0000 l +0.0000 0.0000 l +h +n +/GS8 gs +0.00 0.00 0.00 1.00 k +48.5529 13.8574 m +48.2474 14.3110 l +47.3335 15.6677 45.7393 17.5788 43.7213 19.9990 c +35.0833 30.3551 19.0054 49.6318 15.0863 74.5041 c +15.0267 74.8851 l +15.4091 74.9378 l +20.9203 75.6918 25.6326 79.8684 26.3701 84.6533 c +26.4314 85.0482 l +26.8220 84.9654 l +35.3597 83.1617 46.1769 82.1273 56.4987 82.1273 c +67.7438 82.1273 77.5998 83.2864 85.0025 85.4793 c +85.5799 85.6500 l +85.4836 85.0555 l +80.0558 51.6132 61.6158 29.6614 52.7545 19.1123 c +51.0559 17.0909 49.7151 15.4942 48.8696 14.3031 c +h +h +15.8939 74.2462 m +19.8819 49.7599 35.7545 30.7312 44.3021 20.4834 c +46.1271 18.2948 47.6079 16.5203 48.5685 15.1750 c +49.4300 16.3310 50.6616 17.7973 52.1756 19.5990 c +60.9415 30.0342 79.1252 51.6798 84.6394 84.5858 c +77.2370 82.4817 67.5261 81.3708 56.4987 81.3708 c +46.2804 81.3708 35.5748 82.3805 27.0490 84.1456 c +26.0957 79.3202 21.4089 75.1569 15.8939 74.2462 c +h +48.6655 73.6475 m +52.6085 73.9417 54.3294 70.5509 54.0768 65.0786 c +53.8787 58.9878 51.5619 56.3598 48.6655 56.5248 c +h +h +69.0525 64.3493 m +60.7867 64.3493 l +59.0017 42.3726 l +58.1443 37.0446 53.3370 34.0843 48.6312 34.3684 c +48.6312 54.5051 l +54.4405 54.2239 58.1420 57.1167 58.4683 65.4454 c +58.4683 73.7906 52.9914 75.6862 50.8669 75.8786 c +45.3818 75.9849 35.8115 75.3613 33.5047 76.6089 c +30.5974 73.7878 l +44.3083 73.7878 l +44.3083 34.9594 l +41.3768 35.2633 39.2428 37.5987 38.1977 42.3479 c +37.0947 64.3490 l +28.7700 64.3493 l +28.7878 63.8410 l +31.5448 63.6744 32.3269 60.8516 32.8116 56.8522 c +33.0741 54.6851 33.2600 52.2300 33.5543 49.5306 c +33.8394 46.9174 34.0472 44.4526 34.3395 42.1872 c +35.1255 36.0882 39.0013 31.6860 48.6918 31.3472 c +55.8777 31.5731 59.8856 34.1379 61.9019 37.8241 c +63.1097 40.0348 63.4961 42.7039 63.7223 45.3611 c +64.0335 49.0260 64.4122 53.1601 64.7646 56.3165 c +65.2944 61.0843 66.0855 64.1129 69.0537 63.7977 c +h +f* +EMC + +endstream +endobj +7 0 obj +<< +/Type/OCG/Name +>> +endobj +2 0 obj +<< +/Type /Pages +/Kids [4 0 R] +/Count 1 +>> +endobj +1 0 obj +<< +/Type /Catalog +/Pages 2 0 R +/OCProperties<< /D<< /Order[7 0 R ]/ON[7 0 R ]/OFF[]/RBGroups[]>>/OCGs[7 0 R ]>> +>> +endobj +3 0 obj +<< +/CreationDate (D:20141208084644+01'00') +/ModDate (D:20141208084644+01'00') +/Producer +/Author +/Creator +/Title +>> +endobj +6 0 obj +<< +/Type /ExtGState +/RI /RelativeColorimetric +>> +endobj +8 0 obj +<< +/Type /ExtGState +/op false/OP false/OPM 0 +>> +endobj +xref +0 9 +0000000000 65535 f +0000002614 00000 n +0000002550 00000 n +0000002751 00000 n +0000000017 00000 n +0000000333 00000 n +0000003187 00000 n +0000002471 00000 n +0000003257 00000 n +trailer +<< +/Size 9 +/Root 1 0 R +/Info 3 0 R +/ID [<25d242e0b3f0c2400b37597f28a5b9e1><25d242e0b3f0c2400b37597f28a5b9e1>] +>> +startxref +3327 +%%EOF \ No newline at end of file diff --git a/graphics/UP_znak_outline.ps b/graphics/UP_znak_outline.ps new file mode 100644 index 0000000..cb2f937 --- /dev/null +++ b/graphics/UP_znak_outline.ps @@ -0,0 +1,513 @@ +%!PS-Adobe-3.0 +%Produced by poppler pdftops version: 0.18.4 (http://poppler.freedesktop.org) +%%Creator: CorelDRAW X6 +%%LanguageLevel: 2 +%%DocumentSuppliedResources: (atend) +%%DocumentMedia: plain 102 102 0 () () +%%BoundingBox: 0 0 102 102 +%%Pages: 1 +%%EndComments +%%BeginDefaults +%%PageMedia: plain +%%EndDefaults +%%BeginProlog +%%BeginResource: procset xpdf 3.00 0 +%%Copyright: Copyright 1996-2004 Glyph & Cog, LLC +/xpdf 75 dict def xpdf begin +% PDF special state +/pdfDictSize 15 def +/pdfSetup { + 3 1 roll 2 array astore + /setpagedevice where { + pop 3 dict begin + /PageSize exch def + /ImagingBBox null def + /Policies 1 dict dup begin /PageSize 3 def end def + { /Duplex true def } if + currentdict end setpagedevice + } { + pop pop + } ifelse +} def +/pdfStartPage { + pdfDictSize dict begin + /pdfFillCS [] def + /pdfFillXform {} def + /pdfStrokeCS [] def + /pdfStrokeXform {} def + /pdfFill [0] def + /pdfStroke [0] def + /pdfFillOP false def + /pdfStrokeOP false def + /pdfLastFill false def + /pdfLastStroke false def + /pdfTextMat [1 0 0 1 0 0] def + /pdfFontSize 0 def + /pdfCharSpacing 0 def + /pdfTextRender 0 def + /pdfPatternCS false def + /pdfTextRise 0 def + /pdfWordSpacing 0 def + /pdfHorizScaling 1 def + /pdfTextClipPath [] def +} def +/pdfEndPage { end } def +% PDF color state +/cs { /pdfFillXform exch def dup /pdfFillCS exch def + setcolorspace } def +/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def + setcolorspace } def +/sc { pdfLastFill not { pdfFillCS setcolorspace } if + dup /pdfFill exch def aload pop pdfFillXform setcolor + /pdfLastFill true def /pdfLastStroke false def } def +/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if + dup /pdfStroke exch def aload pop pdfStrokeXform setcolor + /pdfLastStroke true def /pdfLastFill false def } def +/op { /pdfFillOP exch def + pdfLastFill { pdfFillOP setoverprint } if } def +/OP { /pdfStrokeOP exch def + pdfLastStroke { pdfStrokeOP setoverprint } if } def +/fCol { + pdfLastFill not { + pdfFillCS setcolorspace + pdfFill aload pop pdfFillXform setcolor + pdfFillOP setoverprint + /pdfLastFill true def /pdfLastStroke false def + } if +} def +/sCol { + pdfLastStroke not { + pdfStrokeCS setcolorspace + pdfStroke aload pop pdfStrokeXform setcolor + pdfStrokeOP setoverprint + /pdfLastStroke true def /pdfLastFill false def + } if +} def +% build a font +/pdfMakeFont { + 4 3 roll findfont + 4 2 roll matrix scale makefont + dup length dict begin + { 1 index /FID ne { def } { pop pop } ifelse } forall + /Encoding exch def + currentdict + end + definefont pop +} def +/pdfMakeFont16 { + exch findfont + dup length dict begin + { 1 index /FID ne { def } { pop pop } ifelse } forall + /WMode exch def + currentdict + end + definefont pop +} def +% graphics state operators +/q { gsave pdfDictSize dict begin } def +/Q { + end grestore + /pdfLastFill where { + pop + pdfLastFill { + pdfFillOP setoverprint + } { + pdfStrokeOP setoverprint + } ifelse + } if +} def +/cm { concat } def +/d { setdash } def +/i { setflat } def +/j { setlinejoin } def +/J { setlinecap } def +/M { setmiterlimit } def +/w { setlinewidth } def +% path segment operators +/m { moveto } def +/l { lineto } def +/c { curveto } def +/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath } def +/h { closepath } def +% path painting operators +/S { sCol stroke } def +/Sf { fCol stroke } def +/f { fCol fill } def +/f* { fCol eofill } def +% clipping operators +/W { clip newpath } def +/W* { eoclip newpath } def +/Ws { strokepath clip newpath } def +% text state operators +/Tc { /pdfCharSpacing exch def } def +/Tf { dup /pdfFontSize exch def + dup pdfHorizScaling mul exch matrix scale + pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put + exch findfont exch makefont setfont } def +/Tr { /pdfTextRender exch def } def +/Tp { /pdfPatternCS exch def } def +/Ts { /pdfTextRise exch def } def +/Tw { /pdfWordSpacing exch def } def +/Tz { /pdfHorizScaling exch def } def +% text positioning operators +/Td { pdfTextMat transform moveto } def +/Tm { /pdfTextMat exch def } def +% text string operators +/cshow where { + pop + /cshow2 { + dup { + pop pop + 1 string dup 0 3 index put 3 index exec + } exch cshow + pop pop + } def +}{ + /cshow2 { + currentfont /FontType get 0 eq { + 0 2 2 index length 1 sub { + 2 copy get exch 1 add 2 index exch get + 2 copy exch 256 mul add + 2 string dup 0 6 5 roll put dup 1 5 4 roll put + 3 index exec + } for + } { + dup { + 1 string dup 0 3 index put 3 index exec + } forall + } ifelse + pop pop + } def +} ifelse +/awcp { + exch { + false charpath + 5 index 5 index rmoveto + 6 index eq { 7 index 7 index rmoveto } if + } exch cshow2 + 6 {pop} repeat +} def +/Tj { + fCol + 1 index stringwidth pdfTextMat idtransform pop + sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse + pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 + 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 + pdfTextMat dtransform + 6 5 roll Tj1 +} def +/Tj16 { + fCol + 2 index stringwidth pdfTextMat idtransform pop + sub exch div + pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 + 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 + pdfTextMat dtransform + 6 5 roll Tj1 +} def +/Tj16V { + fCol + 2 index stringwidth pdfTextMat idtransform exch pop + sub exch div + 0 pdfWordSpacing pdfTextMat dtransform 32 + 4 3 roll pdfCharSpacing add 0 exch + pdfTextMat dtransform + 6 5 roll Tj1 +} def +/Tj1 { + 0 pdfTextRise pdfTextMat dtransform rmoveto + currentpoint 8 2 roll + pdfTextRender 1 and 0 eq pdfPatternCS not and { + 6 copy awidthshow + } if + pdfTextRender 3 and dup 1 eq exch 2 eq or { + 7 index 7 index moveto + 6 copy + currentfont /FontType get 3 eq { fCol } { sCol } ifelse + false awcp currentpoint stroke moveto + } if + pdfTextRender 4 and 0 ne pdfPatternCS or { + 8 6 roll moveto + false awcp + /pdfTextClipPath [ pdfTextClipPath aload pop + {/moveto cvx} + {/lineto cvx} + {/curveto cvx} + {/closepath cvx} + pathforall ] def + currentpoint newpath moveto + } { + 8 {pop} repeat + } ifelse + 0 pdfTextRise neg pdfTextMat dtransform rmoveto +} def +/TJm { pdfFontSize 0.001 mul mul neg 0 + pdfTextMat dtransform rmoveto } def +/TJmV { pdfFontSize 0.001 mul mul neg 0 exch + pdfTextMat dtransform rmoveto } def +/Tclip { pdfTextClipPath cvx exec clip newpath + /pdfTextClipPath [] def } def +/Tclip* { pdfTextClipPath cvx exec eoclip newpath + /pdfTextClipPath [] def } def +% Level 2 image operators +/pdfImBuf 100 string def +/pdfIm { + image + { currentfile pdfImBuf readline + not { pop exit } if + (%-EOD-) eq { exit } if } loop +} def +/pdfImM { + fCol imagemask + { currentfile pdfImBuf readline + not { pop exit } if + (%-EOD-) eq { exit } if } loop +} def +/pr { 2 index 2 index 3 2 roll putinterval 4 add } def +/pdfImClip { + gsave + 0 2 4 index length 1 sub { + dup 4 index exch 2 copy + get 5 index div put + 1 add 3 index exch 2 copy + get 3 index div put + } for + pop pop rectclip +} def +/pdfImClipEnd { grestore } def +% shading operators +/colordelta { + false 0 1 3 index length 1 sub { + dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { + pop true + } if + } for + exch pop exch pop +} def +/funcCol { func n array astore } def +/funcSH { + dup 0 eq { + true + } { + dup 6 eq { + false + } { + 4 index 4 index funcCol dup + 6 index 4 index funcCol dup + 3 1 roll colordelta 3 1 roll + 5 index 5 index funcCol dup + 3 1 roll colordelta 3 1 roll + 6 index 8 index funcCol dup + 3 1 roll colordelta 3 1 roll + colordelta or or or + } ifelse + } ifelse + { + 1 add + 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch + 6 index 6 index 4 index 4 index 4 index funcSH + 2 index 6 index 6 index 4 index 4 index funcSH + 6 index 2 index 4 index 6 index 4 index funcSH + 5 3 roll 3 2 roll funcSH pop pop + } { + pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul + funcCol sc + dup 4 index exch mat transform m + 3 index 3 index mat transform l + 1 index 3 index mat transform l + mat transform l pop pop h f* + } ifelse +} def +/axialCol { + dup 0 lt { + pop t0 + } { + dup 1 gt { + pop t1 + } { + dt mul t0 add + } ifelse + } ifelse + func n array astore +} def +/axialSH { + dup 0 eq { + true + } { + dup 8 eq { + false + } { + 2 index axialCol 2 index axialCol colordelta + } ifelse + } ifelse + { + 1 add 3 1 roll 2 copy add 0.5 mul + dup 4 3 roll exch 4 index axialSH + exch 3 2 roll axialSH + } { + pop 2 copy add 0.5 mul + axialCol sc + exch dup dx mul x0 add exch dy mul y0 add + 3 2 roll dup dx mul x0 add exch dy mul y0 add + dx abs dy abs ge { + 2 copy yMin sub dy mul dx div add yMin m + yMax sub dy mul dx div add yMax l + 2 copy yMax sub dy mul dx div add yMax l + yMin sub dy mul dx div add yMin l + h f* + } { + exch 2 copy xMin sub dx mul dy div add xMin exch m + xMax sub dx mul dy div add xMax exch l + exch 2 copy xMax sub dx mul dy div add xMax exch l + xMin sub dx mul dy div add xMin exch l + h f* + } ifelse + } ifelse +} def +/radialCol { + dup t0 lt { + pop t0 + } { + dup t1 gt { + pop t1 + } if + } ifelse + func n array astore +} def +/radialSH { + dup 0 eq { + true + } { + dup 8 eq { + false + } { + 2 index dt mul t0 add radialCol + 2 index dt mul t0 add radialCol colordelta + } ifelse + } ifelse + { + 1 add 3 1 roll 2 copy add 0.5 mul + dup 4 3 roll exch 4 index radialSH + exch 3 2 roll radialSH + } { + pop 2 copy add 0.5 mul dt mul t0 add + radialCol sc + encl { + exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + 0 360 arc h + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + 360 0 arcn h f + } { + 2 copy + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a1 a2 arcn + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a2 a1 arcn h + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a1 a2 arc + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a2 a1 arc h f + } ifelse + } ifelse +} def +end +%%EndResource +%%EndProlog +%%BeginSetup +xpdf begin +102 102 false pdfSetup +%%EndSetup +%%Page: 1 1 +%%BeginPageSetup +%%PageOrientation: Portrait +pdfStartPage +1 1 translate +-1 -1 102 102 re W +%%EndPageSetup +[] 0 d +1 i +0 j +0 J +10 M +1 w +/DeviceGray {} cs +[0] sc +/DeviceGray {} CS +[0] SC +false op +false OP +{} settransfer +q +[1 0 0 1 0 0] cm +false op +false OP +false op +false OP +/DeviceCMYK {} cs +[0 0 0 1] sc +48.5529 13.8574 m +48.2474 14.311 l +47.3335 15.6677 45.7393 17.5788 43.7213 19.999 c +35.0833 30.3551 19.0054 49.6318 15.0863 74.5041 c +15.0267 74.8851 l +15.4091 74.9378 l +20.9203 75.6918 25.6326 79.8684 26.3701 84.6533 c +26.4314 85.0482 l +26.822 84.9654 l +35.3597 83.1617 46.1769 82.1273 56.4987 82.1273 c +67.7438 82.1273 77.5998 83.2864 85.0025 85.4793 c +85.5799 85.65 l +85.4836 85.0555 l +80.0558 51.6132 61.6158 29.6614 52.7545 19.1123 c +51.0559 17.0909 49.7151 15.4942 48.8696 14.3031 c +48.5529 13.8574 l +h +15.8939 74.2462 m +19.8819 49.7599 35.7545 30.7312 44.3021 20.4834 c +46.1271 18.2948 47.6079 16.5203 48.5685 15.175 c +49.43 16.331 50.6616 17.7973 52.1756 19.599 c +60.9415 30.0342 79.1252 51.6798 84.6394 84.5858 c +77.237 82.4817 67.5261 81.3708 56.4987 81.3708 c +46.2804 81.3708 35.5748 82.3805 27.049 84.1456 c +26.0957 79.3202 21.4089 75.1569 15.8939 74.2462 c +h +48.6655 73.6475 m +52.6085 73.9417 54.3294 70.5509 54.0768 65.0786 c +53.8787 58.9878 51.5619 56.3598 48.6655 56.5248 c +48.6655 73.6475 l +h +69.0525 64.3493 m +60.7867 64.3493 l +59.0017 42.3726 l +58.1443 37.0446 53.337 34.0843 48.6312 34.3684 c +48.6312 54.5051 l +54.4405 54.2239 58.142 57.1167 58.4683 65.4454 c +58.4683 73.7906 52.9914 75.6862 50.8669 75.8786 c +45.3818 75.9849 35.8115 75.3613 33.5047 76.6089 c +30.5974 73.7878 l +44.3083 73.7878 l +44.3083 34.9594 l +41.3768 35.2633 39.2428 37.5987 38.1977 42.3479 c +37.0947 64.349 l +28.77 64.3493 l +28.7878 63.841 l +31.5448 63.6744 32.3269 60.8516 32.8116 56.8522 c +33.0741 54.6851 33.26 52.23 33.5543 49.5306 c +33.8394 46.9174 34.0472 44.4526 34.3395 42.1872 c +35.1255 36.0882 39.0013 31.686 48.6918 31.3472 c +55.8777 31.5731 59.8856 34.1379 61.9019 37.8241 c +63.1097 40.0348 63.4961 42.7039 63.7223 45.3611 c +64.0335 49.026 64.4122 53.1601 64.7646 56.3165 c +65.2944 61.0843 66.0855 64.1129 69.0537 63.7977 c +69.0525 64.3493 l +h +f* +Q +showpage +%%PageTrailer +pdfEndPage +%%Trailer +end +%%DocumentSuppliedResources: +%%EOF diff --git a/graphics/integrationcomparison.pdf b/graphics/integrationcomparison.pdf new file mode 100644 index 0000000..6ca84dd Binary files /dev/null and b/graphics/integrationcomparison.pdf differ diff --git a/graphics/kititle-cz-nofont.pdf b/graphics/kititle-cz-nofont.pdf new file mode 100644 index 0000000..e01e204 Binary files /dev/null and b/graphics/kititle-cz-nofont.pdf differ diff --git a/graphics/kititle-cz-nofont.ps b/graphics/kititle-cz-nofont.ps new file mode 100644 index 0000000..afcf65d --- /dev/null +++ b/graphics/kititle-cz-nofont.ps @@ -0,0 +1,820 @@ +%!PS-Adobe-3.0 +%%Pages: (atend) +%%BoundingBox: 12 0 360 72 +%%HiResBoundingBox: 12.000000 0.000000 359.780469 71.697656 +%......................................... +%%Creator: GPL Ghostscript 905 (pswrite) +%%CreationDate: 2014/12/09 23:59:51 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%EndComments +%%BeginProlog +% This copyright applies to everything between here and the %%EndProlog: +% Copyright (C) 2010 Artifex Software, Inc. All rights reserved. +%%BeginResource: procset GS_pswrite_2_0_1001 1.001 0 +/GS_pswrite_2_0_1001 80 dict dup begin +/PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch +4 index eq and{ pop pop pop}{ PageSize dup 1 +5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec} +{ pop/setpagedevice where +{ pop 1 dict dup /PageSize PageSize put setpagedevice} +{ /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat +setpage}if}ifelse}ifelse}ifelse} bind def +/!{bind def}bind def/#{load def}!/N/counttomark # +/rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}! +/r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}! +/w/setlinewidth #/J/setlinecap # +/j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat # +/m/moveto #/l/lineto #/c/rcurveto # +/p{N 2 idiv{N -2 roll rlineto}repeat}! +/P{N 0 gt{N -2 roll moveto p}if}! +/h{p closepath}!/H{P closepath}! +/lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}! +/re{4 -2 roll m exch dup lx exch ly neg lx h}! +/^{3 index neg 3 index neg}! +/f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}! +/q/gsave #/Q/grestore #/rf{re fill}! +/Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}! +/|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}! +/|{exch string readstring |=}! +/+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}! +/@/currentfile #/${+ @ |}! +/B{{2 copy string{readstring pop}aload pop 4 array astore cvx +3 1 roll}repeat pop pop true}! +/Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}! +/,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}! +/Ic{exch Ix false 3 colorimage}! +/F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>> +/CCITTFaxDecode filter}!/FX{<> +/CCITTFaxDecode filter}!/FX{<\value{maxnames}}{\addspace\printtext{a další}}{oii}% +%} + +\DeclareNameAlias{default}{last-first} + +\newbibmacro*{book:pubinfo}{% + %\iflistundef{location}{\printtext[colon]{\printlist{publisher}}}{% + \iflistundef{publisher}{}{\printlist{location}\setunit{}}% + % {\setunit*{\addcomma\addspace}} + % {\setunit*{}}% + %} + \iflistundef{location}{\setunit{\adddot\addspace}}{% + \iflistundef{publisher}{}{\printtext[colon]{\printlist{publisher}}} + } + %\printlist{publisher}% + \setunit*{\addcomma\addspace}% + \usebibmacro{date-urldate}% +} + +\newbibmacro*{names:primary}{% + \ifnameundef{author}% + {\usebibmacro{editor}}% + {\printnames{author}}% + \usebibmacro{year-label}% +} + + + + +\renewbibmacro*{editor}{% + \ifnameundef{editor}% + {}% + {\printnames{editor}% + \addspace\mkbibparens{\usebibmacro{editorrole}}% + }% +} +\newbibmacro*{editorrole}{% + \iffieldundef{editortype}{\bibsstring{editor}}{\bibsstring{\thefield{editortype}}}% +} + +\newbibmacro*{online-test}[2]{% + \ifboolexpr{% + test {\iffieldundef{url}} + and + test {\iffieldundef{eprint}} + and + test {\iffieldundef{doi}} + }% + {#1}% + {#2}% +} +\newbibmacro*{online}{% + %\def\online{}% + \iffieldundef{urlyear}{}{\printtext[sbrackets]{online}} + %\usebibmacro{online-test}{}{\online}% +} + +\newbibmacro{comment+link}[1]{% + \printtext{#1}\setunit*{\addcolon\addspace}%\printtext[rbrackets]{#2}% +} +\newbibmacro{print-online}{% +\printtext[rbrackets]{% +\usebibmacro{online-test}{}{% +\iffieldundef{url}{% +\printfield{doi}% +\printfield{eprint}% +}% +{\printfield{url}}% +}% +}% +} + +\newbibmacro{urlinfo}{% +\iffieldundef{urlyear}{\mainlstring{urlalso}}{\mainlstring{url}}% +} +\newbibmacro{availability}{% +\usebibmacro{online-test}% +{}% +{\iffieldundef{howpublished}% +{\usebibmacro{comment+link}{\usebibmacro{urlinfo}}\usebibmacro{print-online}}% +{\usebibmacro{comment+link}{\printfield{howpublished}\usebibmacro{print-online}}}% +}% +} + +%prefix - url, orig ,...; separator +%\newbibmacro*{isodate}[2]{% +%\printfield{#1day}\printtext{#2}\nopunct +%\printfield{#1month}\printtext{#2}\nopunct +%\printfield{#1year}\nopunct +%} +\newbibmacro*{date-urldate}{% + \iffieldundef{date}% + {\printfield{year}}% + {\printfield{date}}% + \usebibmacro{urldate} +} +\newbibmacro*{urldate}{% + \iffieldundef{urlyear}{}% + {\addspace\printtext[sbrackets]{% + %\printtext{cit.}% + \mainsstring{urlseen}% + \addspace + \printurldate + %\usebibmacro{isodate}{url}{-}\nopunct% + }}%\printtext{.}}%hack. otherwise there will be no dot between this and next field +} + + +\newbibmacro{pagecount}{% +\iffieldundef{pagetotal}{}% +{\printfield{pagetotal}\usebibmacro{loc:pages}}% +} +\newbibmacro{book:vol}{% + \printfield{edition} + %\iffieldundef{edition}{}% +%{\printfield{edition}\usebibmacro{loc:bookvol}}% +} + +\newbibmacro{titles}[1]{% + \printfield[emphatize]{#1title}% + \printfield[emph-colon]{#1subtitle}% + \printfield[emphatize]{#1addon}% +} +\newbibmacro{pub:title}{% + \iffieldundef{maintitle}{% + \iffieldundef{booktitle}{% + \usebibmacro{titles}{}% + }{% + \usebibmacro{titles}{book}% + } + }{% + \usebibmacro{titles}{main}% + }% + \usebibmacro{online}% +} +\newbibmacro{jour:title}{% +\usebibmacro{titles}{journal} +\usebibmacro{online} +} + +\newbibmacro{in}{% + \mainsstring{in}% +%\addspace% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Localisation macros +\newbibmacro{loc:pages}{\addnbspace\mainsstring{pages}}%\printtext{s}} + +%\newbibmacro{loc:bookvol}{\addnbspace\bibsstring{edition}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\DeclareBibliographyDriver{book}{% +\usebibmacro{bibindex}% +\usebibmacro{begentry}% +%\printnames{author}% +\usebibmacro{names:primary} +\newunit\newblock +\usebibmacro{pub:title} +\newunit\newblock +\usebibmacro{book:vol} +\newunit\newblock +\usebibmacro{book:pubinfo} +\newunit\newblock +\usebibmacro{pagecount} +\newunit\newblock +\printfield{series} +\newunit\newblock +\printfield{note} +\newunit\newblock +\usebibmacro{availability} +\newunit\newblock +\printfield{isbn} +\newunit\newblock +\finentry} + +\DeclareBibliographyDriver{periodical}{% +\usebibmacro{bibindex}% +\usebibmacro{begentry}% +%\printnames{author}% +%\usebibmacro{names:primary} +\newunit\newblock +\usebibmacro{jour:title} +%\newunit\newblock +%\usebibmacro{book:vol} +\newunit\newblock +\usebibmacro{book:pubinfo} +%\newunit\newblock +%\usebibmacro{pagecount} +\newunit\newblock +\printfield{series} +\newunit\newblock +\printfield{note} +\newunit\newblock +\usebibmacro{availability} +%\usebibmacro{print-online}{\mainlstring{url}}{\printfield{url}} +\newunit\newblock +\printfield{issn} +\newunit\newblock +\finentry} + + +\DeclareBibliographyDriver{article}{% +\usebibmacro{bibindex}% +\usebibmacro{begentry}% +\usebibmacro{names:primary}% +\newunit\newblock +\printfield{title}% +\printfield[colon]{subtitle}% +\newunit\newblock +\usebibmacro{jour:title} +%\printfield[emphatize]{journaltitle}% +\newunit\newblock +\printfield{year} +%\usebibmacro{date-urldate} +\setunit*{\addcomma\addspace}% +\printfield{volume}% +\setunit*{\addcomma\addspace}% +\printfield{number} +\usebibmacro{urldate} +\setunit*{\addcomma\addspace}% +\printfield{pages} +\newunit\newblock +\printfield{note} +\newunit\newblock +\usebibmacro{availability} +\newunit\newblock +\printfield{issn} +\finentry +} + +\DeclareBibliographyDriver{inbook}{% +%\printnames{author}% +\usebibmacro{bibindex}% +\usebibmacro{begentry}% +\printnames{bookauthor} +\usebibmacro{year-label}% +\newunit\newblock +\printfield{booktitle}% +\printfield[emph-colon]{booksubtitle}% +\newunit\newblock +\usebibmacro{book:vol} +\newunit\newblock +\printnames{author} +\newunit\newblock +\usebibmacro{book:pubinfo} +\newunit\newblock +\printfield{chapter} +\setunit*{\addcomma\addspace}% +\newunit +\printfield{title}% +\printfield[colon]{subtitle} +\setunit{\addcomma\addspace}% +\printfield{pages} +\newunit\newblock +\printfield{note} +\newunit\newblock +\usebibmacro{availability} +\newunit\newblock +\printfield{isbn} +\newunit\newblock +\finentry} + +\DeclareBibliographyDriver{incollection}{% +%\printnames{author}% +\usebibmacro{bibindex}% +\usebibmacro{begentry}% +\usebibmacro{names:primary} +\newunit\newblock +\printfield{title}% +\printfield[colon]{subtitle}% +\newunit\newblock +\usebibmacro{in} +\usebibmacro{editor}% +\newunit\newblock% +\usebibmacro{pub:title}% +\newunit\newblock +\usebibmacro{book:vol} +\newunit\newblock +\printfield{number} +\newunit\newblock +\usebibmacro{book:pubinfo} +%\newunit\newblock +\setunit*{\addcomma\addspace} +\printfield{pages} +%\usebibmacro{pagecount} +\newunit\newblock +\printfield{series} +\newunit\newblock +\printfield{note} +\newunit\newblock +\usebibmacro{availability} +\newunit\newblock +\printfield{isbn} +\newunit\newblock +\finentry} + +%\DeclareBibliographyAlias{online}{book} +\DeclareBibliographyDriver{online}{% +\usebibmacro{bibindex}% +\usebibmacro{begentry}% +%\printnames{author}% +\usebibmacro{names:primary} +\newunit\newblock +\usebibmacro{pub:title} +\newunit\newblock +\usebibmacro{book:vol} +\newunit\newblock +\usebibmacro{book:pubinfo} +\newunit\newblock +\usebibmacro{pagecount} +\newunit\newblock +\printfield{series} +\newunit\newblock +\printfield{note} +\newunit\newblock +%\usebibmacro{availability +\usebibmacro{comment+link}{\mainlstring{url}}\usebibmacro{print-online} +\newunit\newblock +\printfield{isbn} +\newunit\newblock +\finentry} + +\DeclareBibliographyAlias{bookinbook}{inbook} +\DeclareBibliographyAlias{suppbook}{inbook} +\DeclareBibliographyAlias{booklet}{book} +\DeclareBibliographyAlias{collection}{book} +\DeclareBibliographyAlias{suppcollection}{incollection} +\DeclareBibliographyAlias{manual}{book} +\DeclareBibliographyAlias{misc}{book} +\DeclareBibliographyAlias{suppperiodical}{article} +\DeclareBibliographyAlias{proceedings}{collection} +\DeclareBibliographyAlias{inproceedings}{incollection} +\DeclareBibliographyAlias{reference}{collection} +\DeclareBibliographyAlias{inreference}{incollection} +\DeclareBibliographyAlias{report}{book} +\DeclareBibliographyAlias{thesis}{book} +\DeclareBibliographyAlias{unpublished}{book} +\endinput diff --git a/iso.cbx b/iso.cbx new file mode 100644 index 0000000..dcf4348 --- /dev/null +++ b/iso.cbx @@ -0,0 +1,15 @@ +% $Id: authoryear.cbx,v 1.1 2011/01/05 21:45:11 lehman stable $ + +\ProvidesFile{iso.cbx} +[\abx@cbxid $Id: authoryear.cbx,v 1.1 2011/01/05 21:45:11 lehman stable $] +\providebool{cbx@numeric} +\ifthenelse{\boolean{cbx@numeric}}{% +\RequireCitationStyle{authoryear} +\renewbibmacro*{cite:labelyear+extrayear}{% + \iffieldundef{labelyear} + {} + {\addcomma\addspace\printtext[bibhyperref]{% + \printfield{labelyear}% + \printfield{extrayear}}}} +}{\RequireCitationStyle{numeric}} +\endinput diff --git a/kibase.sty b/kibase.sty new file mode 100644 index 0000000..31ba1dc --- /dev/null +++ b/kibase.sty @@ -0,0 +1,803 @@ +%%% KI PřF UP v Olomouci Base Style +%%% Copyright (C) 2012 Martin Rotter, +%%% Copyright (C) 2014 Jan Outrata, + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{kibase}[2012/09/09 KI PrF UP v Olomouci Base Style] + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Parametry. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\RequirePackage{kvoptions} + +\SetupKeyvalOptions{ + family=kib, + prefix=kib@ +} + +%% [init]{name}[default] +%% tisková verze (nebarevné logo UP a odkazy, odkazy s uvedením adresy, +%% ne odkaz do rejstříku) +\DeclareStringOption[false]{printversion}[true] +%% seznamy (obrázků, tabulek, zdrojových kódů a vět) pod sebou, jinak +%% na samostatných stranách +\DeclareStringOption[true]{joinlists}[true] +%% seznam obrázků +\DeclareStringOption[true]{figures}[true] +%% seznam tabulek +\DeclareStringOption[true]{tables}[true] +%% seznam vět +\DeclareStringOption[false]{theorems}[true] +%% seznam zdrojových kódů +\DeclareStringOption[false]{sourcecodes}[true] +%% bibliografie v BibLaTeXu, jinak v prostředí thebibliography +\DeclareStringOption[false]{biblatex}[true] +%% jazyk dokumentu: czech, english, slovak +\DeclareStringOption[czech]{language}[czech] +%% podpora seznamu zkratek +\DeclareStringOption[false]{glossaries}[true] +%% podpora rejstříku +\DeclareStringOption[false]{index}[true] +%% font dokumentu: sans, jinak serif +\DeclareStringOption[serif]{font}[serif] +%% logo UP: white, black, blue +\DeclareStringOption[white]{logo}[white] +%% kódování zdrojového textu dokumentu +\DeclareStringOption[utf8]{encoding}[utf8] +%% kódování bibliografie v BibLaTeXu +\DeclareStringOption[utf8]{bibencoding}[utf8] +%% styl číslování položek bibliografie v BibLaTeXu: iso, iso-numeric, +%% iso-authoryear +\DeclareStringOption[iso-numeric]{bibstyle}[iso-numeric] + +%% Nerozpoznaný parametr hodí chybu. +\DeclareDefaultOption{\PackageWarningNoLine{kibase}{[kibase] Option '\CurrentOption' was not recognized}} + +\ProcessKeyvalOptions* + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Balíky. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% Kódování zdrojového textu dokumentu. +\RequirePackage[\kib@encoding]{inputenc} + +%% Jazyky. +\RequirePackage[czech,english,\kib@language]{babel} + +% Barvy. +\RequirePackage[usenames,dvipsnames,table]{xcolor} + +%% Klikací odkazy v PDF. +\RequirePackage[unicode,breaklinks=true]{hyperref} +%% PDF záložky. +\RequirePackage[open,atend]{bookmark} + +%% Zdrojové kódy. +\RequirePackage[savemem]{listings} + +%% Podmíněný kód. +\RequirePackage{ifpdf} +\RequirePackage{ifthen} + +%% Seznam zkratek. +\ifthenelse{\equal{\kib@glossaries}{true}}{ + %% glossaries definuje \printindex (definovany take makeidx) i kdyz + %% by NEMEL bez parametru index! + \RequirePackage{savesym} + \savesymbol{printindex} + \RequirePackage[acronym,nonumberlist,sanitize=none]{glossaries} + \restoresymbol{GLS}{printindex} +}{ + \relax +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Barvy. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\definecolor{darkgray}{RGB}{60,60,60} +\definecolor{halfgray}{gray}{0.55} +\definecolor{lightergray}{gray}{0.99} +\definecolor{webgreen}{rgb}{0,.5,0} +\definecolor{webbrown}{rgb}{.6,0,0} +\definecolor{ultragreen}{RGB}{40,180,10} +\definecolor{darkblue}{rgb}{0.2, 0.3, 0.6} +\definecolor{upblue}{RGB}{0, 134, 217} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Dynamické texty. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\kitextdeptcz}{Katedra informatiky} +\newcommand{\kitextfacultycz}{P\v r\'irodov\v edeck\'a fakulta} +\newcommand{\kitextunivcz}{Univerzita Palack\'eho v~Olomouci} + +\newcommand{\kitextdepten}{Department of Computer Science} +\newcommand{\kitextfacultyen}{Faculty of Science} +\newcommand{\kitextuniven}{Palack\'{y} University Olomouc} + +%% Čestina. +\ifthenelse{\equal{\kib@language}{czech}}{ + \newcommand{\kitextdept}{\kitextdeptcz} + \newcommand{\kitextfaculty}{\kitextfacultycz} + \newcommand{\kitextuniv}{\kitextunivcz} + \def\@texttitle{Tituln\'{i} strana} + + \renewcommand{\lstlistlistingname}{Seznam zdrojov\'ych k\'od\r{u}} + \renewcommand{\lstlistingname}{Zdrojov\'y k\'od} + \newcommand{\listtheoremname}{Seznam v\v et} + + \def\@textdefinition{Definice} + \def\@textlemma{Lemma} + \def\@textconsequence{D\r{u}sledek} + \def\@textremark{Pozn\'{a}mka} + \def\@texttheorem{V\v{e}ta} + \def\@textproof{D\r{u}kaz} + \def\@textexample{P\v{r}\'{i}klad} + + \ifthenelse{\equal{\kib@glossaries}{true}}{ + \def\@textindex{Rejst\v{r}\'{i}k} + \renewcommand{\acronymname}{Seznam zkratek} + }{ + \relax + } + + \newcommand{\buno}{bez \'{u}jmy na obecnosti} + \newcommand{\Buno}{Bez \'{u}jmy na obecnosti} +}{ + \relax +} + +%% Angličtina. +\ifthenelse{\equal{\kib@language}{english}}{ + \newcommand{\kitextdept}{\kitextdepten} + \newcommand{\kitextfaculty}{\kitextfacultyen} + \newcommand{\kitextuniv}{\kitextuniven} + \def\@texttitle{Title page} + + \renewcommand{\lstlistlistingname}{List of source codes} + \renewcommand{\lstlistingname}{Source code} + \newcommand{\listtheoremname}{List of theorems} + + \def\@textdefinition{Definition} + \def\@textlemma{Lemma} + \def\@textconsequence{Corollary} + \def\@textremark{Remark} + \def\@texttheorem{Theorem} + \def\@textproof{Proof} + \def\@textexample{Example} + + \ifthenelse{\equal{\kib@glossaries}{true}}{ + \def\@textindex{Index} + \renewcommand{\acronymname}{List of abbreviations} + }{ + \relax + } + + \newcommand{\buno}{without loss of generality} + \newcommand{\Buno}{Without loss of generality} +}{ + \relax +} + +%% Slovenština. +\ifthenelse{\equal{\kib@language}{slovak}}{ + \newcommand{\kitextdept}{\kitextdeptcz} + \newcommand{\kitextfaculty}{\kitextfacultycz} + \newcommand{\kitextuniv}{\kitextunivcz} + \def\@texttitle{Tituln\'{a} strana} + + \renewcommand{\lstlistlistingname}{Zoznam zdrojov\'ych k\'odov} + \renewcommand{\lstlistingname}{Zdrojov\'y k\'od} + \newcommand{\listtheoremname}{Zoznam viet} + + \def\@textdefinition{Defin\'icia} + \def\@textlemma{Lemma} + \def\@textconsequence{D\^osledok} + \def\@textremark{Pozn\'{a}mka} + \def\@texttheorem{Veta} + \def\@textproof{D\^okaz} + \def\@textexample{Pr\'{i}klad} + + \ifthenelse{\equal{\kib@glossaries}{true}}{ + \def\@textindex{Register} + \renewcommand{\acronymname}{Zoznam skratiek} + }{ + \relax + } + + \newcommand{\buno}{bez ujmy na všeobecnosti} + \newcommand{\Buno}{Bez ujmy na všeobecnosti} +}{ + \relax +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Logo. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ifthenelse{\equal{\kib@logo}{black}}{ + \def\@logofile{graphics/UP_znak_cerna} +}{ + \ifthenelse{\equal{\kib@logo}{blue}}{ + \def\@logofile{graphics/UP_znak} + }{ + \ifthenelse{\equal{\kib@printversion}{true}}{ + \def\@logofile{graphics/UP_znak_outline} + }{ + \def\@logofile{graphics/UP_znak} + } + } +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Písmo - patkové Latin Modern a bezpatkové Iwona Light. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ifthenelse{\equal{\kib@font}{sans}}{ + \RequirePackage[light,math]{iwona} +}{ + \RequirePackage{lmodern} +} +\RequirePackage[T1]{fontenc} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Obrázky. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ifthenelse{\boolean{pdf}}{ + \RequirePackage[pdftex]{graphicx} +}{ + \RequirePackage{graphicx} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% České (a slovenské) uvozovky pro balík csquotes. +%% použití: \enquote{citoslovce} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\RequirePackage[autostyle=try]{csquotes} + +\DeclareQuoteStyle{czech} + {\quotedblbase} + {\textquotedblleft} + {\textquoteleft} + {\textquoteright} + +\DeclareQuoteAlias{czech}{slovak} + +%% Redeklarace makra \uv, aby používalo csquotes. +%% Makro \uv bude tisknout typ uvozovek v závislosti na jazyku prostředí. +\renewcommand{\uv}[1]{\enquote{#1}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Hypertextové odkazy a záložky. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% Nastaví PDF záložky na kořen -- způsobí vrácení PDF záložek na +%% kořen, používat zejména pokud dokument obsahuje \part +%\newcommand{\kiendofmainmatter}{ +% \bookmarksetup{startatroot} +%} + +%% Potlačení klikacích odkazů. +\newcommand*{\nohref}[1]{\begin{NoHyper}#1\end{NoHyper}} + +%% Barevné odkazy. +\ifthenelse{\equal{\kib@printversion}{true}}{ + \hypersetup{ + colorlinks=false + } +}{ + \hypersetup{ + colorlinks=true + } +} + +%% Nastavení odkazů a záložek. +\hypersetup{ + linktocpage=true, pdfstartpage=1, pageanchor=true, + pdfstartview=FitV, breaklinks=true, pdfpagemode=UseNone, + plainpages=false, bookmarksnumbered, + hypertexnames=true, pdfhighlight=/O, + urlcolor=upblue, linkcolor=upblue, + citecolor=upblue +} + +\let\orghref=\href +\let\orgurl=\url + +%% Zalomitelné \url. +%% \renewcommand{\url}[1]{\orghref{#1}{#1}} + +\ifthenelse{\equal{\kib@printversion}{true}}{ +%% Odkazy s uvedením adresy v tiskové verzi dokumentu. + \renewcommand{\href}[2]{#2 (\orghref{#1}{#1})} + \newcommand{\mail}[2]{#2 (\orghref{mailto:#1}{#1})} +}{ +%% Makro pro mail. + \newcommand{\mail}[2]{\href{mailto:#1}{#2}} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Zkratky a seznam zkratek. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ifthenelse{\equal{\kib@glossaries}{true}}{ + %% Zapnutí generování zkratek. + \makeglossaries + + %% Zkratky tučně a bez interpunkce za zkratkou. + \renewcommand{\glsnamefont}[1]{\textbf{#1}} + \renewcommand{\glspostdescription}{} + + \let\orgprintglossary=\printglossary + + %% Tisk seznamu zkratek od nové strany + záznam do obsahu. + \renewcommand{\printglossary}{ + \clearpage + \phantomsection + \addcontentsline{toc}{section}{\acronymname} + \orgprintglossary[type=\acronymtype] + } +}{ + \renewcommand{\printglossary}{ + \relax + } +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Rejstřík +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\ifthenelse{\equal{\kib@index}{true}}{ +\RequirePackage{makeidx} +%% Sazba do sloupců. +\RequirePackage{multicol} + +%% Zapne rejstříkování. +\makeindex + +%\let\orgtheindex=\theindex +%\let\orgendtheindex=\endtheindex + +%% Dva sloupce rejstříku. +\newcommand{\indexcolumns}{2} + +%% Předefinování prostředí pro sazbu rejstříku (podle starého stylu). +\renewenvironment{theindex}{ + \newpage + \bgroup + \section*{\@textindex\@mkboth{\@textindex}{\@textindex}} + \addcontentsline{toc}{section}{\@textindex} + \def\item{\par} + \def\subitem{\par---\kern1ex} + \def\subsubitem{\par---\kern1ex---\kern1ex} + \def\indexspace{\smallskip} + \setlength{\parindent}{-2em} + \setlength{\leftskip}{2em} + \begin{multicols*}{\indexcolumns} + } { +\end{multicols*} +\egroup +} + +\let\orgprintindex=\printindex + +%% Tisk rejstříku od nové strany. +\renewcommand{\printindex}{ + \clearpage + \phantomsection + \orgprintindex +} + +\ifthenelse{\equal{\kib@printversion}{true}}{ +\relax +}{ +%% Redefinice \index s odkazem do rejstříku. +%% Odkaz nefunguje pro \index{výraz|makro}, resp. \index{výraz|(makro}. +\newcounter{indexno} +\let\orgindex=\index +\renewcommand{\index}[1]{\stepcounter{indexno}\hyperlink{\arabic{indexno}ind.ind}{$^{\lbrace\arabic{indexno}\rbrace}$}\orgindex{#1|hypertarget{\arabic{indexno}ind.ind}}} +} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Bibliografie +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% BibLaTeX. +\ifthenelse{\equal{\kib@biblatex}{true}}{ + %% Volba backendu. + \newcommand{\kibibliobackend}{biber} + + %% Načtení BibLaTeXu. + %% Čestina. + \ifthenelse{\equal{\kib@language}{czech}}{ + \RequirePackage[ + natbib=true, + backend=\kibibliobackend, + sortcites=true, + style=\kib@bibstyle, + babel=other, + sortlocale=cs_CZ, + bibencoding=\kib@bibencoding + ]{biblatex} + }{ + \relax + } + %% Angličtina. + \ifthenelse{\equal{\kib@language}{english}}{ + \RequirePackage[ + natbib=true, + backend=\kibibliobackend, + sortcites=true, + style=\kib@bibstyle, + babel=other, + sortlocale=en_GB, + bibencoding=\kib@bibencoding, + spacecolon=false + ]{biblatex} + }{ + \relax + } + %% Slovenština. + \ifthenelse{\equal{\kib@language}{slovak}}{ + \RequirePackage[ + natbib=true, + backend=\kibibliobackend, + sortcites=true, + style=\kib@bibstyle, + babel=other, + sortlocale=sk_SK, + bibencoding=\kib@bibencoding + ]{biblatex} + }{ + \relax + } + + %% První řádek záznamu nechceme předsazovat. + \setlength{\bibhang}{0pt} + + %% Přeformátovat číslo záznamu. + \ifthenelse{\equal{\kib@bibstyle}{iso-numeric}}{ + \renewcommand\MethodFormat{\printtext[labelnumberwidth]{\mkbibbrackets{\printfield{prefixnumber}\printfield{labelnumber}}}} + } { + \relax + } + + \let\orgprintbibliography=\printbibliography + + %% Tisk bibliografie od nové strany + záznam do obsahu. + \renewcommand{\printbibliography}{ + \clearpage + \phantomsection + \addcontentsline{toc}{section}{\refname} + \orgprintbibliography + } + + %% Umlčení TeXu v případě "drobných" přetečení textu, která se v + %% bibliografii dějí běžně. + \setcounter{biburlnumpenalty}{9000} + \setcounter{biburlucpenalty}{9000} + \setcounter{biburllcpenalty}{9000} +}{ + \relax +} + +%% Redefinice prostředí thebibliography (podle starého stylu). +\renewenvironment{thebibliography}[1]{ + \clearpage + \section*{\bibname + \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}} + \addcontentsline{toc}{section}{\bibname} + \list{\@biblabel{\@arabic\c@enumiv}} + {\settowidth\labelwidth{\@biblabel{#1}} + %% bez odsazeni (jako v BibLaTeXu) + \leftmargin0pt%\labelwidth +% \advance\leftmargin\labelsep + \@openbib@code + \usecounter{enumiv} + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}} + \sloppy + \clubpenalty4000 + \@clubpenalty \clubpenalty + \widowpenalty4000 + \sfcode`\.\@m +} { + \def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}} + \endlist +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Obsah. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\let\orgappendix=\appendix + +%% Přílohy od nové strany. +\renewcommand{\appendix}{ + \clearpage + \orgappendix +} + +%% Definice \subsubsubsection +\setcounter{tocdepth}{5} +\setcounter{secnumdepth}{5} +\newcommand{\subsubsubsection}{\@startsection{paragraph}{4}{0ex} + {-3.25ex plus -1ex minus -0.2ex} + {1.5ex plus 0.2ex}% + {\normalfont\normalsize\bfseries}} + +\let\orgtableofcontents=\tableofcontents + +%% Přidání záznamu do PDF záložek. +\renewcommand{\tableofcontents}{ + \cleardoublepage + \hypertarget{ki:toc}{} + \bookmark[ + rellevel=1, + keeplevel, + dest=ki:toc + ]{\contentsname} + \orgtableofcontents +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Zdrojové kódy. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% Typewriter font, který umí i bold. +\renewcommand{\ttdefault}{pcr} + +%% Modifikace originálních maker, aby respektovala jiný obsah. +\lst@UserCommand\lstlistoflistings{\bgroup + \let\contentsname\lstlistlistingname + \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lol}} + \orgtableofcontents \egroup} + +%% Definice základního stylu sazby zdroj. kódů. +\lstdefinestyle{kibasestyle}{ + breaklines=true, + flexiblecolumns=true, + basicstyle=\footnotesize\ttfamily, + keywordstyle=\bfseries, + commentstyle=\color{gray}, + stringstyle=\color{black}, + numberbychapter=false, + escapeinside={£*}{*£}, + firstnumber=1, + numbers=left, + captionpos=b, + numbersep=10pt, + inputencoding=\kib@encoding, + numberstyle=\scriptsize\ttfamily, + stepnumber=1, + showstringspaces=false, + tabsize=2, + extendedchars=true, + literate= + {á}{{\'a}}1 + {í}{{\'i}}1 + {é}{{\'e}}1 + {ý}{{\'y}}1 + {ú}{{\'u}}1 + {ó}{{\'o}}1 + {ě}{{\v{e}}}1 + {š}{{\v{s}}}1 + {č}{{\v{c}}}1 + {ř}{{\v{r}}}1 + {ž}{{\v{z}}}1 + {ď}{{\v{d}}}1 + {ť}{{\v{t}}}1 + {ň}{{\v{n}}}1 + {ů}{{\r{u}}}1 + {ô}{{\^o}}1 + {Á}{{\'A}}1 + {Í}{{\'I}}1 + {É}{{\'E}}1 + {Ý}{{\'Y}}1 + {Ú}{{\'U}}1 + {Ó}{{\'O}}1 + {Ě}{{\v{E}}}1 + {Š}{{\v{S}}}1 + {Č}{{\v{C}}}1 + {Ř}{{\v{R}}}1 + {Ž}{{\v{Z}}}1 + {Ď}{{\v{D}}}1 + {Ť}{{\v{T}}}1 + {Ň}{{\v{N}}}1 + {Ů}{{\r{U}}}1 + {Ô}{{\^o}}1 +} + +%% Definice dodatečných jazyků. +\lstdefinelanguage{TutorialD}{morekeywords={tuple,matching,insert,divide,by,per,tclose,from,summarize,count,all,but,as,base,rename,prefix,extend,add,compose,union,minus,intersect,update,writeln,init,type,possrep,constraint,and,or,relation,where,base,drop}, + sensitive=false, + morecomment=[s][commentstyle]{/*}{*/}, + morestring=[b][stringstyle]{"}, +} + +\lstdefinelanguage{text}{ + morekeywords={}, + sensitive=false, +} + +\lstdefinelanguage{CSS}{ + morekeywords={accelerator,azimuth,background,background-attachment,background-color,background-image,background-position,background-position-x,background-position-y,background-repeat,behavior,border,border-bottom,border-bottom-color,border-bottom-style,border-bottom-width,border-collapse,border-color,border-left,border-left-color,border-left-style,border-left-width,border-right,border-right-color,border-right-style,border-right-width,border-spacing,border-style,border-top,border-top-color,border-top-style,border-top-width,border-width,bottom,caption-side,clear,clip,color,content,counter-increment,counter-reset,cue,cue-after,cue-before,cursor,direction,display,elevation,empty-cells,filter,float,font,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,height,ime-mode,include-source,layer-background-color,layer-background-image,layout-flow,layout-grid,layout-grid-char,layout-grid-char-spacing,layout-grid-line,layout-grid-mode,layout-grid-type,left,letter-spacing,line-break,line-height,list-style,list-style-image,list-style-position,list-style-type,margin,margin-bottom,margin-left,margin-right,margin-top,marker-offset,marks,max-height,max-width,min-height,min-width,-moz-binding,-moz-border-radius,-moz-border-radius-topleft,-moz-border-radius-topright,-moz-border-radius-bottomright,-moz-border-radius-bottomleft,-moz-border-top-colors,-moz-border-right-colors,-moz-border-bottom-colors,-moz-border-left-colors,-moz-opacity,-moz-outline,-moz-outline-color,-moz-outline-style,-moz-outline-width,-moz-user-focus,-moz-user-input,-moz-user-modify,-moz-user-select,orphans,outline,outline-color,outline-style,outline-width,overflow,overflow-X,overflow-Y,padding,padding-bottom,padding-left,padding-right,padding-top,page,page-break-after,page-break-before,page-break-inside,pause,pause-after,pause-before,pitch,pitch-range,play-during,position,quotes,-replace,richness,right,ruby-align,ruby-overhang,ruby-position,-set-link-source,size,speak,speak-header,speak-numeral,speak-punctuation,speech-rate,stress,scrollbar-arrow-color,scrollbar-base-color,scrollbar-dark-shadow-color,scrollbar-face-color,scrollbar-highlight-color,scrollbar-shadow-color,scrollbar-3d-light-color,scrollbar-track-color,table-layout,text-align,text-align-last,text-decoration,text-indent,text-justify,text-overflow,text-shadow,text-transform,text-autospace,text-kashida-space,text-underline-position,top,unicode-bidi,-use-link-source,vertical-align,visibility,voice-family,volume,white-space,widows,width,word-break,word-spacing,word-wrap,writing-mode,z-index,zoom,}, + sensitive=false, + morecomment=[s][commentstyle]{/*}{*/}, +} + +\lstdefinelanguage{csharp}{ + morekeywords={int,ref,static,fixed,unsafe,public,private,protected,return,for,if,void}, + sensitive=false, + morecomment=[s][commentstyle]{/*}{*/}, + morecomment=[l][commentstyle]{//}, + morestring=[b][stringstyle]{"}, +} + +\lstdefinelanguage{cpp}{ + morekeywords={int,enum,struct,static,bool,return,for,if,void,ifndef,define,endif,class,constexpr,new,const,auto,double,public,private,protected,signals,slots}, + sensitive=false, + morecomment=[s][commentstyle]{/*}{*/}, + morecomment=[l][commentstyle]{//}, + morestring=[b][stringstyle]{"}, +} + +\lstdefinelanguage{JavaScript}{ + keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break}, + ndkeywords={class, export, boolean, throw, implements, import, this}, + sensitive=false, + morecomment=[l][commentstyle]{//}, + morecomment=[s][commentstyle]{/*}{*/}, + morestring=[b][stringstyle]{'}, + morestring=[b][stringstyle]{"} +} + +\newcommand{\csharp}{C\kern-.03em\raise.38ex\hbox{\scriptsize{\#}}} +\newcommand{\cpp}{C\kern-.05em\raise.38ex\hbox{\scriptsize{++}}} +\newcommand{\keyword}[1]{{\ttfamily\color{darkgray}{#1}}} + +%% Načtení jazyků. +\lstloadlanguages{[ANSI]C,[LaTeX]TeX,PHP,HTML,Lisp,SQL,TeX,Python,Java,TutorialD,text,csharp,cpp,JavaScript,CSS} + +%% Definice makra a prostředí pro sazbu zdroj. kódů. +\newcommand{\kiinlinecode}[3]{\lstinline[style=kibasestyle,alsoletter={\{\}\\},language=#1]#2#3#2\ignorespacesafterend} + +\lstnewenvironment{kicode}[3]{ + \lstset{language=#1,alsoletter={\{\}\\},float=ht,style=kibasestyle,firstnumber=1,caption={#3},label={#2},aboveskip=10px,belowskip=15px} +}{} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Teorémy. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% Stylování teorémů. +\RequirePackage{amsmath} +\RequirePackage{amsthm} +\RequirePackage{thmtools} + +%% Definice základných stylů. +\declaretheoremstyle[ + headfont=\normalfont\bfseries, + notefont=\normalfont\bfseries, + bodyfont=\itshape, + spaceabove=\baselineskip, + spacebelow=\baselineskip, + headpunct=\\\indent +]{kithmstyle} + +\declaretheoremstyle[ + notefont=\bfseries, + spaceabove=\baselineskip, + spacebelow=\baselineskip, + headpunct=\\\indent +]{kidefstyle} + +\declaretheoremstyle[ + headfont=\normalfont\scshape, + notefont=\normalfont\scshape, + spaceabove=\baselineskip, + spacebelow=\baselineskip, + headpunct=\\\indent +]{kiremexstyle} + +\declaretheoremstyle[ + headfont=\normalfont\itshape, + notefont=\normalfont\itshape, + spaceabove=\baselineskip, + spacebelow=\baselineskip, + qed=\qedsymbol, + headpunct=\\\indent +]{kiproofstyle} + +%% Zakázání starého prostředí pro sazbu důkazů. +\let\proof\@undefined + +%% Definice prostředí pro sazbu teorémů. +\declaretheorem[style=kidefstyle,numbered=yes,name=\@textdefinition]{definition} +\declaretheorem[sibling=definition,style=kithmstyle,numbered=yes,name=\@textlemma]{lemma} +\declaretheorem[sibling=definition,style=kithmstyle,numbered=yes,name=\@textconsequence]{consequence} +\declaretheorem[sibling=definition,style=kiremexstyle,numbered=yes,name=\@textremark]{remark} +\declaretheorem[sibling=definition,style=kiremexstyle,numbered=yes,name=\@textexample]{example} +\declaretheorem[sibling=definition,style=kithmstyle,numbered=yes,name=\@texttheorem]{theorem} +\declaretheorem[style=kiproofstyle,numbered=no,name=\@textproof]{proof} + +\let\orglistoftheorems=\listoftheorems + +%% Seznam teorémů. +\renewcommand{\listoftheorems}{ + \orglistoftheorems[ignoreall,show={definition,consequence,lemma,remark,theorem,proof,example}] +} + +%% Čítání rovnic na základě sekcí. +%\counterwithin{equation}{section} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Sazba seznamů. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\@printlists}{ + \cleardoublepage + \ifthenelse{\equal{\kib@figures}{true}}{ + \listoffigures + \ifthenelse{\equal{\kib@joinlists}{true}}{ + \relax + }{ + \clearpage + } + }{ + \relax + } + + \ifthenelse{\equal{\kib@tables}{true}}{ + \listoftables + \ifthenelse{\equal{\kib@joinlists}{true}}{ + \relax + }{ + \clearpage + } + }{ + \relax + } + + \ifthenelse{\equal{\kib@theorems}{true}}{ + \listoftheorems + \ifthenelse{\equal{\kib@joinlists}{true}}{ + \relax + }{ + \clearpage + } + }{ + \relax + } + + \ifthenelse{\equal{\kib@sourcecodes}{true}}{ + \lstlistoflistings + \ifthenelse{\equal{\kib@joinlists}{true}}{ + \relax + }{ + \clearpage + } + }{ + \relax + } + \cleardoublepage +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Další. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% Sloupce pro tabulky s uživatelsky stanovenou šířkou a zarovnáním +%% textu na danou stranu. +%% Použití: \begin{tabular}{| c | L{3cm} | C{3cm} | R{3cm} |} +\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}p{#1}} +\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}p{#1}} + +\endinput diff --git a/kidiplom.acn b/kidiplom.acn new file mode 100644 index 0000000..11e331a --- /dev/null +++ b/kidiplom.acn @@ -0,0 +1 @@ +\glossaryentry{UPOL?\glossentry{UPOL}|setentrycounter[]{page}"\glsnumberformat}{42} diff --git a/kidiplom.aux b/kidiplom.aux new file mode 100644 index 0000000..eaaebbb --- /dev/null +++ b/kidiplom.aux @@ -0,0 +1,257 @@ +\relax +\providecommand \babel@aux [2]{\global \let \babel@toc \@gobbletwo } +\@nameuse{bbl@beforestart} +\catcode `"\active +\catcode `-\active +\providecommand\hyper@newdestlabel[2]{} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\providecommand\BKM@entry[2]{} +\abx@aux@refcontext{none/global//global/global/global} +\BKM@entry{id=1,open,dest={6B693A7061706572},srcline={149}}{5C3337365C3337375C303030535C303030745C303030795C3030306C5C3030305C3034305C303030705C303030725C3030306F5C3030305C3034305C303030745C303030655C303030785C303030745C3030305C3034305C3030307A5C3030305C3334315C303030765C3030315C3033335C303030725C303030655C3030315C3031355C3030306E5C3030305C3335315C3030305C3034305C303030705C303030725C3030305C3334315C303030635C30303065} +\BKM@entry{id=2,open,dest={6B693A7469746C65},srcline={149}}{5C3337365C3337375C303030545C303030695C303030745C303030755C3030306C5C3030306E5C3030305C3335355C3030305C3034305C303030735C303030745C303030725C303030615C3030306E5C30303061} +\providecommand\@newglossary[4]{} +\@newglossary{main}{glg}{gls}{glo} +\@newglossary{acronym}{alg}{acr}{acn} +\@newglossary{index}{ilg}{ind}{idx} +\providecommand\@glsorder[1]{} +\providecommand\@istfilename[1]{} +\@istfilename{kidiplom.ist} +\@glsorder{word} +\babel@aux{czech}{} +\BKM@entry{id=3,open,dest={6B693A616E6F746174696F6E},srcline={149}}{5C3337365C3337375C303030415C3030306E5C3030306F5C303030745C303030615C303030635C30303065} +\BKM@entry{id=4,open,dest={6B693A746F63},srcline={149}}{5C3337365C3337375C3030304F5C303030625C303030735C303030615C30303068} +\BKM@entry{id=5,open,dest={73656374696F6E2E31},srcline={160}}{5C3337365C3337375C303030315C3030305C3034305C3030305C3333325C303030765C3030306F5C30303064} +\@writefile{toc}{\contentsline {section}{\numberline {1}Úvod}{9}{section.1}\protected@file@percent } +\BKM@entry{id=6,open,dest={73656374696F6E2E32},srcline={166}}{5C3337365C3337375C303030325C3030305C3034305C303030445C303030695C303030735C303030745C303030725C303030695C303030625C303030755C3030306F5C303030765C303030615C3030306E5C3030305C3335315C3030305C3034305C303030735C303030795C303030735C303030745C3030305C3335315C3030306D5C30303079} +\BKM@entry{id=7,open,dest={73756273656374696F6E2E322E31},srcline={182}}{5C3337365C3337375C303030325C3030302E5C303030315C3030305C3034305C3030304B5C3030306F5C3030306D5C303030755C3030306E5C303030695C3030306B5C303030615C303030635C303030655C3030305C3034305C303030765C3030305C3034305C303030735C3030305C3335355C303030745C30303069} +\BKM@entry{id=8,open,dest={73756273656374696F6E2E322E32},srcline={195}}{5C3337365C3337375C303030325C3030302E5C303030325C3030305C3034305C303030545C303030435C303030505C3030302F5C303030495C30303050} +\@writefile{toc}{\contentsline {section}{\numberline {2}Distribuované systémy}{10}{section.2}\protected@file@percent } +\@writefile{loe}{\contentsline {definition}{\ifthmt@listswap Definice~1\else \numberline {1}Definice\fi \thmtformatoptarg {Počítačová síť}}{10}{definition.1}\protected@file@percent } +\@writefile{loe}{\contentsline {definition}{\ifthmt@listswap Definice~2\else \numberline {2}Definice\fi \thmtformatoptarg {Distribuovaný systém}}{10}{definition.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Komunikace v síti}{10}{subsection.2.1}\protected@file@percent } +\@writefile{loe}{\contentsline {definition}{\ifthmt@listswap Definice~3\else \numberline {3}Definice\fi \thmtformatoptarg {Komunikační protokol}}{10}{definition.3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}TCP/IP}{11}{subsection.2.2}\protected@file@percent } +\BKM@entry{id=9,open,dest={73756273656374696F6E2E322E33},srcline={229}}{5C3337365C3337375C303030325C3030302E5C303030335C3030305C3034305C303030415C303030725C303030635C303030685C303030695C303030745C303030655C3030306B5C303030745C303030755C303030725C30303079} +\BKM@entry{id=10,open,dest={73756273756273656374696F6E2E322E332E31},srcline={233}}{5C3337365C3337375C303030325C3030302E5C303030335C3030302E5C303030315C3030305C3034305C3030304B5C3030306C5C303030695C303030655C3030306E5C303030745C3030302D5C303030535C303030655C303030725C303030765C303030655C30303072} +\BKM@entry{id=11,open,dest={73756273756273656374696F6E2E322E332E32},srcline={237}}{5C3337365C3337375C303030325C3030302E5C303030335C3030302E5C303030325C3030305C3034305C303030505C303030655C303030655C303030725C3030302D5C303030745C3030306F5C3030302D5C303030505C303030655C303030655C30303072} +\BKM@entry{id=12,open,dest={73756273656374696F6E2E322E34},srcline={239}}{5C3337365C3337375C303030325C3030302E5C303030345C3030305C3034305C303030525C3030306F5C303030645C303030695C3030306E5C303030615C3030305C3034305C303030705C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C3030315C3135375C3030305C3034305C303030545C303030435C303030505C3030302F5C303030495C30303050} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Architektury}{12}{subsection.2.3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.1}Klient-Server}{12}{subsubsection.2.3.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.2}Peer-to-Peer}{12}{subsubsection.2.3.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Rodina protokolů TCP/IP}{12}{subsection.2.4}\protected@file@percent } +\BKM@entry{id=13,open,dest={73756273656374696F6E2E322E35},srcline={248}}{5C3337365C3337375C303030325C3030302E5C303030355C3030305C3034305C303030505C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C303030795C3030305C3034305C303030765C3030305C3034305C303030745C303030725C303030615C3030306E5C303030735C303030705C3030306F5C303030725C303030745C3030306E5C3030305C3335355C3030305C3034305C303030765C303030725C303030735C303030745C303030765C3030315C303333} +\BKM@entry{id=14,open,dest={73756273756273656374696F6E2E322E352E31},srcline={252}}{5C3337365C3337375C303030325C3030302E5C303030355C3030302E5C303030315C3030305C3034305C303030535C3030306F5C303030635C3030306B5C303030655C303030745C30303079} +\BKM@entry{id=15,open,dest={73756273756273656374696F6E2E322E352E32},srcline={258}}{5C3337365C3337375C303030325C3030302E5C303030355C3030302E5C303030325C3030305C3034305C303030545C303030435C30303050} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.5}Protokoly v transportní vrstvě}{13}{subsection.2.5}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.5.1}Sockety}{13}{subsubsection.2.5.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.5.2}TCP}{13}{subsubsection.2.5.2}\protected@file@percent } +\BKM@entry{id=16,open,dest={73756273756273656374696F6E2E322E352E33},srcline={266}}{5C3337365C3337375C303030325C3030302E5C303030355C3030302E5C303030335C3030305C3034305C303030535C303030705C3030306F5C3030306C5C303030655C303030685C3030306C5C303030695C303030765C3030306F5C303030735C30303074} +\BKM@entry{id=17,open,dest={73756273756273656374696F6E2E322E352E34},srcline={274}}{5C3337365C3337375C303030325C3030302E5C303030355C3030302E5C303030345C3030305C3034305C303030555C303030445C30303050} +\BKM@entry{id=18,open,dest={73756273756273656374696F6E2E322E352E35},srcline={281}}{5C3337365C3337375C303030325C3030302E5C303030355C3030302E5C303030355C3030305C3034305C303030515C303030555C303030495C30303043} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.5.3}Spolehlivost}{14}{subsubsection.2.5.3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.5.4}UDP}{14}{subsubsection.2.5.4}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.5.5}QUIC}{15}{subsubsection.2.5.5}\protected@file@percent } +\BKM@entry{id=19,open,dest={73756273656374696F6E2E322E36},srcline={299}}{5C3337365C3337375C303030325C3030302E5C303030365C3030305C3034305C303030505C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C303030795C3030305C3034305C303030765C3030305C3034305C303030615C303030705C3030306C5C303030695C3030306B5C303030615C3030315C3031355C3030306E5C3030305C3335355C3030305C3034305C303030765C303030725C303030735C303030745C303030765C3030315C303333} +\BKM@entry{id=20,open,dest={73756273756273656374696F6E2E322E362E31},srcline={303}}{5C3337365C3337375C303030325C3030302E5C303030365C3030302E5C303030315C3030305C3034305C303030485C303030545C303030545C30303050} +\BKM@entry{id=21,open,dest={73756273756273656374696F6E2E322E362E32},srcline={309}}{5C3337365C3337375C303030325C3030302E5C303030365C3030302E5C303030325C3030305C3034305C303030485C303030545C303030545C303030505C3030302F5C30303033} +\BKM@entry{id=22,open,dest={73756273756273656374696F6E2E322E362E33},srcline={313}}{5C3337365C3337375C303030325C3030302E5C303030365C3030302E5C303030335C3030305C3034305C303030675C303030525C303030505C30303043} +\BKM@entry{id=23,open,dest={73756273756273656374696F6E2E322E362E34},srcline={317}}{5C3337365C3337375C303030325C3030302E5C303030365C3030302E5C303030345C3030305C3034305C3030304D5C303030695C303030645C303030645C3030306C5C303030655C303030775C303030615C303030725C30303065} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.6}Protokoly v aplikační vrstvě}{16}{subsection.2.6}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.6.1}HTTP}{16}{subsubsection.2.6.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.6.2}HTTP/3}{16}{subsubsection.2.6.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.6.3}gRPC}{16}{subsubsection.2.6.3}\protected@file@percent } +\BKM@entry{id=24,open,dest={73756273656374696F6E2E322E37},srcline={324}}{5C3337365C3337375C303030325C3030302E5C303030375C3030305C3034305C303030505C3030306F5C303030735C3030305C3335355C3030306C5C3030305C3334315C3030306E5C3030305C3335355C3030305C3034305C3030307A5C303030705C303030725C3030305C3334315C30303076} +\BKM@entry{id=25,open,dest={73756273756273656374696F6E2E322E372E31},srcline={328}}{5C3337365C3337375C303030325C3030302E5C303030375C3030302E5C303030315C3030305C3034305C303030535C303030655C303030725C303030695C303030615C3030306C5C303030695C3030307A5C303030615C303030635C30303065} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.6.4}Middleware}{17}{subsubsection.2.6.4}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {2.7}Posílání zpráv}{17}{subsection.2.7}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.7.1}Serializace}{17}{subsubsection.2.7.1}\protected@file@percent } +\BKM@entry{id=26,open,dest={73756273756273656374696F6E2E322E372E32},srcline={363}}{5C3337365C3337375C303030325C3030302E5C303030375C3030302E5C303030325C3030305C3034305C3030304B5C3030305C3336335C303030645C3030306F5C303030765C3030305C3334315C3030306E5C3030305C3335355C3030305C3034305C3030307A5C303030705C303030725C3030305C3334315C30303076} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}C++}{18}{lstlisting.1}\protected@file@percent } +\@writefile{lol}{\contentsline {lstlisting}{\numberline {2}C++}{18}{lstlisting.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.7.2}Kódování zpráv}{18}{subsubsection.2.7.2}\protected@file@percent } +\BKM@entry{id=27,open,dest={73756273756273656374696F6E2E322E372E33},srcline={371}}{5C3337365C3337375C303030325C3030302E5C303030375C3030302E5C303030335C3030305C3034305C303030495C3030306D5C303030705C3030306C5C303030655C3030306D5C303030655C3030306E5C303030745C303030615C303030635C30303065} +\BKM@entry{id=28,open,dest={73756273756273656374696F6E2E322E372E34},srcline={377}}{5C3337365C3337375C303030325C3030302E5C303030375C3030302E5C303030345C3030305C3034305C303030445C303030655C303030745C303030655C3030306B5C303030635C303030655C3030305C3034305C303030615C3030305C3034305C3030306E5C3030305C3334315C303030705C303030725C303030615C303030765C303030615C3030305C3034305C303030635C303030685C303030795C30303062} +\BKM@entry{id=29,open,dest={73756273656374696F6E2E322E38},srcline={385}}{5C3337365C3337375C303030325C3030302E5C303030385C3030305C3034305C303030415C303030735C303030795C3030306E5C303030635C303030685C303030725C3030306F5C3030306E5C3030305C3335355C3030305C3034305C303030495C3030304F} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.7.3}Implementace}{19}{subsubsection.2.7.3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.7.4}Detekce a náprava chyb}{19}{subsubsection.2.7.4}\protected@file@percent } +\BKM@entry{id=30,open,dest={73756273756273656374696F6E2E322E382E31},srcline={391}}{5C3337365C3337375C303030325C3030302E5C303030385C3030302E5C303030315C3030305C3034305C3030305A5C303030655C303030725C3030306F5C3030304D5C30303051} +\BKM@entry{id=31,open,dest={73756273756273656374696F6E2E322E382E32},srcline={397}}{5C3337365C3337375C303030325C3030302E5C303030385C3030302E5C303030325C3030305C3034305C303030575C3030306F5C303030725C3030306B5C3030305C3034305C303030735C303030745C303030655C303030615C3030306C5C303030695C3030306E5C30303067} +\BKM@entry{id=32,open,dest={73756273756273656374696F6E2E322E382E33},srcline={401}}{5C3337365C3337375C303030325C3030302E5C303030385C3030302E5C303030335C3030305C3034305C303030415C303030735C303030795C3030306E5C303030635C3030302F5C303030415C303030775C303030615C303030695C30303074} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.8}Asynchroní IO}{20}{subsection.2.8}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.8.1}ZeroMQ}{20}{subsubsection.2.8.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.8.2}Work stealing}{20}{subsubsection.2.8.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.8.3}Async/Await}{20}{subsubsection.2.8.3}\protected@file@percent } +\BKM@entry{id=33,open,dest={73756273756273656374696F6E2E322E382E34},srcline={407}}{5C3337365C3337375C303030325C3030302E5C303030385C3030302E5C303030345C3030305C3034305C303030425C3030306F5C3030306F5C303030735C303030745C3030305C3034305C303030415C303030735C303030695C3030306F} +\BKM@entry{id=34,open,dest={73756273756273656374696F6E2E322E382E35},srcline={419}}{5C3337365C3337375C303030325C3030302E5C303030385C3030302E5C303030355C3030305C3034305C303030535C303030745C303030615C303030635C3030306B5C3030305C3034305C303030705C3030306F5C303030695C3030306E5C303030745C303030655C30303072} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.8.4}Boost Asio}{21}{subsubsection.2.8.4}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.8.5}Stack pointer}{21}{subsubsection.2.8.5}\protected@file@percent } +\BKM@entry{id=35,open,dest={73756273656374696F6E2E322E39},srcline={431}}{5C3337365C3337375C303030325C3030302E5C303030395C3030305C3034305C3030304D5C303030655C303030745C303030725C303030695C3030306B5C30303079} +\BKM@entry{id=36,open,dest={73756273756273656374696F6E2E322E392E31},srcline={435}}{5C3337365C3337375C303030325C3030302E5C303030395C3030302E5C303030315C3030305C3034305C303030545C303030695C3030306D5C303030655C303030735C303030635C303030615C3030306C5C303030655C303030445C30303042} +\BKM@entry{id=37,open,dest={73756273756273656374696F6E2E322E392E32},srcline={439}}{5C3337365C3337375C303030325C3030302E5C303030395C3030302E5C303030325C3030305C3034305C303030475C303030725C303030615C303030665C303030615C3030306E5C30303061} +\BKM@entry{id=38,open,dest={73756273756273656374696F6E2E322E392E33},srcline={445}}{5C3337365C3337375C303030325C3030302E5C303030395C3030302E5C303030335C3030305C3034305C303030495C3030306D5C303030475C303030755C30303069} +\BKM@entry{id=39,open,dest={73756273756273656374696F6E2E322E392E34},srcline={449}}{5C3337365C3337375C303030325C3030302E5C303030395C3030302E5C303030345C3030305C3034305C303030545C303030725C303030615C303030635C30303079} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.9}Metriky}{22}{subsection.2.9}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.9.1}TimescaleDB}{22}{subsubsection.2.9.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.9.2}Grafana}{22}{subsubsection.2.9.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.9.3}ImGui}{22}{subsubsection.2.9.3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.9.4}Tracy}{22}{subsubsection.2.9.4}\protected@file@percent } +\BKM@entry{id=40,open,dest={73756273756273656374696F6E2E322E392E35},srcline={453}}{5C3337365C3337375C303030325C3030302E5C303030395C3030302E5C303030355C3030305C3034305C3030304B5C3030306F5C3030306E5C3030306B5C303030725C3030305C3335315C303030745C3030306E5C3030305C3335355C3030305C3034305C3030306D5C303030655C303030745C303030725C303030695C3030306B5C30303079} +\BKM@entry{id=41,open,dest={73756273756273656374696F6E2E322E392E36},srcline={469}}{5C3337365C3337375C303030325C3030302E5C303030395C3030302E5C303030365C3030305C3034305C303030535C303030625C3030305C3335355C303030725C3030305C3334315C3030306E5C3030305C3335355C3030305C3034305C303030765C3030305C3034305C303030725C303030655C3030305C3334315C3030306C5C3030306E5C3030305C3335315C3030306D5C3030305C3034305C3030315C3031355C303030615C303030735C30303065} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.9.5}Konkrétní metriky}{23}{subsubsection.2.9.5}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.9.6}Sbírání v reálném čase}{23}{subsubsection.2.9.6}\protected@file@percent } +\BKM@entry{id=42,open,dest={73656374696F6E2E33},srcline={487}}{5C3337365C3337375C303030335C3030305C3034305C303030485C303030725C303030615C3030305C3034305C303030705C303030725C3030306F5C3030305C3034305C303030765C3030305C3335355C303030635C303030655C3030305C3034305C303030685C303030725C3030305C3334315C3030315C3031355C3030315C313537} +\BKM@entry{id=43,open,dest={73756273656374696F6E2E332E31},srcline={493}}{5C3337365C3337375C303030335C3030302E5C303030315C3030305C3034305C303030485C303030725C30303079} +\BKM@entry{id=44,open,dest={73756273756273656374696F6E2E332E312E31},srcline={507}}{5C3337365C3337375C303030335C3030302E5C303030315C3030302E5C303030315C3030305C3034305C303030455C3030306E5C303030745C30303074} +\@writefile{toc}{\contentsline {section}{\numberline {3}Hra pro více hráčů}{24}{section.3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Hry}{24}{subsection.3.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.1}Entt}{24}{subsubsection.3.1.1}\protected@file@percent } +\BKM@entry{id=45,open,dest={73756273656374696F6E2E332E32},srcline={546}}{5C3337365C3337375C303030335C3030302E5C303030325C3030305C3034305C303030535C303030765C3030315C3033335C30303074} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {3}C++}{25}{lstlisting.3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Svět}{25}{subsection.3.2}\protected@file@percent } +\BKM@entry{id=46,open,dest={73756273756273656374696F6E2E332E322E31},srcline={550}}{5C3337365C3337375C303030335C3030302E5C303030325C3030302E5C303030315C3030305C3034305C3030304F5C303030765C3030306C5C303030615C303030645C303030615C3030315C3031355C3030305C3034305C303030705C303030725C3030306F5C3030305C3034305C303030685C303030725C303030755C3030305C3034305C3030306A5C303030655C303030645C3030306E5C3030306F5C303030685C3030306F5C3030305C3034305C303030685C303030725C3030305C3334315C3030315C3031355C30303065} +\BKM@entry{id=47,open,dest={73756273756273656374696F6E2E332E322E32},srcline={554}}{5C3337365C3337375C303030335C3030302E5C303030325C3030302E5C303030325C3030305C3034305C3030304F5C303030765C3030306C5C303030615C303030645C303030615C3030315C3031355C3030305C3034305C303030705C303030725C3030306F5C3030305C3034305C303030685C303030725C303030755C3030305C3034305C303030765C3030305C3335355C303030635C303030655C3030305C3034305C303030685C303030725C3030305C3334315C3030315C3031355C3030315C313537} +\BKM@entry{id=48,open,dest={73756273656374696F6E2E332E33},srcline={562}}{5C3337365C3337375C303030335C3030302E5C303030335C3030305C3034305C3030304B5C3030306C5C303030695C303030655C3030306E5C303030745C3030302D5C303030535C303030655C303030725C303030765C303030655C303030725C3030305C3034305C303030615C303030725C303030635C303030685C303030695C303030745C303030655C3030306B5C303030745C303030755C303030725C30303061} +\BKM@entry{id=49,open,dest={73756273656374696F6E2E332E34},srcline={574}}{5C3337365C3337375C303030335C3030302E5C303030345C3030305C3034305C303030535C303030655C303030725C303030765C303030655C30303072} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.1}Ovladač pro hru jednoho hráče}{26}{subsubsection.3.2.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.2}Ovladač pro hru více hráčů}{26}{subsubsection.3.2.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Klient-Server architektura}{26}{subsection.3.3}\protected@file@percent } +\BKM@entry{id=50,open,dest={73756273756273656374696F6E2E332E342E31},srcline={579}}{5C3337365C3337375C303030335C3030302E5C303030345C3030302E5C303030315C3030305C3034305C303030525C303030655C303030675C303030695C303030735C303030745C303030725C3030305C3034305C303030735C303030705C3030306F5C3030306A5C303030655C3030306E5C3030305C333535} +\BKM@entry{id=51,open,dest={73756273756273656374696F6E2E332E342E32},srcline={587}}{5C3337365C3337375C303030335C3030302E5C303030345C3030302E5C303030325C3030305C3034305C303030525C303030655C303030705C3030306C5C303030695C3030306B5C3030305C3334315C303030745C3030306F5C30303072} +\BKM@entry{id=52,open,dest={73756273756273656374696F6E2E332E342E33},srcline={593}}{5C3337365C3337375C303030335C3030302E5C303030345C3030302E5C303030335C3030305C3034305C303030495C3030306E5C303030745C303030655C303030725C303030655C303030735C303030745C3030305C3034305C3030306D5C303030615C3030306E5C303030615C303030675C303030655C30303072} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Server}{27}{subsection.3.4}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.1}Registr spojení}{27}{subsubsection.3.4.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.2}Replikátor}{27}{subsubsection.3.4.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.3}Interest manager}{27}{subsubsection.3.4.3}\protected@file@percent } +\BKM@entry{id=53,open,dest={73756273656374696F6E2E332E35},srcline={603}}{5C3337365C3337375C303030335C3030302E5C303030355C3030305C3034305C3030304B5C3030306C5C303030695C303030655C3030306E5C30303074} +\BKM@entry{id=54,open,dest={73756273756273656374696F6E2E332E352E31},srcline={607}}{5C3337365C3337375C303030335C3030302E5C303030355C3030302E5C303030315C3030305C3034305C303030525C303030655C303030705C3030306C5C303030695C303030635C303030615C303030745C3030306F5C303030725C3030305C3034305C303030635C3030306F5C3030306E5C303030745C303030725C3030306F5C3030306C5C3030306C5C303030655C30303072} +\BKM@entry{id=55,open,dest={73756273756273656374696F6E2E332E352E32},srcline={611}}{5C3337365C3337375C303030335C3030302E5C303030355C3030302E5C303030325C3030305C3034305C303030495C3030306E5C303030745C303030655C303030725C303030705C3030306F5C3030306C5C303030615C303030635C30303065} +\BKM@entry{id=56,open,dest={73756273756273656374696F6E2E332E352E33},srcline={620}}{5C3337365C3337375C303030335C3030302E5C303030355C3030302E5C303030335C3030305C3034305C303030525C3030306F5C3030306C5C3030306C5C303030625C303030615C303030635C3030306B5C3030305C3034305C303030615C3030305C3034305C303030735C303030695C3030306D5C303030755C3030306C5C303030615C303030635C303030655C3030305C3034305C303030765C3030306C5C303030615C303030735C303030745C3030306E5C3030305C3335355C303030685C3030306F5C3030305C3034305C303030685C303030725C3030305C3334315C3030315C3031355C30303065} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Klient}{28}{subsection.3.5}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.1}Replicator controller}{28}{subsubsection.3.5.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.2}Interpolace}{28}{subsubsection.3.5.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.3}Rollback a simulace vlastního hráče}{28}{subsubsection.3.5.3}\protected@file@percent } +\BKM@entry{id=57,open,dest={73756273656374696F6E2E332E36},srcline={628}}{5C3337365C3337375C303030335C3030302E5C303030365C3030305C3034305C3030304B5C3030306F5C3030306D5C303030755C3030306E5C303030695C3030306B5C303030615C3030315C3031355C3030306E5C3030305C3335355C3030305C3034305C303030705C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C} +\BKM@entry{id=58,open,dest={73756273656374696F6E2E332E37},srcline={640}}{5C3337365C3337375C303030335C3030302E5C303030375C3030305C3034305C303030505C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C3030305C3034305C303030515C303030555C303030495C303030435C30303072} +\gdef \LT@i {\LT@entry + {1}{142.93542pt}\LT@entry + {1}{1048.79956pt}\LT@entry + {1}{0.0pt}} +\BKM@entry{id=59,open,dest={73756273756273656374696F6E2E332E372E31},srcline={663}}{5C3337365C3337375C303030335C3030302E5C303030375C3030302E5C303030315C3030305C3034305C303030465C303030725C303030615C3030306D5C30303065} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.6}Komunikační protokol}{29}{subsection.3.6}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {3.7}Protokol QUICr}{29}{subsection.3.7}\protected@file@percent } +\@writefile{lot}{\contentsline {table}{\numberline {1}{Rozhraní třídy QuicrEndpoint}}{29}{table.1}\protected@file@percent } +\newlabel{tab:prepinace}{{1}{29}{Rozhraní třídy QuicrEndpoint}{table.1}{}} +\BKM@entry{id=60,open,dest={73756273756273656374696F6E2E332E372E32},srcline={669}}{5C3337365C3337375C303030335C3030302E5C303030375C3030302E5C303030325C3030305C3034305C303030485C303030615C3030306E5C303030645C303030735C303030685C303030615C3030306B5C30303065} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.1}Frame}{30}{subsubsection.3.7.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.2}Handshake}{30}{subsubsection.3.7.2}\protected@file@percent } +\BKM@entry{id=61,open,dest={73756273756273656374696F6E2E332E372E33},srcline={696}}{5C3337365C3337375C303030335C3030302E5C303030375C3030302E5C303030335C3030305C3034305C303030535C303030705C3030306F5C3030306C5C303030655C303030685C3030306C5C303030695C303030765C3030306F5C303030735C30303074} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.3}Spolehlivost}{31}{subsubsection.3.7.3}\protected@file@percent } +\BKM@entry{id=62,open,dest={73756273756273656374696F6E2E332E372E34},srcline={724}}{5C3337365C3337375C303030335C3030302E5C303030375C3030302E5C303030345C3030305C3034305C303030455C3030306E5C3030306B5C3030306F5C303030645C3030305C3335315C30303072} +\BKM@entry{id=63,open,dest={73756273756273656374696F6E2E332E372E35},srcline={730}}{5C3337365C3337375C303030335C3030302E5C303030375C3030302E5C303030355C3030305C3034305C303030545C303030655C303030735C303030745C3030306F5C303030765C3030305C3334315C3030306E5C3030305C333535} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.4}Enkodér}{32}{subsubsection.3.7.4}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.5}Testování}{32}{subsubsection.3.7.5}\protected@file@percent } +\BKM@entry{id=64,open,dest={73756273756273656374696F6E2E332E372E36},srcline={767}}{5C3337365C3337375C303030335C3030302E5C303030375C3030302E5C303030365C3030305C3034305C3030304F5C303030645C303030655C303030735C3030305C3335355C3030306C5C3030305C3334315C3030306E5C3030305C333535} +\BKM@entry{id=65,open,dest={73756273756273656374696F6E2E332E372E37},srcline={778}}{5C3337365C3337375C303030335C3030302E5C303030375C3030302E5C303030375C3030305C3034305C3030315C3031345C303030745C303030655C3030306E5C3030305C333535} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.6}Odesílání}{33}{subsubsection.3.7.6}\protected@file@percent } +\newlabel{integrationcomparison}{{3.7.5}{34}{Testování}{subsubsection.3.7.5}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Integrace}}{34}{figure.1}\protected@file@percent } +\newlabel{playerbenchmark}{{3.7.5}{34}{Testování}{figure.1}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces 301 připojených hráčů}}{34}{figure.2}\protected@file@percent } +\BKM@entry{id=66,open,dest={73756273756273656374696F6E2E332E372E38},srcline={784}}{5C3337365C3337375C303030335C3030302E5C303030375C3030302E5C303030385C3030305C3034305C3030315C3134305C303030695C303030665C303030725C3030306F5C303030765C3030305C3334315C3030306E5C3030305C333535} +\BKM@entry{id=67,open,dest={73756273756273656374696F6E2E332E372E39},srcline={788}}{5C3337365C3337375C303030335C3030302E5C303030375C3030302E5C303030395C3030305C3034305C303030535C303030505C303030525C3030302D5C30303036} +\BKM@entry{id=68,open,dest={73756273756273656374696F6E2E332E372E3130},srcline={793}}{5C3337365C3337375C303030335C3030302E5C303030375C3030302E5C303030315C303030305C3030305C3034305C3030304C5C3030306F5C303030635C3030306B5C303030735C303030745C303030655C30303070} +\BKM@entry{id=69,open,dest={73756273756273656374696F6E2E332E372E3131},srcline={797}}{5C3337365C3337375C303030335C3030302E5C303030375C3030302E5C303030315C303030315C3030305C3034305C303030435C3030306F5C3030306E5C303030675C303030655C303030735C303030745C303030695C3030306F5C3030306E5C3030305C3034305C303030635C3030306F5C3030306E5C303030745C303030725C3030306F5C3030306C} +\BKM@entry{id=70,open,dest={73756273756273656374696F6E2E332E372E3132},srcline={799}}{5C3337365C3337375C303030335C3030302E5C303030375C3030302E5C303030315C303030325C3030305C3034305C303030425C303030615C3030306E5C303030645C303030775C303030695C303030645C303030745C303030685C3030305C3034305C303030635C3030306F5C3030306E5C303030745C303030725C3030306F5C3030306C} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.7}Čtení}{35}{subsubsection.3.7.7}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.8}Šifrování}{35}{subsubsection.3.7.8}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.9}SPR-6}{35}{subsubsection.3.7.9}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.10}Lockstep}{35}{subsubsection.3.7.10}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.11}Congestion control}{35}{subsubsection.3.7.11}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.12}Bandwidth control}{35}{subsubsection.3.7.12}\protected@file@percent } +\BKM@entry{id=71,open,dest={73756273656374696F6E2E332E38},srcline={803}}{5C3337365C3337375C303030335C3030302E5C303030385C3030305C3034305C303030535C303030685C303030615C303030725C303030645C303030695C3030306E5C30303067} +\BKM@entry{id=72,open,dest={73756273656374696F6E2E332E39},srcline={807}}{5C3337365C3337375C303030335C3030302E5C303030395C3030305C3034305C3030304B5C3030306F5C3030306D5C303030705C303030725C303030655C303030735C30303065} +\BKM@entry{id=73,open,dest={73756273756273656374696F6E2E332E392E31},srcline={811}}{5C3337365C3337375C303030335C3030302E5C303030395C3030302E5C303030315C3030305C3034305C303030425C303030695C303030745C3030305C3034305C303030425C303030755C303030665C303030665C303030655C30303072} +\BKM@entry{id=74,open,dest={73756273756273656374696F6E2E332E392E32},srcline={815}}{5C3337365C3337375C303030335C3030302E5C303030395C3030302E5C303030325C3030305C3034305C3030304B5C3030306F5C3030306D5C303030705C303030725C303030655C303030735C303030655C3030305C3034305C303030515C303030555C303030495C303030435C30303072} +\BKM@entry{id=75,open,dest={73756273756273656374696F6E2E332E392E33},srcline={819}}{5C3337365C3337375C303030335C3030302E5C303030395C3030302E5C303030335C3030305C3034305C3030304B5C3030306F5C3030306D5C303030705C303030725C303030655C303030735C303030655C3030305C3034305C303030705C303030725C3030306F5C303030745C3030306F5C3030306B5C3030306F5C3030306C5C303030755C3030305C3034305C303030725C303030655C303030705C3030306C5C303030695C3030306B5C3030305C3334315C303030745C3030306F5C303030725C30303075} +\BKM@entry{id=76,open,dest={73656374696F6E2E34},srcline={830}}{5C3337365C3337375C303030345C3030305C3034305C303030535C303030745C303030795C3030306C5C303030795C3030305C3034305C303030705C303030725C3030306F5C3030305C3034305C303030705C303030735C303030615C3030306E5C3030305C3335355C3030305C3034305C303030625C303030615C3030306B5C303030615C3030306C5C3030305C3334315C3030315C3133315C303030735C3030306B5C3030305C3337355C303030635C303030685C3030305C3034305C303030615C3030305C3034305C303030645C303030695C303030705C3030306C5C3030306F5C3030306D5C3030306F5C303030765C3030305C3337355C303030635C303030685C3030305C3034305C303030705C303030725C303030615C303030635C3030305C333535} +\BKM@entry{id=77,open,dest={73756273656374696F6E2E342E31},srcline={833}}{5C3337365C3337375C303030345C3030302E5C303030315C3030305C3034305C303030505C3030306F5C3030315C3137365C303030615C303030645C303030615C303030765C3030306B5C303030795C3030305C3034305C303030615C3030305C3034305C303030705C3030306F5C303030645C303030705C303030725C3030306F5C303030765C303030615C3030306E5C3030305C3334315C3030305C3034305C303030705C303030725C3030306F5C303030735C303030745C3030315C3133315C303030655C303030645C3030305C333535} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.8}Sharding}{36}{subsection.3.8}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {3.9}Komprese}{36}{subsection.3.9}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.9.1}Bit Buffer}{36}{subsubsection.3.9.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.9.2}Komprese QUICr}{36}{subsubsection.3.9.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.9.3}Komprese protokolu replikátoru}{36}{subsubsection.3.9.3}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {4}Styly pro psaní bakalářských a diplomových prací}{36}{section.4}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Požadavky a podprovaná prostředí}{36}{subsection.4.1}\protected@file@percent } +\BKM@entry{id=78,open,dest={73756273656374696F6E2E342E32},srcline={855}}{5C3337365C3337375C303030345C3030302E5C303030325C3030305C3034305C303030505C3030315C3133315C303030655C303030705C3030305C3335355C3030306E5C303030615C3030315C3031355C30303065} +\gdef \LT@ii {\LT@entry + {1}{83.40999pt}\LT@entry + {1}{98.16246pt}\LT@entry + {1}{239.62204pt}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Přepínače}{37}{subsection.4.2}\protected@file@percent } +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4}Volání třídy \textbf {kidiplom}}{37}{lstlisting.4}\protected@file@percent } +\@writefile{lot}{\contentsline {table}{\numberline {2}{Seznam přepínačů}}{37}{table.2}\protected@file@percent } +\newlabel{tab:prepinace}{{2}{37}{Seznam přepínačů}{table.2}{}} +\BKM@entry{id=79,open,dest={73756273656374696F6E2E342E33},srcline={947}}{5C3337365C3337375C303030345C3030302E5C303030335C3030305C3034305C303030475C303030655C3030306F5C3030306D5C303030655C303030745C303030725C303030695C303030655C3030305C3034305C303030735C303030745C303030725C3030305C3334315C3030306E5C3030306B5C30303079} +\BKM@entry{id=80,open,dest={73656374696F6E2E35},srcline={950}}{5C3337365C3337375C303030355C3030305C3034305C303030535C303030615C3030307A5C303030625C303030615C3030305C3034305C3030315C3031355C3030305C3334315C303030735C303030745C3030305C3335355C3030305C3034305C303030645C3030306F5C3030306B5C303030755C3030306D5C303030655C3030306E5C303030745C30303075} +\BKM@entry{id=81,open,dest={73756273656374696F6E2E352E31},srcline={951}}{5C3337365C3337375C303030355C3030302E5C303030315C3030305C3034305C303030535C303030615C3030307A5C303030625C303030615C3030305C3034305C3030305C3337325C303030765C3030306F5C303030645C3030306E5C3030305C3335355C3030305C3034305C303030735C303030745C303030725C303030615C3030306E5C303030795C3030305C3034305C3030315C3031355C303030695C3030305C3034305C3030306F5C303030625C303030735C303030615C303030685C30303075} +\BKM@entry{id=82,open,dest={73756273656374696F6E2E352E32},srcline={954}}{5C3337365C3337375C303030355C3030302E5C303030325C3030305C3034305C3030305A5C3030305C3334315C303030765C3030315C3033335C303030725C30303079} +\BKM@entry{id=83,open,dest={73756273656374696F6E2E352E33},srcline={969}}{5C3337365C3337375C303030355C3030302E5C303030335C3030305C3034305C3030304D5C303030615C303030745C303030655C3030306D5C303030615C303030745C303030695C3030306B5C30303061} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Geometrie stránky}{40}{subsection.4.3}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {5}Sazba částí dokumentu}{40}{section.5}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Sazba úvodní strany či obsahu}{40}{subsection.5.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Závěry}{40}{subsection.5.2}\protected@file@percent } +\@writefile{lol}{\contentsline {lstlisting}{\numberline {5}Sazba závěrů}{40}{lstlisting.5}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}Matematika}{40}{subsection.5.3}\protected@file@percent } +\BKM@entry{id=84,open,dest={73756273656374696F6E2E352E34},srcline={994}}{5C3337365C3337375C303030355C3030302E5C303030345C3030305C3034305C303030535C303030615C3030307A5C303030625C303030615C3030305C3034305C3030306C5C303030695C303030745C303030655C303030725C303030615C303030745C303030755C303030725C30303079} +\BKM@entry{id=85,open,dest={73756273756273656374696F6E2E352E342E31},srcline={996}}{5C3337365C3337375C303030355C3030302E5C303030345C3030302E5C303030315C3030305C3034305C303030535C303030615C3030307A5C303030625C303030615C3030305C3034305C303030625C303030695C303030625C3030306C5C303030695C3030306F5C303030675C303030725C303030615C303030665C303030695C303030655C3030305C3034305C303030705C3030315C3133315C303030655C303030735C3030305C3034305C303030425C303030695C303030625C3030304C5C303030615C303030545C303030655C30303058} +\BKM@entry{id=86,open,dest={73756273756273656374696F6E2E352E342E32},srcline={1005}}{5C3337365C3337375C303030355C3030302E5C303030345C3030302E5C303030325C3030305C3034305C3030304D5C303030615C3030306E5C303030755C3030305C3334315C3030306C5C3030306E5C3030305C3335355C3030305C3034305C303030735C303030615C3030307A5C303030625C303030615C3030305C3034305C303030625C303030695C303030625C3030306C5C303030695C3030306F5C303030675C303030725C303030615C303030665C303030695C30303065} +\BKM@entry{id=87,open,dest={73756273656374696F6E2E352E35},srcline={1010}}{5C3337365C3337375C303030355C3030302E5C303030355C3030305C3034305C303030445C303030725C3030306F5C303030625C3030306E5C3030305C3334315C3030305C3034305C3030306D5C303030615C3030306B5C303030725C30303061} +\@writefile{toc}{\contentsline {subsection}{\numberline {5.4}Sazba literatury}{41}{subsection.5.4}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.4.1}Sazba bibliografie přes \textsc {Bib}\LaTeX {}}{41}{subsubsection.5.4.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {5.4.2}Manuální sazba bibliografie}{41}{subsubsection.5.4.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {5.5}Drobná makra}{41}{subsection.5.5}\protected@file@percent } +\BKM@entry{id=88,open,dest={73756273656374696F6E2E352E36},srcline={1036}}{5C3337365C3337375C303030355C3030302E5C303030365C3030305C3034305C303030535C303030615C3030307A5C303030625C303030615C3030305C3034305C303030725C303030655C3030306A5C303030735C303030745C3030315C3133315C3030305C3335355C3030306B5C30303075} +\BKM@entry{id=89,open,dest={73756273656374696F6E2E352E37},srcline={1051}}{5C3337365C3337375C303030355C3030302E5C303030375C3030305C3034305C303030535C303030615C3030307A5C303030625C303030615C3030305C3034305C3030307A5C303030645C303030725C3030306F5C3030306A5C3030306F5C303030765C3030305C3337355C303030635C303030685C3030305C3034305C3030306B5C3030305C3336335C303030645C3030315C313537} +\@writefile{toc}{\contentsline {subsection}{\numberline {5.6}Sazba rejstříku}{42}{subsection.5.6}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {5.7}Sazba zdrojových kódů}{42}{subsection.5.7}\protected@file@percent } +\@writefile{loe}{\contentsline {definition}{\ifthmt@listswap Definice~4\else \numberline {4}Definice\fi \thmtformatoptarg {Název definice}}{42}{definition.4}\protected@file@percent } +\@writefile{lot}{\contentsline {table}{\numberline {3}{\ignorespaces Odstavce v tabulkách}}{43}{table.3}\protected@file@percent } +\newlabel{tab:odstavce}{{3}{43}{Odstavce v tabulkách}{table.3}{}} +\@writefile{loe}{\contentsline {proof}{\ifthmt@listswap \else \numberline {\let \autodot \@empty }\fi D\r {u}kaz\thmtformatoptarg {Název důkazu}}{44}{thmt@dummyctr.dummy.5}\protected@file@percent } +\@writefile{loe}{\contentsline {remark}{\ifthmt@listswap Pozn\'{a}mka~5\else \numberline {5}Pozn\'{a}mka\fi \thmtformatoptarg {Pumpovací věta}}{44}{remark.5}\protected@file@percent } +\@writefile{loe}{\contentsline {example}{\ifthmt@listswap P\v {r}\'{i}klad~6\else \numberline {6}P\v {r}\'{i}klad\fi \thmtformatoptarg {Pumpovací věta}}{44}{example.6}\protected@file@percent } +\@writefile{loe}{\contentsline {lemma}{\ifthmt@listswap Lemma~7\else \numberline {7}Lemma\fi \thmtformatoptarg {Název definice}}{44}{lemma.7}\protected@file@percent } +\@writefile{loe}{\contentsline {consequence}{\ifthmt@listswap D\r {u}sledek~8\else \numberline {8}D\r {u}sledek\fi \thmtformatoptarg {Název důkazu}}{44}{consequence.8}\protected@file@percent } +\@writefile{loe}{\contentsline {theorem}{\ifthmt@listswap V\v {e}ta~9\else \numberline {9}V\v {e}ta\fi \thmtformatoptarg {Pumpovací věta}}{44}{theorem.9}\protected@file@percent } +\newlabel{kod:cpp}{{6}{44}{\cpp }{lstlisting.6}{}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {6}C\kern -.05em\raise .38ex\hbox {\scriptsize {++}}}{44}{lstlisting.6}\protected@file@percent } +\@writefile{lol}{\contentsline {lstlisting}{\numberline {7}JS}{44}{lstlisting.7}\protected@file@percent } +\@writefile{lol}{\contentsline {lstlisting}{\numberline {8}C\kern -.03em\raise .38ex\hbox {\scriptsize {\#}}}{45}{lstlisting.8}\protected@file@percent } +\@writefile{lol}{\contentsline {lstlisting}{\numberline {9}SQL}{45}{lstlisting.9}\protected@file@percent } +\@writefile{lol}{\contentsline {lstlisting}{\numberline {10}TutorialD}{45}{lstlisting.10}\protected@file@percent } +\BKM@entry{id=90,open,dest={73656374696F6E2A2E33},srcline={1120}}{5C3337365C3337375C3030305A5C3030305C3334315C303030765C3030315C3033335C30303072} +\@writefile{toc}{\contentsline {section}{Z\'av\v er}{46}{section*.3}\protected@file@percent } +\babel@aux{czech}{} +\babel@aux{czech}{} +\BKM@entry{id=91,open,dest={73656374696F6E2A2E35},srcline={1123}}{5C3337365C3337375C303030435C3030306F5C3030306E5C303030635C3030306C5C303030755C303030735C303030695C3030306F5C3030306E5C30303073} +\@writefile{toc}{\contentsline {section}{Conclusions}{47}{section*.5}\protected@file@percent } +\babel@aux{english}{} +\babel@aux{czech}{} +\BKM@entry{id=92,open,dest={617070656E6469782E41},srcline={1130}}{5C3337365C3337375C303030415C3030305C3034305C303030505C303030725C303030765C3030306E5C3030305C3335355C3030305C3034305C303030705C3030315C3133315C3030305C3335355C3030306C5C3030306F5C303030685C30303061} +\BKM@entry{id=93,open,dest={617070656E6469782E42},srcline={1133}}{5C3337365C3337375C303030425C3030305C3034305C303030445C303030725C303030755C303030685C3030305C3334315C3030305C3034305C303030705C3030315C3133315C3030305C3335355C3030306C5C3030306F5C303030685C30303061} +\BKM@entry{id=94,open,dest={617070656E6469782E43},srcline={1138}}{5C3337365C3337375C303030435C3030305C3034305C3030304F5C303030625C303030735C303030615C303030685C3030305C3034305C303030655C3030306C5C303030655C3030306B5C303030745C303030725C3030306F5C3030306E5C303030695C303030635C3030306B5C3030305C3337355C303030635C303030685C3030305C3034305C303030645C303030615C30303074} +\@writefile{toc}{\contentsline {section}{\numberline {A}První příloha}{48}{appendix.A}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {B}Druhá příloha}{48}{appendix.B}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {C}Obsah elektronických dat}{48}{appendix.C}\protected@file@percent } +\newlabel{sec:ObsahData}{{C}{48}{Obsah elektronických dat}{appendix.C}{}} +\BKM@entry{id=95,open,dest={73656374696F6E2A2E37},srcline={1205}}{5C3337365C3337375C303030535C303030655C3030307A5C3030306E5C303030615C3030306D5C3030305C3034305C3030307A5C3030306B5C303030725C303030615C303030745C303030655C3030306B} +\abx@aux@nociteall +\@writefile{toc}{\contentsline {section}{Seznam zkratek}{50}{section*.7}\protected@file@percent } +\BKM@entry{id=96,open,dest={73656374696F6E2A2E38},srcline={1215}}{5C3337365C3337375C3030304C5C303030695C303030745C303030655C303030725C303030615C303030745C303030755C303030725C30303061} +\abx@aux@read@bbl@mdfivesum{D41D8CD98F00B204E9800998ECF8427E} +\abx@aux@read@bblrerun +\newlabel{LastPage}{{C}{50}{Obsah elektronických dat}{page.50}{}} +\gdef\lastpage@lastpage{50} +\gdef\lastpage@lastpageHy{50} +\gdef \@abspage@last{50} diff --git a/kidiplom.bbl b/kidiplom.bbl new file mode 100644 index 0000000..e69de29 diff --git a/kidiplom.bcf b/kidiplom.bcf new file mode 100644 index 0000000..c990120 --- /dev/null +++ b/kidiplom.bcf @@ -0,0 +1,2182 @@ + + + + + + output_encoding + utf8 + + + input_encoding + utf8 + + + debug + 0 + + + mincrossrefs + 2 + + + minxrefs + 2 + + + sortcase + 1 + + + sortupper + 1 + + + + + + + alphaothers + + + + + extradatecontext + labelname + labeltitle + + + labelalpha + 0 + + + labelnamespec + shortauthor + author + shorteditor + editor + translator + + + labeltitle + 0 + + + labeltitlespec + shorttitle + title + maintitle + + + labeltitleyear + 0 + + + labeldateparts + 0 + + + labeldatespec + date + year + eventdate + origdate + urldate + nodate + + + julian + 0 + + + gregorianstart + 1582-10-15 + + + maxalphanames + 3 + + + maxbibnames + 5 + + + maxcitenames + 5 + + + maxsortnames + 5 + + + maxitems + 3 + + + minalphanames + 1 + + + minbibnames + 3 + + + mincitenames + 3 + + + minsortnames + 3 + + + minitems + 1 + + + nohashothers + 0 + + + noroman + 0 + + + nosortothers + 0 + + + pluralothers + 0 + + + singletitle + 0 + + + skipbib + 0 + + + skipbiblist + 0 + + + skiplab + 0 + + + sortalphaothers + + + + + sortlocale + cs_CZ + + + sortingtemplatename + none + + + sortsets + 0 + + + uniquelist + false + + + uniquename + false + + + uniqueprimaryauthor + 0 + + + uniquetitle + 0 + + + uniquebaretitle + 0 + + + uniquework + 0 + + + useprefix + 0 + + + useafterword + 1 + + + useannotator + 1 + + + useauthor + 1 + + + usebookauthor + 1 + + + usecommentator + 1 + + + useeditor + 1 + + + useeditora + 1 + + + useeditorb + 1 + + + useeditorc + 1 + + + useforeword + 1 + + + useholder + 1 + + + useintroduction + 1 + + + usenamea + 1 + + + usenameb + 1 + + + usenamec + 1 + + + usetranslator + 0 + + + useshortauthor + 1 + + + useshorteditor + 1 + + + usesupervisor + 1 + + + + + datamodel + labelalphanametemplate + labelalphatemplate + inheritance + translit + uniquenametemplate + namehashtemplate + sortingnamekeytemplate + sortingtemplate + extradatespec + extradatecontext + labelnamespec + labeltitlespec + labeldatespec + controlversion + alphaothers + sortalphaothers + presort + citepagerange + texencoding + bibencoding + sortingtemplatename + sortlocale + language + autolang + langhook + indexing + hyperref + backrefsetstyle + block + pagetracker + citecounter + citetracker + ibidtracker + idemtracker + opcittracker + loccittracker + labeldate + labeltime + dateera + date + time + eventdate + eventtime + origdate + origtime + urldate + urltime + alldatesusetime + alldates + alltimes + gregorianstart + autocite + notetype + uniquelist + uniquename + refsection + refsegment + citereset + sortlos + babel + datelabel + backrefstyle + arxiv + familyinits + giveninits + prefixinits + suffixinits + useafterword + useannotator + useauthor + usebookauthor + usecommentator + useeditor + useeditora + useeditorb + useeditorc + useforeword + useholder + useintroduction + usenamea + usenameb + usenamec + usetranslator + useshortauthor + useshorteditor + usesupervisor + debug + loadfiles + safeinputenc + sortcase + sortupper + terseinits + abbreviate + dateabbrev + clearlang + sortcites + sortsets + backref + backreffloats + trackfloats + parentracker + labeldateusetime + datecirca + dateuncertain + dateusetime + eventdateusetime + origdateusetime + urldateusetime + julian + datezeros + timezeros + timezones + seconds + autopunct + punctfont + labelnumber + labelalpha + labeltitle + labeltitleyear + labeldateparts + pluralothers + nohashothers + nosortothers + noroman + singletitle + uniquetitle + uniquebaretitle + uniquework + uniqueprimaryauthor + defernumbers + locallabelwidth + bibwarn + useprefix + skipbib + skipbiblist + skiplab + dataonly + defernums + firstinits + sortfirstinits + sortgiveninits + labelyear + spacecolon + bibtexcaseprotection + mincrossrefs + minxrefs + maxnames + minnames + maxbibnames + minbibnames + maxcitenames + mincitenames + maxsortnames + minsortnames + maxitems + minitems + maxalphanames + minalphanames + maxparens + dateeraauto + + + alphaothers + sortalphaothers + presort + indexing + citetracker + ibidtracker + idemtracker + opcittracker + loccittracker + uniquelist + uniquename + familyinits + giveninits + prefixinits + suffixinits + useafterword + useannotator + useauthor + usebookauthor + usecommentator + useeditor + useeditora + useeditorb + useeditorc + useforeword + useholder + useintroduction + usenamea + usenameb + usenamec + usetranslator + useshortauthor + useshorteditor + usesupervisor + terseinits + abbreviate + dateabbrev + clearlang + labelnumber + labelalpha + labeltitle + labeltitleyear + labeldateparts + nohashothers + nosortothers + noroman + singletitle + uniquetitle + uniquebaretitle + uniquework + uniqueprimaryauthor + useprefix + skipbib + skipbiblist + skiplab + dataonly + skiplos + labelyear + bibtexcaseprotection + labelalphatemplate + translit + sortexclusion + sortinclusion + extradatecontext + labelnamespec + labeltitlespec + labeldatespec + maxnames + minnames + maxbibnames + minbibnames + maxcitenames + mincitenames + maxsortnames + minsortnames + maxitems + minitems + maxalphanames + minalphanames + + + noinherit + nametemplates + labelalphanametemplatename + uniquenametemplatename + namehashtemplatename + sortingnamekeytemplatename + presort + indexing + citetracker + ibidtracker + idemtracker + opcittracker + loccittracker + uniquelist + uniquename + familyinits + giveninits + prefixinits + suffixinits + useafterword + useannotator + useauthor + usebookauthor + usecommentator + useeditor + useeditora + useeditorb + useeditorc + useforeword + useholder + useintroduction + usenamea + usenameb + usenamec + usetranslator + useshortauthor + useshorteditor + usesupervisor + terseinits + abbreviate + dateabbrev + clearlang + labelnumber + labelalpha + labeltitle + labeltitleyear + labeldateparts + nohashothers + nosortothers + noroman + singletitle + uniquetitle + uniquebaretitle + uniquework + uniqueprimaryauthor + useprefix + skipbib + skipbiblist + skiplab + dataonly + skiplos + bibtexcaseprotection + maxnames + minnames + maxbibnames + minbibnames + maxcitenames + mincitenames + maxsortnames + minsortnames + maxitems + minitems + maxalphanames + minalphanames + + + nametemplates + labelalphanametemplatename + uniquenametemplatename + namehashtemplatename + sortingnamekeytemplatename + uniquelist + uniquename + familyinits + giveninits + prefixinits + suffixinits + terseinits + nohashothers + nosortothers + useprefix + + + nametemplates + labelalphanametemplatename + uniquenametemplatename + namehashtemplatename + sortingnamekeytemplatename + uniquename + familyinits + giveninits + prefixinits + suffixinits + terseinits + useprefix + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + prefix + family + + + + + shorthand + label + labelname + labelname + + + year + + + + + + labelyear + year + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + prefix + family + given + + + + family + given + prefix + suffix + + + + + prefix + family + + + given + + + suffix + + + prefix + + + mm + + + + sf,sm,sn,pf,pm,pn,pp + family,given,prefix,suffix + boolean,integer,string,xml + default,transliteration,transcription,translation + + + article + artwork + audio + bibnote + book + bookinbook + booklet + collection + commentary + customa + customb + customc + customd + custome + customf + dataset + inbook + incollection + inproceedings + inreference + image + jurisdiction + legal + legislation + letter + manual + misc + movie + music + mvcollection + mvreference + mvproceedings + mvbook + online + patent + performance + periodical + proceedings + reference + report + review + set + software + standard + suppbook + suppcollection + suppperiodical + thesis + unpublished + video + xdata + + + sortyear + volume + volumes + abstract + addendum + annotation + booksubtitle + booktitle + booktitleaddon + chapter + edition + eid + entrysubtype + eprintclass + eprinttype + eventtitle + eventtitleaddon + gender + howpublished + indexsorttitle + indextitle + isan + isbn + ismn + isrn + issn + issue + issuesubtitle + issuetitle + issuetitleaddon + iswc + journalsubtitle + journaltitle + journaltitleaddon + label + langid + langidopts + library + mainsubtitle + maintitle + maintitleaddon + nameaddon + note + number + origtitle + pagetotal + part + relatedstring + relatedtype + reprinttitle + series + shorthandintro + subtitle + title + titleaddon + usera + userb + userc + userd + usere + userf + venue + version + shorthand + shortjournal + shortseries + shorttitle + sorttitle + sortshorthand + sortkey + presort + institution + lista + listb + listc + listd + liste + listf + location + organization + origlocation + origpublisher + publisher + afterword + annotator + author + bookauthor + commentator + editor + editora + editorb + editorc + foreword + holder + introduction + namea + nameb + namec + translator + shortauthor + shorteditor + sortname + authortype + editoratype + editorbtype + editorctype + editortype + bookpagination + nameatype + namebtype + namectype + pagination + pubstate + type + language + origlanguage + crossref + xref + date + endyear + year + month + day + hour + minute + second + timezone + yeardivision + endmonth + endday + endhour + endminute + endsecond + endtimezone + endyeardivision + eventdate + eventendyear + eventyear + eventmonth + eventday + eventhour + eventminute + eventsecond + eventtimezone + eventyeardivision + eventendmonth + eventendday + eventendhour + eventendminute + eventendsecond + eventendtimezone + eventendyeardivision + origdate + origendyear + origyear + origmonth + origday + orighour + origminute + origsecond + origtimezone + origyeardivision + origendmonth + origendday + origendhour + origendminute + origendsecond + origendtimezone + origendyeardivision + urldate + urlendyear + urlyear + urlmonth + urlday + urlhour + urlminute + urlsecond + urltimezone + urlyeardivision + urlendmonth + urlendday + urlendhour + urlendminute + urlendsecond + urlendtimezone + urlendyeardivision + doi + eprint + file + verba + verbb + verbc + url + xdata + ids + entryset + related + keywords + options + relatedoptions + pages + execute + supervisor + dateaddon + + + abstract + annotation + authortype + bookpagination + crossref + day + doi + eprint + eprintclass + eprinttype + endday + endhour + endminute + endmonth + endsecond + endtimezone + endyear + endyeardivision + entryset + entrysubtype + execute + file + gender + hour + ids + indextitle + indexsorttitle + isan + ismn + iswc + keywords + label + langid + langidopts + library + lista + listb + listc + listd + liste + listf + minute + month + namea + nameb + namec + nameatype + namebtype + namectype + nameaddon + options + origday + origendday + origendhour + origendminute + origendmonth + origendsecond + origendtimezone + origendyear + origendyeardivision + orighour + origminute + origmonth + origsecond + origtimezone + origyear + origyeardivision + origlocation + origpublisher + origtitle + pagination + presort + related + relatedoptions + relatedstring + relatedtype + second + shortauthor + shorteditor + shorthand + shorthandintro + shortjournal + shortseries + shorttitle + sortkey + sortname + sortshorthand + sorttitle + sortyear + timezone + url + urlday + urlendday + urlendhour + urlendminute + urlendmonth + urlendsecond + urlendtimezone + urlendyear + urlhour + urlminute + urlmonth + urlsecond + urltimezone + urlyear + usera + userb + userc + userd + usere + userf + verba + verbb + verbc + xdata + xref + year + yeardivision + + + set + entryset + + + article + addendum + annotator + author + commentator + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + eid + issn + issue + issuetitle + issuesubtitle + issuetitleaddon + journalsubtitle + journaltitle + journaltitleaddon + language + note + number + origlanguage + pages + pubstate + series + subtitle + title + titleaddon + translator + version + volume + + + bibnote + note + + + book + author + addendum + afterword + annotator + chapter + commentator + edition + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + eid + foreword + introduction + isbn + language + location + maintitle + maintitleaddon + mainsubtitle + note + number + origlanguage + pages + pagetotal + part + publisher + pubstate + series + subtitle + title + titleaddon + translator + volume + volumes + + + mvbook + addendum + afterword + annotator + author + commentator + edition + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + foreword + introduction + isbn + language + location + note + number + origlanguage + pagetotal + publisher + pubstate + series + subtitle + title + titleaddon + translator + volume + volumes + + + inbook + bookinbook + suppbook + addendum + afterword + annotator + author + booktitle + bookauthor + booksubtitle + booktitleaddon + chapter + commentator + edition + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + eid + foreword + introduction + isbn + language + location + mainsubtitle + maintitle + maintitleaddon + note + number + origlanguage + part + publisher + pages + pubstate + series + subtitle + title + titleaddon + translator + volume + volumes + + + booklet + addendum + author + chapter + editor + editortype + eid + howpublished + language + location + note + pages + pagetotal + pubstate + subtitle + title + titleaddon + type + + + collection + reference + addendum + afterword + annotator + chapter + commentator + edition + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + eid + foreword + introduction + isbn + language + location + mainsubtitle + maintitle + maintitleaddon + note + number + origlanguage + pages + pagetotal + part + publisher + pubstate + series + subtitle + title + titleaddon + translator + volume + volumes + + + mvcollection + mvreference + addendum + afterword + annotator + author + commentator + edition + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + foreword + introduction + isbn + language + location + note + number + origlanguage + publisher + pubstate + subtitle + title + titleaddon + translator + volume + volumes + + + incollection + suppcollection + inreference + addendum + afterword + annotator + author + booksubtitle + booktitle + booktitleaddon + chapter + commentator + edition + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + eid + foreword + introduction + isbn + language + location + mainsubtitle + maintitle + maintitleaddon + note + number + origlanguage + pages + part + publisher + pubstate + series + subtitle + title + titleaddon + translator + volume + volumes + + + dataset + addendum + author + edition + editor + editortype + language + location + note + number + organization + publisher + pubstate + series + subtitle + title + titleaddon + type + version + + + manual + addendum + author + chapter + edition + editor + editortype + eid + isbn + language + location + note + number + organization + pages + pagetotal + publisher + pubstate + series + subtitle + title + titleaddon + type + version + + + misc + software + addendum + author + editor + editortype + howpublished + language + location + note + organization + pubstate + subtitle + title + titleaddon + type + version + + + online + addendum + author + editor + editortype + language + note + organization + pubstate + subtitle + title + titleaddon + version + + + patent + addendum + author + holder + location + note + number + pubstate + subtitle + title + titleaddon + type + version + + + periodical + addendum + editor + editora + editorb + editorc + editortype + editoratype + editorbtype + editorctype + issn + issue + issuesubtitle + issuetitle + issuetitleaddon + language + note + number + pubstate + series + subtitle + title + titleaddon + volume + yeardivision + + + mvproceedings + addendum + editor + editortype + eventday + eventendday + eventendhour + eventendminute + eventendmonth + eventendsecond + eventendtimezone + eventendyear + eventendyeardivision + eventhour + eventminute + eventmonth + eventsecond + eventtimezone + eventyear + eventyeardivision + eventtitle + eventtitleaddon + isbn + language + location + note + number + organization + pagetotal + publisher + pubstate + series + subtitle + title + titleaddon + venue + volumes + + + proceedings + addendum + chapter + editor + editortype + eid + eventday + eventendday + eventendhour + eventendminute + eventendmonth + eventendsecond + eventendtimezone + eventendyear + eventendyeardivision + eventhour + eventminute + eventmonth + eventsecond + eventtimezone + eventyear + eventyeardivision + eventtitle + eventtitleaddon + isbn + language + location + mainsubtitle + maintitle + maintitleaddon + note + number + organization + pages + pagetotal + part + publisher + pubstate + series + subtitle + title + titleaddon + venue + volume + volumes + + + inproceedings + addendum + author + booksubtitle + booktitle + booktitleaddon + chapter + editor + editortype + eid + eventday + eventendday + eventendhour + eventendminute + eventendmonth + eventendsecond + eventendtimezone + eventendyear + eventendyeardivision + eventhour + eventminute + eventmonth + eventsecond + eventtimezone + eventyear + eventyeardivision + eventtitle + eventtitleaddon + isbn + language + location + mainsubtitle + maintitle + maintitleaddon + note + number + organization + pages + part + publisher + pubstate + series + subtitle + title + titleaddon + venue + volume + volumes + + + report + addendum + author + chapter + eid + institution + isrn + language + location + note + number + pages + pagetotal + pubstate + subtitle + title + titleaddon + type + version + + + thesis + addendum + author + chapter + eid + institution + language + location + note + pages + pagetotal + pubstate + subtitle + title + titleaddon + type + + + unpublished + addendum + author + eventday + eventendday + eventendhour + eventendminute + eventendmonth + eventendsecond + eventendtimezone + eventendyear + eventendyeardivision + eventhour + eventminute + eventmonth + eventsecond + eventtimezone + eventyear + eventyeardivision + eventtitle + eventtitleaddon + howpublished + language + location + note + pubstate + subtitle + title + titleaddon + type + venue + + + thesis + supervisor + + + dateaddon + + + abstract + addendum + afterword + annotator + author + bookauthor + booksubtitle + booktitle + booktitleaddon + chapter + commentator + editor + editora + editorb + editorc + foreword + holder + institution + introduction + issuesubtitle + issuetitle + issuetitleaddon + journalsubtitle + journaltitle + journaltitleaddon + location + mainsubtitle + maintitle + maintitleaddon + nameaddon + note + organization + origlanguage + origlocation + origpublisher + origtitle + part + publisher + relatedstring + series + shortauthor + shorteditor + shorthand + shortjournal + shortseries + shorttitle + sortname + sortshorthand + sorttitle + subtitle + title + titleaddon + translator + venue + + + article + book + inbook + bookinbook + suppbook + booklet + collection + incollection + suppcollection + manual + misc + mvbook + mvcollection + online + patent + periodical + suppperiodical + proceedings + inproceedings + reference + inreference + report + set + thesis + unpublished + + + date + year + + + + + set + + entryset + + + + article + + author + journaltitle + title + + + + book + mvbook + + author + title + + + + inbook + bookinbook + suppbook + + author + title + booktitle + + + + booklet + + + author + editor + + title + + + + collection + reference + mvcollection + mvreference + + editor + title + + + + incollection + suppcollection + inreference + + author + editor + title + booktitle + + + + dataset + + title + + + + manual + + title + + + + misc + software + + title + + + + online + + title + + url + doi + eprint + + + + + patent + + author + title + number + + + + periodical + + editor + title + + + + proceedings + mvproceedings + + title + + + + inproceedings + + author + title + booktitle + + + + report + + author + title + type + institution + + + + thesis + + author + title + type + institution + + + + unpublished + + author + title + + + + + isbn + + + issn + + + ismn + + + gender + + + + + + + bibliografie.bib + + + * + + + + + citeorder + + + intciteorder + + + + + + diff --git a/kidiplom.blg b/kidiplom.blg new file mode 100644 index 0000000..43aa005 --- /dev/null +++ b/kidiplom.blg @@ -0,0 +1,48 @@ +This is BibTeX, Version 0.99d (TeX Live 2026/dev/Arch Linux) +Capacity: max_strings=200000, hash_size=200000, hash_prime=170003 +The top-level auxiliary file: kidiplom.aux +I found no \citation commands---while reading file kidiplom.aux +I found no \bibdata command---while reading file kidiplom.aux +I found no \bibstyle command---while reading file kidiplom.aux +You've used 0 entries, + 0 wiz_defined-function locations, + 83 strings with 490 characters, +and the built_in function-call counts, 0 in all, are: += -- 0 +> -- 0 +< -- 0 ++ -- 0 +- -- 0 +* -- 0 +:= -- 0 +add.period$ -- 0 +call.type$ -- 0 +change.case$ -- 0 +chr.to.int$ -- 0 +cite$ -- 0 +duplicate$ -- 0 +empty$ -- 0 +format.name$ -- 0 +if$ -- 0 +int.to.chr$ -- 0 +int.to.str$ -- 0 +missing$ -- 0 +newline$ -- 0 +num.names$ -- 0 +pop$ -- 0 +preamble$ -- 0 +purify$ -- 0 +quote$ -- 0 +skip$ -- 0 +stack$ -- 0 +substring$ -- 0 +swap$ -- 0 +text.length$ -- 0 +text.prefix$ -- 0 +top$ -- 0 +type$ -- 0 +warning$ -- 0 +while$ -- 0 +width$ -- 0 +write$ -- 0 +(There were 3 error messages) diff --git a/kidiplom.cls b/kidiplom.cls new file mode 100644 index 0000000..f11eaee --- /dev/null +++ b/kidiplom.cls @@ -0,0 +1,622 @@ +%%% KI PřF UP v Olomouci Diplom Class +%%% Copyright (C) 2012 Martin Rotter, +%%% Copyright (C) 2014 Jan Outrata, + +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{kidiplom}[2012/09/09 KI PrF UP v Olomouci Diploma Class] +\ClassWarningNoLine{kidiplom}{[kidiplom] You are using kidiplom class 1.2} + +%% Základní třída a velikost písma 12pt. +\LoadClass[12pt]{article} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Parametry. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\RequirePackage{kvoptions} + +\SetupKeyvalOptions { + family=kid, + prefix=kid@ +} + +%% [init]{name}[default] +%% diplomová práce, jinak bakalářská +\DeclareBoolOption{master} +%% studijní program/obor a specializace autora: pro diplomovou práci +%% infoi, infui, inf, ainfpst, ainf, uinf a binf, jinak ainfvs, pro +%% bakalářskou práci infoi, inf, itp, itk, ainfp, ainfk, infv a binf, +%% jinak infpvs +\DeclareStringOption[infpvs]{program}[infpvs] +\DeclareStringOption[false]{printversion}[true] +\DeclareStringOption[true]{joinlists}[true] +\DeclareStringOption[true]{figures}[true] +\DeclareStringOption[true]{tables}[true] +\DeclareStringOption[false]{theorems}[true] +\DeclareStringOption[false]{sourcecodes}[true] +\DeclareStringOption[false]{biblatex}[true] +\DeclareStringOption[czech]{language}[czech] +\DeclareStringOption[false]{glossaries}[true] +\DeclareStringOption[false]{index}[true] +\DeclareStringOption[serif]{font}[serif] +\DeclareStringOption[utf8]{encoding}[utf8] +\DeclareStringOption[utf8]{bibencoding}[utf8] + +%% Nerozpoznaný parametr hodí chybu. +\DeclareDefaultOption{\ClassWarningNoLine{kidiplom}{[kidiplom] Option '\CurrentOption' was not recognized}} + +\ProcessKeyvalOptions* + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Balíky. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% KI PřF UP v Olomouci Base styl. +\RequirePackage[ + printversion=\kid@printversion, + joinlists=\kid@joinlists, + figures=\kid@figures, + tables=\kid@tables, + theorems=\kid@theorems, + sourcecodes=\kid@sourcecodes, + biblatex=\kid@biblatex, + language=\kid@language, + glossaries=\kid@glossaries, + index=\kid@index, + font=\kid@font, + encoding=\kid@encoding, + bibencoding=\kid@bibencoding +]{kibase} + +%% Oboustranná sazba není povolená. +\ifthenelse{\boolean{@twoside}}{ + \ClassError{kidiplom}{Two-sided document mode is not allowed for kidiplom.} +}{} + +%% Geometrie papíru. +\RequirePackage[ + paper=a4paper, + driver=pdftex, + top=3.5cm, + left=4cm, + bottom=3.5cm, + width=1.05\textwidth +]{geometry} + +%% Číslo poslední strany: label LastPage. +\RequirePackage{lastpage} + +%% AMS symboly. +\RequirePackage{amsbsy} +\RequirePackage{amssymb} +\RequirePackage{euscript} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Dynamické texty. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% Čeština. +\def\@bachelorcz{bakal\'a\v rsk\'a pr\'ace} +\def\@mastercz{diplomov\'a pr\'ace} +\def\@programinfcz{Informatika} +\def\@programainfcz{Aplikovan\'a informatika} +\def\@programitcz{Informa\v cn\'i technologie} +\def\@programinfvcz{Informatika pro vzd\v el\'av\'an\'i} +\def\@programuinfcz{U\v citelstv\'i informatiky pro + st\v redn\'i \v skoly} +\def\@programbinfcz{Bioinformatika} +\def\@specialoicz{Obecn\'a informatika} +\def\@specialpvscz{Programov\'an\'i a v\'yvoj software} +\def\@specialuicz{Um\v el\'a inteligence} +\def\@specialvscz{V\'yvoj software} +\def\@specialpstcz{Po\v c\'ita\v cov\'e syst\'emy a technologie} +\def\@presentformcz{prezen\v cn\'i forma} +\def\@combinedformcz{kombinovan\'a forma} +\def\@czlangcz{\v cesk\'y} +\def\@enlangcz{anglick\'y} +\def\@sklangcz{slovensk\'y} + +\def\@textbibinfocz{Bibliografick\'e \'udaje} +\def\@texttitlecz{N\'azev pr\'ace} +\def\@textauthorcz{Autor} +\def\@textthesistypecz{Typ pr\'ace} +\def\@textdeptcz{Pracovi\v st\v e} +\def\@textyearofsubmitcz{Rok obhajoby} +\def\@textpagescz{Po\v cet stran} +\def\@textsupplcz{P\v r\'ilohy} +\def\@textsupervisorcz{Vedouc\'i pr\'ace} +\def\@textprogramcz{Studijn\'i program} +%\def\@textfieldcz{Studijn\'i obor} +\def\@textspecialcz{Specializace} +\def\@textlangcz{Jazyk práce} +\def\@textanotcz{Anotace} +\def\@textkeywordscz{Klí\v cov\'a slova} +\def\@textconclusionscz{Z\'av\v er} + +%% Angličtina. +\def\@bacheloren{bachelor thesis} +\def\@masteren{master thesis} +\def\@programinfen{Computer Science} +\def\@programainfen{Applied Computer Science} +\def\@programinfven{Computer Science for Education} +\def\@programiten{Information Technologies} +\def\@programuinfen{Teaching Training in Computer Science for Secondary Schools} +\def\@programbinfen{Bioinformatics} +\def\@specialoien{General Computer Science} +\def\@specialpvsen{Programming and Software Development} +\def\@specialuien{Artificial Intelligence} +\def\@specialvsen{Software Development} +\def\@specialpsten{Computer Systems and Technologies} +\def\@presentformen{full-time form} +\def\@combinedformen{combined form} +\def\@czlangen{Czech} +\def\@enlangen{English} +\def\@sklangen{Slovak} + +\def\@textbibinfoen{Bibliographic info} +\def\@texttitleen{Title} +\def\@textauthoren{Author} +\def\@textthesistypeen{Thesis type} +\def\@textdepten{Department} +\def\@textyearofsubmiten{Year of defense} +\def\@textpagesen{Page count} +\def\@textsupplen{Supplements} +\def\@textsupervisoren{Supervisor} +\def\@textprogramen{Study program} +%\def\@textfielden{Study field} +\def\@textspecialen{Specialization} +\def\@textlangen{Thesis language} +\def\@textanoten{Synopsis} +\def\@textkeywordsen{Keywords} +\def\@textconclusionsen{Conclusions} + +%% Slovenština. +\def\@textanotsk{Anot\'acia} +\def\@textkeywordssk{K\v lú\v cov\'e slov\'a} +\def\@textconclusionssk{Z\'aver} + +%% Typ práce a studijní obor autora (podle typu práce). +\ifthenelse{\boolean{kid@master}}{ + %% Magisterská. + \def\@thesistypecz{\@mastercz} + \def\@thesistypeen{\@masteren} + \ifthenelse{\equal{\kid@program}{infoi}}{ + \def\@programen{\@programinfen, \@textspecialen: \@specialoien} + \def\@programcz{\@programinfcz, \@textspecialcz: \@specialoicz} + }{ + \ifthenelse{\equal{\kid@program}{infui}}{ + \def\@programen{\@programinfen, \@textspecialen: \@specialuien} + \def\@programcz{\@programinfcz, \@textspecialcz: \@specialuicz} + }{ + \ifthenelse{\equal{\kid@program}{ainfpst}}{ + \def\@programen{\@programainfen, \@textspecialen: \@specialpsten} + \def\@programcz{\@programainfcz, \@textspecialcz: \@specialpstcz} + }{ + \ifthenelse{\equal{\kid@program}{uinf}}{ + \def\@programen{\@programuinfen, \@presentformen} + \def\@programcz{\@programuinfcz, \@presentformcz} + }{ + \ifthenelse{\equal{\kid@program}{binf}}{ + \def\@programen{\@programbinfen, \@presentformen} + \def\@programcz{\@programbinfcz, \@presentformcz} + }{ + \ifthenelse{\equal{\kid@program}{inf}}{ + \def\@programen{\@programinfen, \@presentformen} + \def\@programcz{\@programinfcz, \@presentformcz} + }{ + \ifthenelse{\equal{\kid@program}{ainf}}{ + \def\@programen{\@programainfen, \@presentformen} + \def\@programcz{\@programainfcz, \@presentformcz} + }{ + % \ifthenelse{\equal{\kid@program}{ainfvs}} + \def\@programen{\@programainfen, \@textspecialen: \@specialvsen} + \def\@programcz{\@programainfcz, \@textspecialcz: \@specialvscz} + } + } + } + } + } + } + } +}{ + %% Bakalářská. + \def\@thesistypecz{\@bachelorcz} + \def\@thesistypeen{\@bacheloren} + \ifthenelse{\equal{\kid@program}{infoi}}{ + \def\@programen{\@programinfen, \@textspecialen: \@specialoien} + \def\@programcz{\@programinfcz, \@textspecialcz: \@specialoicz} + }{ + \ifthenelse{\equal{\kid@program}{itp}}{ + \def\@programen{\@programiten, \@presentformen} + \def\@programcz{\@programitcz, \@presentformcz} + }{ + \ifthenelse{\equal{\kid@program}{itk}}{ + \def\@programen{\@programiten, \@combinedformen} + \def\@programcz{\@programitcz, \@combinedformcz} + }{ + \ifthenelse{\equal{\kid@program}{infv}}{ + \def\@programen{\@programinfven, \@presentformen} + \def\@programcz{\@programinfvcz, \@presentformcz} + }{ + \ifthenelse{\equal{\kid@program}{binf}}{ + \def\@programen{\@programbinfen, \@presentformen} + \def\@programcz{\@programbinfcz, \@presentformcz} + }{ + \ifthenelse{\equal{\kid@program}{inf}}{ + \def\@programen{\@programinfen, \@presentformen} + \def\@programcz{\@programinfcz, \@presentformcz} + }{ + \ifthenelse{\equal{\kid@program}{ainfp}}{ + \def\@programen{\@programainfen, \@presentformen} + \def\@programcz{\@programainfcz, \@presentformcz} + }{ + \ifthenelse{\equal{\kid@program}{ainfk}}{ + \def\@programen{\@programainfen, \@combinedformen} + \def\@programcz{\@programainfcz, \@combinedformcz} + }{ + % \ifthenelse{\equal{\kid@program}{infpvs}} + \def\@programen{\@programinfen, \@textspecialen: \@specialpvsen} + \def\@programcz{\@programinfcz, \@textspecialcz: \@specialpvscz} + } + } + } + } + } + } + } + } +} + +%% Angličtina. +\ifthenelse{\equal{\kid@language}{english}}{ + \def\@thesistype{\@thesistypeen} + \def\@textprogram{\@textprogramen} + \def\@program{\@programen} + \def\@textsupervisor{\@textsupervisoren} + \def\@langcz{\@enlangcz} + \def\@langen{\@enlangen} + \def\@textanot{\@textanoten} + \def\@textkeywords{\@textkeywordsen} + \def\@textaffirm{By submitting this text its author declares that he/she has completed this thesis including its appendices on his/her own and used solely the sources cited in the text and included in the bibliography list.} + \def\@textsubmitdate{date of thesis submission} + \def\@textsigniture{author's signature} +}{ + \relax +} + +%% Čeština. +\ifthenelse{\equal{\kid@language}{czech}}{ + \def\@thesistype{\@thesistypecz} + \def\@textprogram{\@textprogramcz} + \def\@program{\@programcz} + \def\@textsupervisor{\@textsupervisorcz} + \def\@langcz{\@czlangcz} + \def\@langen{\@czlangen} + \def\@textanot{\@textanotcz} + \def\@textkeywords{\@textkeywordscz} + \def\@textaffirm{Odevzd\'an\'im tohoto textu jeho autor/ka m\'istop\v r\'ise\v zn\v e prohla\v suje, \v ze celou pr\'aci v\v cetn\v e p\v r\'iloh vypracoval/a samostatn\v e a za pou\v zit\'i pouze zdroj\r u citovan\'ych v~textu pr\'ace a uveden\'ych v seznamu literatury.} + \def\@textsubmitdate{datum odevzd\'an\'i pr\'ace} + \def\@textsigniture{podpis autora} +}{ + \relax +} + +%% Slovenština. +\ifthenelse{\equal{\kid@language}{slovak}}{ + \def\@thesistype{\@thesistypecz} + \def\@textprogram{\@textprogramcz} + \def\@program{\@programcz} + \def\@textsupervisor{\@textsupervisorcz} + \def\@langcz{\@sklangcz} + \def\@langen{\@sklangen} + \def\@textanot{\@textanotsk} + \def\@textkeywords{\@textkeywordssk} + \def\@textaffirm{Odevzdan\'im tohto textu jeho autor/ka cestne vyhlasuje, \v ze cel\'u pr\'acu vr\'atane pr\'iloh vypracoval/a samostatne a za pou\v zitia iba zdrojov spom\'inan\'ych v~texte pr\'ace a uveden\'ych v zozname literat\'ury. +} + \def\@textsubmitdate{d\'atum odovzdania pr\'ace} + \def\@textsigniture{podpis autora} +}{ + \relax +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Prostředí pro závěry. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newenvironment{kiconclusions}[1][\kid@language]{ + \clearpage + \bgroup + \phantomsection + \ifthenelse{\equal{#1}{english}}{ + \addcontentsline{toc}{section}{\@textconclusionsen} + \section*{\@textconclusionsen} + \begin{otherlanguage}{english} + }{} + \ifthenelse{\equal{#1}{czech}}{ + \addcontentsline{toc}{section}{\@textconclusionscz} + \section*{\@textconclusionscz} + \begin{otherlanguage}{czech} + }{} + \ifthenelse{\equal{#1}{slovak}}{ + \addcontentsline{toc}{section}{\@textconclusionssk} + \section*{\@textconclusionssk} + \begin{otherlanguage}{slovak} + }{} +}{ + \end{otherlanguage} + \egroup +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Úvodní strany. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% Makra pro název a podnázev práce. +%\def\title#1{\gdef\@title{#1}} +\renewcommand{\title}[2][\kid@language]{ + \ifthenelse{\equal{#1}{english}}{ + \gdef\@titleen{#2} + }{ + \gdef\@titlecz{#2} + } +} + +%\def\subtitle#1{\gdef\@subtitle{#1}} +\newcommand{\subtitle}[2][\kid@language]{ + \ifthenelse{\equal{#1}{english}}{ + \gdef\@subtitleen{#2} + }{ + \gdef\@subtitlecz{#2} + } +} + +\ifthenelse{\equal{\kid@language}{english}}{ + \gdef\@title{\@titleen} + \gdef\@subtitle{\@subtitleen} +}{ + \gdef\@title{\@titlecz} + \gdef\@subtitle{\@subtitlecz} +} + +%% Makra pro anotaci, klíčová slova a přílohy. +\newcommand{\annotation}[2][\kid@language]{ + \ifthenelse{\equal{#1}{english}}{ + \gdef\@annotationen{#2} + }{ + \gdef\@annotationcz{#2} + } +} + +\newcommand{\keywords}[2][\kid@language]{ + \ifthenelse{\equal{#1}{english}}{ + \gdef\@keywordsen{#2} + }{ + \gdef\@keywordscz{#2} + } +} + +\ifthenelse{\equal{\kid@language}{english}}{ + \gdef\@keywords{\@keywordsen} +}{ + \gdef\@keywords{\@keywordscz} +} + +\newcommand{\supplements}[2][\kid@language]{ + \ifthenelse{\equal{#1}{english}}{ + \gdef\@supplen{#2} + }{ + \gdef\@supplcz{#2} + } +} + +%% Makra pro autora, vedoucího a datum odevzdání práce. +\def\author#1{\gdef\@author{#1}} +\def\supervisor#1{\gdef\@supervisor{#1}} +\def\yearofsubmit#1{\gdef\@yearofsubmit{#1}} + +%% Makro pro poděkování. +\def\thanks#1{\gdef\@thanks{#1}} + +%% Výchozí hodnoty pro předchozí makra. +\title[czech]{N\'azev pr\'ace} +\title[english]{Thesis title} +\subtitle[czech]{} +\subtitle[english]{} +\annotation[czech]{V\'ysti\v zn\'a anotace pr\'ace} +\annotation[english]{Apposite thesis synopsis} +\keywords[czech]{stru\v cn\'a vhodn\'a kl\'i\v cov\'a slova} +\keywords[english]{short appropriate keywords} +\supplements[czech]{elektronická data v úložišti katedry informatiky} +\supplements[english]{electronic data in the storage of department of computer science} +\ifthenelse{\equal{\kid@language}{english}}{ + \author{Author name} + \supervisor{Supervisor name} +}{ + \author{Jm\'eno autora} + \supervisor{Jm\'eno vedouc\'iho pr\'ace} +} +\yearofsubmit{\the\year} + +%% Číslování stran v českých (a slovenských) textech od 1 do konce. +\ifthenelse{\not\equal{\kid@language}{english}}{ + %% HACK: pro sekvenční fyzické číslování stran, protože + %% např. \tableofcontents číslování resetuje. + \let\orgsetcounter=\setcounter + \renewcommand\setcounter[2]{% + \def\tempa{#1}% + \def\tempb{page}% + \ifx\tempa\tempb\else\orgsetcounter{#1}{#2}\fi} +}{ + \relax +} + +%% Makro pro titulní stranu. +\def\maketitle{ +%% Záložka. +\hypertarget{ki:paper}{} +\bookmark[dest=ki:paper]{\@title} +%% Římské číslování úvodních stran v anglických textech. +\ifthenelse{\equal{\kid@language}{english}}{ + \pagenumbering{roman} +}{} +%% Číslování stran od 1. +\setcounter{page}{1} + +%% Titulní strana. +\begin{titlepage} +%% Záložka. +\hypertarget{ki:title}{} +\bookmark[ + rellevel=1, + keeplevel, + dest=ki:title +]{\@texttitle} +\begin{center} +%{\fontfamily{ppl}\selectfont \large \MakeUppercase{\kitextdept} \par +% \MakeUppercase{\kitextfaculty} \par \MakeUppercase{\kitextuniv} \par} +\ifthenelse{\equal{\kid@language}{english}}{ + \includegraphics[scale=.6]{graphics/kititle-en-nofont} +}{ + \includegraphics[scale=.6]{graphics/kititle-cz-nofont} +} +\vfill +{\LARGE\bfseries{\MakeUppercase{\@thesistype}} \\} +\vfill +{\Large \@title \\[4ex]\large\@subtitle} + +\vfill +\centering +\includegraphics{\@logofile} +\vfill + +\begin{tabular}{@{}L{6cm}@{}@{\hspace{.8cm}}@{}L{7.2cm}@{}} +{\Large\@yearofsubmit} & {\Large\@author} \\[2ex] +{\small\@textsupervisor:\newline \@supervisor} & {\small\@textprogram: \@program} +\end{tabular} + +\end{center} +\end{titlepage} + +%% Strana s bibliografickými identifikačními údaji. +\thispagestyle{empty} +{\small +{\bf \@textbibinfocz} \par +\bigskip +\renewcommand{\arraystretch}{1.5} +\begin{tabular}{@{}p{3cm}@{\hspace{.5cm}}@{}p{10cm}@{}} +\@textauthorcz: & \@author \\ +\@texttitlecz: & \@titlecz% +\ifthenelse{\equal{\@subtitlecz}{}}{% + \relax +}{% +\ (\@subtitlecz) +} \\ +\@textthesistypecz: & \@thesistypecz \\ +\@textdeptcz: & \kitextdeptcz, \kitextfacultycz, \kitextunivcz \\ +\@textyearofsubmitcz: & \@yearofsubmit \\ +\@textprogramcz: & \@programcz \\ +\@textsupervisorcz: & \@supervisor \\ +\@textpagescz: & \nohref{\pageref{LastPage}} \\ +\@textsupplcz: & \@supplcz \\ +\@textlangcz: & \@langcz +\end{tabular} +\par +\vspace*{8ex} +{\bf \@textbibinfoen} \par +\bigskip +\renewcommand{\arraystretch}{1.5} +\begin{tabular}{@{}p{3cm}@{\hspace{.5cm}}@{}p{10cm}@{}} +\@textauthoren: & \@author \\ +\@texttitleen: & \@titleen% +\ifthenelse{\equal{\@subtitleen}{}}{% + \relax +}{% +\ (\@subtitleen) +} \\ +\@textthesistypeen: & \@thesistypeen \\ +\@textdepten: & \kitextdepten, \kitextfacultyen, \kitextuniven \\ +\@textyearofsubmiten: & \@yearofsubmit \\ +\@textprogramen: & \@programen \\ +\@textsupervisoren: & \@supervisor \\ +\@textpagesen: & \nohref{\pageref{LastPage}} \\ +\@textsupplen: & \@supplen \\ +\@textlangen: & \@langen +\end{tabular} +} + +%% Strana s anotací a klíčovými slovy. +\cleardoublepage +\thispagestyle{empty} +\null\vfill +%% Záložka. +\hypertarget{ki:anotation}{} +\bookmark[ + rellevel=1, + keeplevel, + dest=ki:anotation +]{\@textanot} +\begin{center} +\ifthenelse{\equal{\kid@language}{english}}{ + \textbf{\@textanotcz} +}{ + \textbf{\@textanot} +} +\end{center} +\bigskip +\emph{\@annotationcz} +\vspace*{4ex} +\begin{center} +\textbf{\@textanoten} +\end{center} +\bigskip +\emph{\@annotationen} +\par +\vspace*{10ex} +\noindent\textbf{\ifthenelse{\equal{\kid@language}{english}}{\@textkeywordscz:}{\@textkeywords:}} +\@keywordscz +\par +\vspace*{2ex} +\noindent\textbf{\@textkeywordsen:} \@keywordsen +\vfill\null + +%% Strana s poděkováním a prohlášením. +\clearpage +\thispagestyle{empty} +\null\vfill +\ifthenelse{\equal{\@thanks}{}}{ +\relax +}{ +\noindent\@thanks +} +\vfill +\noindent\emph{\@textaffirm}\par +%\vspace*{10ex} +%\noindent\@textsubmitdate \hfill \@textsigniture + +%% Obsah a seznamy obrázků, tabulek, vět a zdrojových kódů. +\tableofcontents +\@printlists + +%% Arabské číslování stran textu v anglických textech. +%% Číslování stran od 1. +\ifthenelse{\equal{\kid@language}{english}}{ + \pagenumbering{arabic} + \setcounter{page}{1} +}{} +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Info o dokumentu. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\AtBeginDocument{ +\hypersetup{ + pdftitle={\@title\ (\@thesistype)}, + pdfauthor={\@author\ (\@textsupervisor: \@supervisor)}, + pdfsubject={\@program}, + pdfcreator={\@author}, + pdfkeywords={\@keywords} +} +} + +\endinput diff --git a/kidiplom.glo b/kidiplom.glo new file mode 100644 index 0000000..e69de29 diff --git a/kidiplom.glsdefs b/kidiplom.glsdefs new file mode 100644 index 0000000..cb28d9f --- /dev/null +++ b/kidiplom.glsdefs @@ -0,0 +1,28 @@ +\glsdefs@newdocentry{UPOL}% +{% +name={UPOL},% +sort={UPOL},% +type={acronym},% +first={UPOL},% +firstplural={UPOLs},% +text={UPOL},% +plural={UPOLs},% +description={Univerzita Palack\'eho v~Olomouci},% +descriptionplural={Univerzita Palack\'eho v~Olomouci},% +symbol={\relax },% +symbolplural={\relax },% +user1={},% +user2={},% +user3={},% +user4={},% +user5={},% +user6={},% +long={Univerzita Palack\'eho v~Olomouci},% +longplural={Univerzita Palack\'eho v~Olomoucis},% +short={UPOL},% +shortplural={UPOLs},% +counter={page},% +parent={},% +% +}% + diff --git a/kidiplom.idx b/kidiplom.idx new file mode 100644 index 0000000..8323176 --- /dev/null +++ b/kidiplom.idx @@ -0,0 +1 @@ +\indexentry{výraz|hyperxindexformat{\hypertarget{1ind.ind}}}{42} diff --git a/kidiplom.ist b/kidiplom.ist new file mode 100644 index 0000000..ea5587b --- /dev/null +++ b/kidiplom.ist @@ -0,0 +1,29 @@ +% makeindex style file created by the glossaries package +% for document 'kidiplom' on 2026-4-8 +actual '?' +encap '|' +level '!' +quote '"' +keyword "\\glossaryentry" +preamble "\\glossarysection[\\glossarytoctitle]{\\glossarytitle}\\glossarypreamble\n\\begin{theglossary}\\glossaryheader\n" +postamble "\%\n\\end{theglossary}\\glossarypostamble\n" +group_skip "\\glsgroupskip\n" +item_0 "\%\n" +item_1 "\%\n" +item_2 "\%\n" +item_01 "\%\n" +item_x1 "\\relax \\glsresetentrylist\n" +item_12 "\%\n" +item_x2 "\\relax \\glsresetentrylist\n" +delim_0 "\{\\glossaryentrynumbers\{\\relax " +delim_1 "\{\\glossaryentrynumbers\{\\relax " +delim_2 "\{\\glossaryentrynumbers\{\\relax " +delim_t "\}\}" +delim_n "\\delimN " +delim_r "\\delimR " +headings_flag 1 +heading_prefix "\\glsgroupheading\{" +heading_suffix "\}\\relax \\glsresetentrylist " +symhead_positive "glssymbols" +numhead_positive "glsnumbers" +page_compositor "." diff --git a/kidiplom.log b/kidiplom.log new file mode 100644 index 0000000..eb629ba --- /dev/null +++ b/kidiplom.log @@ -0,0 +1,1640 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.3.13) 8 APR 2026 10:03 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**kidiplom.tex +(./kidiplom.tex +LaTeX2e <2025-11-01> +L3 programming layer <2026-01-19> +(./kidiplom.cls +Document Class: kidiplom 2012/09/09 KI PrF UP v Olomouci Diploma Class + +Class kidiplom Warning: [kidiplom] You are using kidiplom class 1.2. + +(/usr/share/texmf-dist/tex/latex/base/article.cls +Document Class: article 2025/01/22 v1.4n Standard LaTeX document class +(/usr/share/texmf-dist/tex/latex/base/size12.clo +File: size12.clo 2025/01/22 v1.4n Standard LaTeX file (size option) +) +\c@part=\count275 +\c@section=\count276 +\c@subsection=\count277 +\c@subsubsection=\count278 +\c@paragraph=\count279 +\c@subparagraph=\count280 +\c@figure=\count281 +\c@table=\count282 +\abovecaptionskip=\skip49 +\belowcaptionskip=\skip50 +\bibindent=\dimen148 +) +(/usr/share/texmf-dist/tex/latex/kvoptions/kvoptions.sty +Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) + +(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2022/05/29 v1.15 key=value parser (DPC) +\KV@toks@=\toks17 +) +(/usr/share/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO) +) +(/usr/share/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty +Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) +)) (./kibase.sty +Package: kibase 2012/09/09 KI PrF UP v Olomouci Base Style + +(/usr/share/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2024/02/08 v1.3d Input encoding file +\inpenc@prehook=\toks18 +\inpenc@posthook=\toks19 +) +(/usr/share/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2026/02/14 v26.3 The multilingual framework for LuaLaTeX, pdfLaT +eX and XeLaTeX +\babel@savecnt=\count283 +LaTeX Encoding Info: Redeclaring text command \ij (encoding OT1) on input li +ne 2078. +LaTeX Encoding Info: Redeclaring text command \IJ (encoding OT1) on input li +ne 2080. +LaTeX Encoding Info: Redeclaring text command \ij (encoding T1) on input lin +e 2082. +LaTeX Encoding Info: Redeclaring text command \IJ (encoding T1) on input lin +e 2083. +LaTeX Encoding Info: Ignoring declaration for text command \ij (encoding ?) +on input line 2084. +LaTeX Encoding Info: Ignoring declaration for text command \IJ (encoding ?) +on input line 2086. +LaTeX Encoding Info: Ignoring declaration for text command \SS (encoding ?) +on input line 2111. +\U@D=\dimen149 +\l@unhyphenated=\language5 + +(/usr/share/texmf-dist/tex/generic/babel/txtbabel.def) +\bbl@readstream=\read2 +\bbl@dirlevel=\count284 + +(/usr/share/texmf-dist/tex/generic/babel/locale/cs/babel-czech.tex) +(/usr/share/texmf-dist/tex/generic/babel/locale/en/babel-english.tex) +(/usr/share/texmf-dist/tex/generic/babel/locale/cs/babel-czech.tex) +Package babel Info: Importing font and identification data for czech +(babel) from babel-cs.ini. Reported on input line 4330. + +(/usr/share/texmf-dist/tex/generic/babel-czech/czech.ldf +Language: czech 2008/07/06 v3.1a Czech support from the babel system +Package babel Info: Making " an active character on input line 172. +\cs@wordlen=\count285 +Package babel Info: Making - an active character on input line 226. +) +Package babel Info: Importing font and identification data for english +(babel) from babel-en.ini. Reported on input line 4330. + +(/usr/share/texmf-dist/tex/generic/babel-english/english.ldf +Language: english 2017/06/06 v3.3r English support from the babel system +Package babel Info: Hyphen rules for 'british' set to \l@english +(babel) (\language0). Reported on input line 82. +Package babel Info: Hyphen rules for 'UKenglish' set to \l@english +(babel) (\language0). Reported on input line 83. +Package babel Info: Hyphen rules for 'canadian' set to \l@english +(babel) (\language0). Reported on input line 102. +Package babel Info: Hyphen rules for 'australian' set to \l@english +(babel) (\language0). Reported on input line 105. +Package babel Info: Hyphen rules for 'newzealand' set to \l@english +(babel) (\language0). Reported on input line 108. +) +Package babel Info: Importing font and identification data for czech +(babel) from babel-cs.ini. Reported on input line 4330. + +(/usr/share/texmf-dist/tex/generic/babel-czech/czech.ldf +Language: czech 2008/07/06 v3.1a Czech support from the babel system +)) +(/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2024/09/29 v3.02 LaTeX color extensions (UK) + +(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg +File: color.cfg 2016/01/02 v1.6 sample color configuration +) + +Package xcolor Warning: Package option `usenames' is obsolete and ignored on in +put line 265. + +Package xcolor Info: Driver file: pdftex.def on input line 274. +(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2025/09/29 v1.2d Graphics/color driver for pdftex +) +(/usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx) +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1349. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1353. +Package xcolor Info: Model `RGB' extended on input line 1365. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1367. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1368. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1369. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1370. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1371. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1372. +) +(/usr/share/texmf-dist/tex/latex/graphics/dvipsnam.def +File: dvipsnam.def 2016/06/17 v3.0m Driver-dependent file (DPC,SPQR) +) +(/usr/share/texmf-dist/tex/latex/colortbl/colortbl.sty +Package: colortbl 2024/10/29 v1.0k Color table columns (DPC) + +(/usr/share/texmf-dist/tex/latex/tools/array.sty +Package: array 2025/09/25 v2.6n Tabular extension package (FMi) +\col@sep=\dimen150 +\ar@mcellbox=\box53 +\extrarowheight=\dimen151 +\NC@list=\toks20 +\extratabsurround=\skip51 +\backup@length=\skip52 +\ar@cellbox=\box54 +) +\everycr=\toks21 +\minrowclearance=\skip53 +\rownum=\count286 +) +(/usr/share/texmf-dist/tex/latex/hyperref/hyperref.sty +Package: hyperref 2026-01-29 v7.01p Hypertext links for LaTeX + +(/usr/share/texmf-dist/tex/generic/iftex/iftex.sty +Package: iftex 2024/12/12 v1.0g TeX engine tests +) +(/usr/share/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) +) +(/usr/share/texmf-dist/tex/generic/pdfescape/pdfescape.sty +Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) + +(/usr/share/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO +) + +(/usr/share/texmf-dist/tex/generic/infwarerr/infwarerr.sty +Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) +) +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +Package pdftexcmds Info: \pdfdraftmode found. +)) +(/usr/share/texmf-dist/tex/latex/hycolor/hycolor.sty +Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) +) +(/usr/share/texmf-dist/tex/latex/hyperref/nameref.sty +Package: nameref 2026-01-29 v2.58 Cross-referencing by name of section + +(/usr/share/texmf-dist/tex/latex/refcount/refcount.sty +Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) +) +(/usr/share/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) +) +\c@section@level=\count287 +) +(/usr/share/texmf-dist/tex/latex/etoolbox/etoolbox.sty +Package: etoolbox 2025/10/02 v2.5m e-TeX tools for LaTeX (JAW) +\etb@tempcnta=\count288 +) +(/usr/share/texmf-dist/tex/generic/stringenc/stringenc.sty +Package: stringenc 2019/11/29 v1.12 Convert strings between diff. encodings (HO +) +) +\@linkdim=\dimen152 +\Hy@linkcounter=\count289 +\Hy@pagecounter=\count290 + +(/usr/share/texmf-dist/tex/latex/hyperref/pd1enc.def +File: pd1enc.def 2026-01-29 v7.01p Hyperref: PDFDocEncoding definition (HO) +Now handling font encoding PD1 ... +... no UTF-8 mapping file for font encoding PD1 +) +(/usr/share/texmf-dist/tex/generic/intcalc/intcalc.sty +Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) +) +\Hy@SavedSpaceFactor=\count291 + +(/usr/share/texmf-dist/tex/latex/hyperref/puenc.def +File: puenc.def 2026-01-29 v7.01p Hyperref: PDF Unicode definition (HO) +Now handling font encoding PU ... +... no UTF-8 mapping file for font encoding PU +) +Package hyperref Info: Option `unicode' set `true' on input line 4072. +Package hyperref Info: Option `breaklinks' set `true' on input line 4072. +Package hyperref Info: Hyper figures OFF on input line 4201. +Package hyperref Info: Link nesting OFF on input line 4206. +Package hyperref Info: Hyper index ON on input line 4209. +Package hyperref Info: Plain pages OFF on input line 4216. +Package hyperref Info: Backreferencing OFF on input line 4221. +Package hyperref Info: Implicit mode ON; LaTeX internals redefined. +Package hyperref Info: Bookmarks ON on input line 4468. +\c@Hy@tempcnt=\count292 + +(/usr/share/texmf-dist/tex/latex/url/url.sty +\Urlmuskip=\muskip17 +Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. +) +LaTeX Info: Redefining \url on input line 4807. +\XeTeXLinkMargin=\dimen153 + +(/usr/share/texmf-dist/tex/generic/bitset/bitset.sty +Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) + +(/usr/share/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO +) +)) +\Fld@menulength=\count293 +\Field@Width=\dimen154 +\Fld@charsize=\dimen155 +Package hyperref Info: Hyper figures OFF on input line 6084. +Package hyperref Info: Link nesting OFF on input line 6089. +Package hyperref Info: Hyper index ON on input line 6092. +Package hyperref Info: backreferencing OFF on input line 6099. +Package hyperref Info: Link coloring OFF on input line 6104. +Package hyperref Info: Link coloring with OCG OFF on input line 6109. +Package hyperref Info: PDF/A mode OFF on input line 6114. +\Hy@abspage=\count294 +\c@Item=\count295 +\c@Hfootnote=\count296 +) +Package hyperref Info: Driver (autodetected): hpdftex. + +(/usr/share/texmf-dist/tex/latex/hyperref/hpdftex.def +File: hpdftex.def 2026-01-29 v7.01p Hyperref driver for pdfTeX +\Fld@listcount=\count297 +\c@bookmark@seq@number=\count298 + +(/usr/share/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +Package: rerunfilecheck 2025-06-21 v1.11 Rerun checks for auxiliary files (HO) + +(/usr/share/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) +) +Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 +84. +) +\Hy@SectionHShift=\skip54 +) +(/usr/share/texmf-dist/tex/latex/bookmark/bookmark.sty +Package: bookmark 2023-12-10 v1.31 PDF bookmarks (HO) + +(/usr/share/texmf-dist/tex/latex/bookmark/bkm-pdftex.def +File: bkm-pdftex.def 2023-12-10 v1.31 bookmark driver for pdfTeX and luaTeX (HO +) +\BKM@id=\count299 +)) +(/usr/share/texmf-dist/tex/latex/listings/listings.sty +\lst@mode=\count300 +\lst@gtempboxa=\box55 +\lst@token=\toks22 +\lst@length=\count301 +\lst@currlwidth=\dimen156 +\lst@column=\count302 +\lst@pos=\count303 +\lst@lostspace=\dimen157 +\lst@width=\dimen158 +\lst@newlines=\count304 +\lst@lineno=\count305 +\lst@maxwidth=\dimen159 + +(/usr/share/texmf-dist/tex/latex/listings/lstpatch.sty +File: lstpatch.sty 2025/11/14 1.11b (Carsten Heinz) +) +(/usr/share/texmf-dist/tex/latex/listings/lstmisc.sty +File: lstmisc.sty 2025/11/14 1.11b (Carsten Heinz) +\c@lstnumber=\count306 +\lst@skipnumbers=\count307 +\lst@framebox=\box56 +) +(/usr/share/texmf-dist/tex/latex/listings/listings.cfg +File: listings.cfg 2025/11/14 1.11b listings configuration +)) +Package: listings 2025/11/14 1.11b (Carsten Heinz) + +==> First Aid for listings.sty no longer applied! + Expected: + 2024/09/23 1.10c (Carsten Heinz) + but found: + 2025/11/14 1.11b (Carsten Heinz) + so I'm assuming it got fixed. +(/usr/share/texmf-dist/tex/generic/iftex/ifpdf.sty +Package: ifpdf 2019/10/25 v3.4 ifpdf legacy package. Use iftex instead. +) +(/usr/share/texmf-dist/tex/latex/base/ifthen.sty +Package: ifthen 2024/03/16 v1.1e Standard LaTeX ifthen package (DPC) +) +(/usr/share/texmf-dist/tex/latex/savesym/savesym.sty +Package: savesym 2013/09/02 v1.2 Saves and restores symbols (JG) +) +(/usr/share/texmf-dist/tex/latex/glossaries/base/glossaries.sty +Package: glossaries 2025/11/09 v4.9 (NLCT) + +(/usr/share/texmf-dist/tex/latex/xkeyval/xkeyval.sty +Package: xkeyval 2025/11/04 v2.10 package option processing (HA) + +(/usr/share/texmf-dist/tex/generic/xkeyval/xkeyval.tex +(/usr/share/texmf-dist/tex/generic/xkeyval/xkvutils.tex +\XKV@toks=\toks23 +\XKV@tempa@toks=\toks24 +\XKV@tempb@toks=\toks25 +) +\XKV@depth=\count308 +File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA) +)) +(/usr/share/texmf-dist/tex/latex/mfirstuc/mfirstuc.sty +Package: mfirstuc 2025/04/03 v2.09 (NLCT) +\@glsmfirst=\toks26 +\@glsmrest=\toks27 +) +(/usr/share/texmf-dist/tex/latex/xfor/xfor.sty +Package: xfor 2009/02/05 v1.05 (NLCT) +) +(/usr/share/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 generic functions +\@emptytoks=\toks28 +\ex@=\dimen160 +) + +Package glossaries Warning: sanitize package option deprecated on input line 12 +64. + +(/usr/share/texmf-dist/tex/latex/tracklang/tracklang.sty +Package: tracklang 2025/03/11 v1.6.6 (NLCT) Track Languages + +(/usr/share/texmf-dist/tex/generic/tracklang/tracklang.tex) +Package tracklang Info: Tracking dialect `czech' (language `czech') on input li +ne 264. +Package tracklang Info: Tracking dialect `english' (language `english') on inpu +t line 264. +Package tracklang Info: Tracking dialect `czech' (language `czech') on input li +ne 264. +Package tracklang Info: Tracking dialect `czech' (language `czech') on input li +ne 264. +Package tracklang Info: Tracking dialect `english' (language `english') on inpu +t line 264. +Package tracklang Info: Tracking dialect `czech' (language `czech') on input li +ne 264. +) +(/usr/share/texmf-dist/tex/latex/translator/translator.sty +Package: translator 2021-05-31 v1.12d Easy translation of strings in LaTeX +) + +Package glossaries Warning: No language module detected for `czech'. +(glossaries) Language modules need to be installed separately. +(glossaries) Please check on CTAN for a bundle called +(glossaries) `glossaries-czech' or similar. + +(/usr/share/texmf-dist/tex/latex/glossaries-english/glossaries-english.ldf +File: glossaries-english.ldf 2014/11/23 v1.0 +) +(/usr/share/texmf-dist/tex/latex/datatool/datatool-base.sty +Package: datatool-base 2025/12/04 v3.4.3 (NLCT) + +(/usr/share/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2025/07/09 v2.17z AMS math features +\@mathmargin=\skip55 + +For additional information on amsmath, use the `?' option. +(/usr/share/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2024/11/17 v2.01 AMS text +) +(/usr/share/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d Bold Symbols +\pmbraise@=\dimen161 +) +(/usr/share/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 2022/04/08 v2.04 operator names +) +\inf@bad=\count309 +LaTeX Info: Redefining \frac on input line 233. +\uproot@=\count310 +\leftroot@=\count311 +LaTeX Info: Redefining \overline on input line 398. +LaTeX Info: Redefining \colon on input line 409. +\classnum@=\count312 +\DOTSCASE@=\count313 +LaTeX Info: Redefining \ldots on input line 495. +LaTeX Info: Redefining \dots on input line 498. +LaTeX Info: Redefining \cdots on input line 619. +\Mathstrutbox@=\box57 +\strutbox@=\box58 +LaTeX Info: Redefining \big on input line 721. +LaTeX Info: Redefining \Big on input line 722. +LaTeX Info: Redefining \bigg on input line 723. +LaTeX Info: Redefining \Bigg on input line 724. +\big@size=\dimen162 +LaTeX Font Info: Redeclaring font encoding OML on input line 742. +LaTeX Font Info: Redeclaring font encoding OMS on input line 743. +\macc@depth=\count314 +LaTeX Info: Redefining \bmod on input line 904. +LaTeX Info: Redefining \pmod on input line 909. +LaTeX Info: Redefining \smash on input line 939. +LaTeX Info: Redefining \relbar on input line 969. +LaTeX Info: Redefining \Relbar on input line 970. +\c@MaxMatrixCols=\count315 +\dotsspace@=\muskip18 +\c@parentequation=\count316 +\dspbrk@lvl=\count317 +\tag@help=\toks29 +\row@=\count318 +\column@=\count319 +\maxfields@=\count320 +\andhelp@=\toks30 +\eqnshift@=\dimen163 +\alignsep@=\dimen164 +\tagshift@=\dimen165 +\tagwidth@=\dimen166 +\totwidth@=\dimen167 +\lineht@=\dimen168 +\@envbody=\toks31 +\multlinegap=\skip56 +\multlinetaggap=\skip57 +\mathdisplay@stack=\toks32 +LaTeX Info: Redefining \[ on input line 2950. +LaTeX Info: Redefining \] on input line 2951. +) +\l__datatool_tmpa_int=\count321 +\l__datatool_tmpb_int=\count322 +\l__datatool_tmpc_int=\count323 +\l__datatool_tmpd_int=\count324 +\l__datatool_count_int=\count325 +\l__datatool_tmp_datatype_int=\count326 +\l__datatool_tmpa_dim=\dimen169 +\l__datatool_tmpb_dim=\dimen170 + +(/usr/share/texmf-dist/tex/latex/datatool/datatool-l3fp.def +File: datatool-l3fp.def 2025/12/04 v3.4.3 (NLCT) +) +\@dtl@toks=\toks33 +\@dtl@tmpcount=\count327 +\dtl@tmplength=\skip58 +\l__datatool_measure_box=\box59 +\dtl@sortresult=\count328 + +(/usr/share/texmf-dist/tex/latex/datatool/datatool-utf8.ldf +File: datatool-utf8.ldf 2025/12/04 v3.4.3 (NLCT) +) +\@dtl@datatype=\count329 +\c_datatool_unknown_int=\count330 +\l__datatool_year_int=\count331 +\l__datatool_month_int=\count332 +\l__datatool_day_int=\count333 +\l__datatool_hour_int=\count334 +\l__datatool_minute_int=\count335 +\l__datatool_second_int=\count336 +\l__datatool_tzhour_int=\count337 +\l__datatool_tzminute_int=\count338 +\l__datatool_julian_int=\count339 +\l__datatool_local_julian_int=\count340 +\l__datatool_prefix_int=\count341 +\l__datatool_suffix_int=\count342 +\@dtl@foreach@level=\count343 + + +Package tracklang Warning: No `datatool' support for dialect `czech' on input +line 9924. + +(/usr/share/texmf-dist/tex/latex/datatool-english/datatool-english.ldf +File: datatool-english.ldf 2025/03/12 v1.1 (NLCT) + +(/usr/share/texmf-dist/tex/latex/datatool-english/datatool-english-utf8.ldf +File: datatool-english-utf8.ldf 2025/03/12 v1.1 (NLCT) +)) +\dtl@codeA=\count344 +\dtl@codeB=\count345 +) +\gls@level=\count346 +\@gls@tmpb=\toks34 +\gls@tmplen=\skip59 +\l__glossaries_tmpa_dim=\dimen171 +\l__glossaries_tmpb_dim=\dimen172 +\glskeylisttok=\toks35 +\glslabeltok=\toks36 +\glsshorttok=\toks37 +\glslongtok=\toks38 + +(/usr/share/texmf-dist/tex/latex/glossaries/styles/glossary-hypernav.sty +Package: glossary-hypernav 2025/11/09 v4.9 (NLCT) +) +(/usr/share/texmf-dist/tex/latex/glossaries/styles/glossary-list.sty +Package: glossary-list 2025/11/09 v4.9 (NLCT) +\glslistdottedwidth=\skip60 +) +(/usr/share/texmf-dist/tex/latex/glossaries/styles/glossary-long.sty +Package: glossary-long 2025/11/09 v4.9 (NLCT) + +(/usr/share/texmf-dist/tex/latex/tools/longtable.sty +Package: longtable 2025-10-13 v4.24 Multi-page Table package (DPC) +\LTleft=\skip61 +\LTright=\skip62 +\LTpre=\skip63 +\LTpost=\skip64 +\LTchunksize=\count347 +\LTcapwidth=\dimen173 +\LT@head=\box60 +\LT@firsthead=\box61 +\LT@foot=\box62 +\LT@lastfoot=\box63 +\LT@gbox=\box64 +\LT@cols=\count348 +\LT@rows=\count349 +\c@LT@tables=\count350 +\c@LT@chunks=\count351 +\LT@p@ftn=\toks39 +) +\glsdescwidth=\skip65 +\glspagelistwidth=\skip66 +) +(/usr/share/texmf-dist/tex/latex/glossaries/styles/glossary-super.sty +Package: glossary-super 2025/11/09 v4.9 (NLCT) + +(/usr/share/texmf-dist/tex/latex/supertabular/supertabular.sty +Package: supertabular 2025/06/26 v4.2d the supertabular environment +\c@tracingst=\count352 +\ST@wd=\dimen174 +\ST@rightskip=\skip67 +\ST@leftskip=\skip68 +\ST@parfillskip=\skip69 +\ST@pageleft=\dimen175 +\ST@headht=\dimen176 +\ST@tailht=\dimen177 +\ST@pagesofar=\dimen178 +\ST@pboxht=\dimen179 +\ST@rowht=\dimen180 +\ST@prevht=\dimen181 +\ST@toadd=\dimen182 +\ST@dimen=\dimen183 +\ST@pbox=\box65 +)) +(/usr/share/texmf-dist/tex/latex/glossaries/styles/glossary-tree.sty +Package: glossary-tree 2025/11/09 v4.9 (NLCT) +\l__glossaries_tree_max_known_level_int=\count353 +\l__glossaries_tree_offset_dim=\dimen184 +\l__glossaries_tree_namewidth_dim=\dimen185 +\l__glossaries_tree_symbolwidth_dim=\dimen186 +\l__glossaries_tree_prenamesym_width_dim=\dimen187 +\l__glossaries_tree_presubnamesym_width_dim=\dimen188 +\l__glossaries_tree_namewidth_padding_dim=\dimen189 +\l__glossaries_tree_symbolwidth_padding_dim=\dimen190 +\l__glossaries_tree_namesymbolwidth_dim=\dimen191 +\l__glossaries_tree_namesymbolwidth_padding_dim=\dimen192 +\l__glossaries_tree_level_int=\count354 +\glstreeindent=\skip70 +)) +(/usr/share/texmf-dist/tex/latex/lm/lmodern.sty +Package: lmodern 2015/05/01 v1.6.1 Latin Modern Fonts +LaTeX Font Info: Overwriting symbol font `operators' in version `normal' +(Font) OT1/cmr/m/n --> OT1/lmr/m/n on input line 22. +LaTeX Font Info: Overwriting symbol font `letters' in version `normal' +(Font) OML/cmm/m/it --> OML/lmm/m/it on input line 23. +LaTeX Font Info: Overwriting symbol font `symbols' in version `normal' +(Font) OMS/cmsy/m/n --> OMS/lmsy/m/n on input line 24. +LaTeX Font Info: Overwriting symbol font `largesymbols' in version `normal' +(Font) OMX/cmex/m/n --> OMX/lmex/m/n on input line 25. +LaTeX Font Info: Overwriting symbol font `operators' in version `bold' +(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 26. +LaTeX Font Info: Overwriting symbol font `letters' in version `bold' +(Font) OML/cmm/b/it --> OML/lmm/b/it on input line 27. +LaTeX Font Info: Overwriting symbol font `symbols' in version `bold' +(Font) OMS/cmsy/b/n --> OMS/lmsy/b/n on input line 28. +LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold' +(Font) OMX/cmex/m/n --> OMX/lmex/m/n on input line 29. +LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `normal' +(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 31. +LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `normal' +(Font) OT1/cmss/m/n --> OT1/lmss/m/n on input line 32. +LaTeX Font Info: Overwriting math alphabet `\mathit' in version `normal' +(Font) OT1/cmr/m/it --> OT1/lmr/m/it on input line 33. +LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `normal' +(Font) OT1/cmtt/m/n --> OT1/lmtt/m/n on input line 34. +LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `bold' +(Font) OT1/cmr/bx/n --> OT1/lmr/bx/n on input line 35. +LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `bold' +(Font) OT1/cmss/bx/n --> OT1/lmss/bx/n on input line 36. +LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold' +(Font) OT1/cmr/bx/it --> OT1/lmr/bx/it on input line 37. +LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold' +(Font) OT1/cmtt/m/n --> OT1/lmtt/m/n on input line 38. +) +(/usr/share/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2025/07/18 v2.1d Standard LaTeX package +LaTeX Font Info: Trying to load font information for T1+lmr on input line 11 +6. + +(/usr/share/texmf-dist/tex/latex/lm/t1lmr.fd +File: t1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +)) +(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2024/12/31 v1.2e Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR) + +(/usr/share/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2023/12/02 v1.11 sin cos tan (DPC) +) +(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: pdftex.def on input line 106. +) +\Gin@req@height=\dimen193 +\Gin@req@width=\dimen194 +) +(/usr/share/texmf-dist/tex/latex/csquotes/csquotes.sty +Package: csquotes 2024-04-04 v5.2o context-sensitive quotations (JAW) +\csq@reset=\count355 +\csq@gtype=\count356 +\csq@glevel=\count357 +\csq@qlevel=\count358 +\csq@maxlvl=\count359 +\csq@tshold=\count360 +\csq@ltx@everypar=\toks40 + +(/usr/share/texmf-dist/tex/latex/csquotes/csquotes.def +File: csquotes.def 2024-04-04 v5.2o csquotes generic definitions (JAW) +) +Package csquotes Info: Trying to load configuration file 'csquotes.cfg'... +Package csquotes Info: ... configuration file loaded successfully. + +(/usr/share/texmf-dist/tex/latex/csquotes/csquotes.cfg +File: csquotes.cfg +)) +Package csquotes Info: Redefining quotation style 'czech'. +Package csquotes Info: Redefining alias 'slovak' -> 'czech'. +Package hyperref Info: Option `colorlinks' set `true' on input line 297. +Package hyperref Info: Option `linktocpage' set `true' on input line 307. +Package hyperref Info: Option `pageanchor' set `true' on input line 307. +Package hyperref Info: Option `breaklinks' set `true' on input line 307. +Package hyperref Info: Option `plainpages' set `false' on input line 307. +Package hyperref Info: Option `bookmarksnumbered' set `true' on input line 307. + +Package hyperref Info: Option `hypertexnames' set `true' on input line 307. +\glswrite=\write3 +\glo@main@file=\write4 +\openout4 = `kidiplom.glo'. + +Package glossaries Info: Writing glossary file kidiplom.glo on input line 349. +\glo@acronym@file=\write5 +\openout5 = `kidiplom.acn'. + +Package glossaries Info: Writing glossary file kidiplom.acn on input line 349. +\glo@index@file=\write6 +\openout6 = `kidiplom.idx'. + +Package glossaries Info: Writing glossary file kidiplom.idx on input line 349. + +(/usr/share/texmf-dist/tex/latex/base/makeidx.sty +Package: makeidx 2021/10/04 v1.0m Standard LaTeX package +) +(/usr/share/texmf-dist/tex/latex/tools/multicol.sty +Package: multicol 2025/10/21 v2.0b multicolumn formatting (FMi) +\c@tracingmulticols=\count361 +\mult@box=\box66 +\multicol@leftmargin=\dimen195 +\c@unbalance=\count362 +\c@collectmore=\count363 +\doublecol@number=\count364 +\multicoltolerance=\count365 +\multicolpretolerance=\count366 +\full@width=\dimen196 +\page@free=\dimen197 +\premulticols=\dimen198 +\postmulticols=\dimen199 +\multicolsep=\skip71 +\multicolbaselineskip=\skip72 +\partial@page=\box67 +\last@line=\box68 +\mc@boxedresult=\box69 +\maxbalancingoverflow=\dimen256 +\mult@rightbox=\box70 +\mult@grightbox=\box71 +\mult@firstbox=\box72 +\mult@gfirstbox=\box73 +\@tempa=\box74 +\@tempa=\box75 +\@tempa=\box76 +\@tempa=\box77 +\@tempa=\box78 +\@tempa=\box79 +\@tempa=\box80 +\@tempa=\box81 +\@tempa=\box82 +\@tempa=\box83 +\@tempa=\box84 +\@tempa=\box85 +\@tempa=\box86 +\@tempa=\box87 +\@tempa=\box88 +\@tempa=\box89 +\@tempa=\box90 +\@tempa=\box91 +\@tempa=\box92 +\@tempa=\box93 +\@tempa=\box94 +\@tempa=\box95 +\@tempa=\box96 +\@tempa=\box97 +\@tempa=\box98 +\@tempa=\box99 +\@tempa=\box100 +\@tempa=\box101 +\@tempa=\box102 +\@tempa=\box103 +\@tempa=\box104 +\@tempa=\box105 +\@tempa=\box106 +\@tempa=\box107 +\@tempa=\box108 +\@tempa=\box109 +\c@minrows=\count367 +\c@columnbadness=\count368 +\c@finalcolumnbadness=\count369 +\last@try=\dimen257 +\multicolovershoot=\dimen258 +\multicolundershoot=\dimen259 +\mult@nat@firstbox=\box110 +\colbreak@box=\box111 +\mc@col@check@num=\count370 +\g__mc_curr_col_int=\count371 +) +\@indexfile=\write7 +\openout7 = `kidiplom.idx'. + + +Writing index file kidiplom.idx +\c@indexno=\count372 +(/usr/share/texmf-dist/tex/latex/biblatex/biblatex.sty +Package: biblatex 2025/07/10 v3.21 programmable bibliographies (PK/MW) + +(/usr/share/texmf-dist/tex/latex/logreq/logreq.sty +Package: logreq 2010/08/04 v1.0 xml request logger +\lrq@indent=\count373 + +(/usr/share/texmf-dist/tex/latex/logreq/logreq.def +File: logreq.def 2010/08/04 v1.0 logreq spec v1.0 +)) +\c@tabx@nest=\count374 +\c@listtotal=\count375 +\c@listcount=\count376 +\c@liststart=\count377 +\c@liststop=\count378 +\c@citecount=\count379 +\c@citetotal=\count380 +\c@multicitecount=\count381 +\c@multicitetotal=\count382 +\c@instcount=\count383 +\c@maxnames=\count384 +\c@minnames=\count385 +\c@maxitems=\count386 +\c@minitems=\count387 +\c@citecounter=\count388 +\c@maxcitecounter=\count389 +\c@savedcitecounter=\count390 +\c@uniquelist=\count391 +\c@uniquename=\count392 +\c@refsection=\count393 +\c@refsegment=\count394 +\c@maxextratitle=\count395 +\c@maxextratitleyear=\count396 +\c@maxextraname=\count397 +\c@maxextradate=\count398 +\c@maxextraalpha=\count399 +\c@abbrvpenalty=\count400 +\c@highnamepenalty=\count401 +\c@lownamepenalty=\count402 +\c@maxparens=\count403 +\c@parenlevel=\count404 +\blx@tempcnta=\count405 +\blx@tempcntb=\count406 +\blx@tempcntc=\count407 +\c@blx@maxsection=\count408 +\blx@maxsegment@0=\count409 +\blx@notetype=\count410 +\blx@parenlevel@text=\count411 +\blx@parenlevel@foot=\count412 +\blx@sectionciteorder@0=\count413 +\blx@sectionciteorderinternal@0=\count414 +\blx@entrysetcounter=\count415 +\blx@biblioinstance=\count416 +\labelnumberwidth=\skip73 +\labelalphawidth=\skip74 +\biblabelsep=\skip75 +\bibitemsep=\skip76 +\bibnamesep=\skip77 +\bibinitsep=\skip78 +\bibparsep=\skip79 +\bibhang=\skip80 +\blx@bcfin=\read3 +\blx@bcfout=\write8 +\blx@langwohyphens=\language6 +\c@mincomprange=\count417 +\c@maxcomprange=\count418 +\c@mincompwidth=\count419 +Package biblatex Info: Trying to load biblatex default data model... +Package biblatex Info: ... file 'blx-dm.def' found. + +(/usr/share/texmf-dist/tex/latex/biblatex/blx-dm.def +File: blx-dm.def 2025/07/10 v3.21 biblatex datamodel (PK/MW) +) +Package biblatex Info: Trying to load biblatex style data model... +Package biblatex Info: ... file 'iso-numeric.dbx' found. + +(/usr/share/texmf-dist/tex/latex/biblatex-iso690/iso-numeric.dbx +File: iso-numeric.dbx 2022/03/20 v0.4.1 ISO 690 biblatex data model extension +) +Package biblatex Info: Trying to load biblatex custom data model... +Package biblatex Info: ... file 'biblatex-dm.cfg' not found. +\c@afterword=\count420 +\c@savedafterword=\count421 +\c@annotator=\count422 +\c@savedannotator=\count423 +\c@author=\count424 +\c@savedauthor=\count425 +\c@bookauthor=\count426 +\c@savedbookauthor=\count427 +\c@commentator=\count428 +\c@savedcommentator=\count429 +\c@editor=\count430 +\c@savededitor=\count431 +\c@editora=\count432 +\c@savededitora=\count433 +\c@editorb=\count434 +\c@savededitorb=\count435 +\c@editorc=\count436 +\c@savededitorc=\count437 +\c@foreword=\count438 +\c@savedforeword=\count439 +\c@holder=\count440 +\c@savedholder=\count441 +\c@introduction=\count442 +\c@savedintroduction=\count443 +\c@namea=\count444 +\c@savednamea=\count445 +\c@nameb=\count446 +\c@savednameb=\count447 +\c@namec=\count448 +\c@savednamec=\count449 +\c@translator=\count450 +\c@savedtranslator=\count451 +\c@shortauthor=\count452 +\c@savedshortauthor=\count453 +\c@shorteditor=\count454 +\c@savedshorteditor=\count455 +\c@supervisor=\count456 +\c@savedsupervisor=\count457 +\c@labelname=\count458 +\c@savedlabelname=\count459 +\c@institution=\count460 +\c@savedinstitution=\count461 +\c@lista=\count462 +\c@savedlista=\count463 +\c@listb=\count464 +\c@savedlistb=\count465 +\c@listc=\count466 +\c@savedlistc=\count467 +\c@listd=\count468 +\c@savedlistd=\count469 +\c@liste=\count470 +\c@savedliste=\count471 +\c@listf=\count472 +\c@savedlistf=\count473 +\c@location=\count474 +\c@savedlocation=\count475 +\c@organization=\count476 +\c@savedorganization=\count477 +\c@origlocation=\count478 +\c@savedoriglocation=\count479 +\c@origpublisher=\count480 +\c@savedorigpublisher=\count481 +\c@publisher=\count482 +\c@savedpublisher=\count483 +\c@language=\count484 +\c@savedlanguage=\count485 +\c@origlanguage=\count486 +\c@savedoriglanguage=\count487 +\c@pageref=\count488 +\c@savedpageref=\count489 +\shorthandwidth=\skip81 +\shortjournalwidth=\skip82 +\shortserieswidth=\skip83 +\shorttitlewidth=\skip84 +\shortauthorwidth=\skip85 +\shorteditorwidth=\skip86 +\locallabelnumberwidth=\skip87 +\locallabelalphawidth=\skip88 +\localshorthandwidth=\skip89 +\localshortjournalwidth=\skip90 +\localshortserieswidth=\skip91 +\localshorttitlewidth=\skip92 +\localshortauthorwidth=\skip93 +\localshorteditorwidth=\skip94 +Package biblatex Info: Trying to load compatibility code... +Package biblatex Info: ... file 'blx-compat.def' found. + +(/usr/share/texmf-dist/tex/latex/biblatex/blx-compat.def +File: blx-compat.def 2025/07/10 v3.21 biblatex compatibility (PK/MW) +) +Package biblatex Info: Trying to load generic definitions... +Package biblatex Info: ... file 'biblatex.def' found. + +(/usr/share/texmf-dist/tex/latex/biblatex/biblatex.def +File: biblatex.def 2025/07/10 v3.21 biblatex compatibility (PK/MW) +\c@textcitecount=\count490 +\c@textcitetotal=\count491 +\c@textcitemaxnames=\count492 +\c@biburlbigbreakpenalty=\count493 +\c@biburlbreakpenalty=\count494 +\c@biburlnumpenalty=\count495 +\c@biburlucpenalty=\count496 +\c@biburllcpenalty=\count497 +\biburlbigskip=\muskip19 +\biburlnumskip=\muskip20 +\biburlucskip=\muskip21 +\biburllcskip=\muskip22 +\c@smartand=\count498 +) +Package biblatex Info: Trying to load natbib compatibility... +Package biblatex Info: ... file 'blx-natbib.def' found. + +(/usr/share/texmf-dist/tex/latex/biblatex/blx-natbib.def +File: blx-natbib.def 2025/07/10 v3.21 biblatex compatibility (PK/MW) +Package biblatex Info: Delimiter 'nameyeardelim' in context '' already defined, + overwriting. +) +Package biblatex Info: Trying to load bibliography style 'iso-numeric'... +Package biblatex Info: ... file 'iso-numeric.bbx' found. + (./iso-numeric.bbx +File: iso-numeric.bbx 2011/06/08 +Package biblatex Info: Trying to load bibliography style 'iso'... +Package biblatex Info: ... file 'iso.bbx' found. + +(./iso.bbx +File: iso.bbx 2011/01/09 v1.0 biblatex bibliography style + + +Package biblatex Warning: 'iso8601' date format specifier is deprecated. +(biblatex) Use 'iso' instead. + +\trashlength=\skip95 + +Package biblatex Warning: Macro 'urldate' already defined. +(biblatex) Using \renewbibmacro. + +)) +Package biblatex Info: Trying to load citation style 'iso-numeric'... +Package biblatex Info: ... file 'iso-numeric.cbx' found. + (./iso-numeric.cbx +File: iso-numeric.cbx 2011/06/08 +Package biblatex Info: Trying to load citation style 'numeric'... +Package biblatex Info: ... file 'numeric.cbx' found. + (/usr/share/texmf-dist/tex/latex/biblatex/cbx/numeric.cbx +File: numeric.cbx 2025/07/10 v3.21 biblatex citation style (PK/MW) +Package biblatex Info: Redefining '\cite'. +Package biblatex Info: Redefining '\parencite'. +Package biblatex Info: Redefining '\footcite'. +Package biblatex Info: Redefining '\footcitetext'. +Package biblatex Info: Redefining '\smartcite'. +Package biblatex Info: Redefining '\supercite'. +Package biblatex Info: Redefining '\textcite'. +Package biblatex Info: Redefining '\textcites'. +Package biblatex Info: Redefining '\cites'. +Package biblatex Info: Redefining '\parencites'. +Package biblatex Info: Redefining '\smartcites'. +)) +Package biblatex Info: Trying to load configuration file... +Package biblatex Info: ... file 'biblatex.cfg' found. + (/usr/share/texmf-dist/tex/latex/biblatex/biblatex.cfg +File: biblatex.cfg +) + +Package biblatex Warning: 'babel' option is deprecated. +(biblatex) Please use 'autolang' instead. + +Package biblatex Info: Input encoding 'utf8' detected. +Package biblatex Info: Document encoding is UTF8 .... +(/usr/share/texmf-dist/tex/latex/l3kernel/expl3.sty +Package: expl3 2026-01-19 L3 programming layer (loader) + +(/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +File: l3backend-pdftex.def 2025-10-09 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count499 +)) +Package biblatex Info: ... and expl3 +(biblatex) 2026-01-19 L3 programming layer (loader) +(biblatex) is new enough (at least 2020/04/06), +(biblatex) setting 'casechanger=expl3'. + +(/usr/share/texmf-dist/tex/latex/biblatex/blx-case-expl3.sty +(/usr/share/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +Package: xparse 2025-10-09 L3 Experimental document command parser +) +Package: blx-case-expl3 2025/07/10 v3.21 expl3 case changing code for biblatex +)) +(/usr/share/texmf-dist/tex/latex/listings/lstlang1.sty +File: lstlang1.sty 2025/11/14 1.11b listings language file +) +(/usr/share/texmf-dist/tex/latex/listings/lstlang2.sty +File: lstlang2.sty 2025/11/14 1.11b listings language file +) +(/usr/share/texmf-dist/tex/latex/listings/lstlang3.sty +File: lstlang3.sty 2025/11/14 1.11b listings language file +) +(/usr/share/texmf-dist/tex/latex/listings/lstmisc.sty +File: lstmisc.sty 2025/11/14 1.11b (Carsten Heinz) +) +(/usr/share/texmf-dist/tex/latex/amscls/amsthm.sty +Package: amsthm 2020/05/29 v2.20.6 +\thm@style=\toks41 +\thm@bodyfont=\toks42 +\thm@headfont=\toks43 +\thm@notefont=\toks44 +\thm@headpunct=\toks45 +\thm@preskip=\skip96 +\thm@postskip=\skip97 +\thm@headsep=\skip98 +\dth@everypar=\toks46 +) +(/usr/share/texmf-dist/tex/latex/thmtools/thmtools.sty +Package: thmtools 2023/05/04 v0.76 +\thmt@toks=\toks47 +\c@thmt@dummyctr=\count500 + +(/usr/share/texmf-dist/tex/latex/thmtools/thm-patch.sty +Package: thm-patch 2023/05/04 v0.76 + +(/usr/share/texmf-dist/tex/latex/thmtools/parseargs.sty +Package: parseargs 2023/05/04 v0.76 +\@parsespec=\toks48 +)) +(/usr/share/texmf-dist/tex/latex/thmtools/thm-kv.sty +Package: thm-kv 2023/05/04 v0.76 +Package thm-kv Info: Theorem names will be uppercased on input line 42. +Package thm-kv Info: kvsetkeys patch (v1.16 or later) on input line 158. +) +(/usr/share/texmf-dist/tex/latex/thmtools/thm-autoref.sty +Package: thm-autoref 2023/05/04 v0.76 + +(/usr/share/texmf-dist/tex/latex/thmtools/aliasctr.sty +Package: aliasctr 2023/05/04 v0.76 +)) +(/usr/share/texmf-dist/tex/latex/thmtools/thm-listof.sty +Package: thm-listof 2023/05/04 v0.76 +) +(/usr/share/texmf-dist/tex/latex/thmtools/thm-restate.sty +Package: thm-restate 2023/05/04 v0.76 +) +(/usr/share/texmf-dist/tex/latex/thmtools/thm-amsthm.sty +Package: thm-amsthm 2023/05/04 v0.76 +\thmt@style@headstyle=\toks49 +)) +Package thmtools Info: Key `qed' (with value `\qedsymbol ') +(thmtools) is not a known style key. +(thmtools) Will pass this to every \declaretheorem +(thmtools) that uses `style=kiproofstyle' on input line 717. +\c@definition=\count501 +) +(/usr/share/texmf-dist/tex/latex/geometry/geometry.sty +Package: geometry 2020/01/02 v5.9 Page Geometry + +(/usr/share/texmf-dist/tex/generic/iftex/ifvtex.sty +Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. +) +\Gm@cnth=\count502 +\Gm@cntv=\count503 +\c@Gm@tempcnt=\count504 +\Gm@bindingoffset=\dimen260 +\Gm@wd@mp=\dimen261 +\Gm@odd@mp=\dimen262 +\Gm@even@mp=\dimen263 +\Gm@layoutwidth=\dimen264 +\Gm@layoutheight=\dimen265 +\Gm@layouthoffset=\dimen266 +\Gm@layoutvoffset=\dimen267 +\Gm@dimlist=\toks50 +) +(/usr/share/texmf-dist/tex/latex/lastpage/lastpage.sty +Package: lastpage 2025/08/14 v2.1h lastpage: 2.09 or 2e? (HMM) + +(/usr/share/texmf-dist/tex/latex/lastpage/lastpage2e.sty +Package: lastpage2e 2025/08/14 v2.1h Decide which 2e lastpage version to use (H +MM) + +(/usr/share/texmf-dist/tex/latex/lastpage/lastpagemodern.sty +Package: lastpagemodern 2025-08-14 v2.1h Refers to last page's name (HMM; JPG) +\c@lastpagecount=\count505 +) +)) (/usr/share/texmf-dist/tex/latex/amsfonts/amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols + +(/usr/share/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\symAMSa=\mathgroup4 +\symAMSb=\mathgroup5 +LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +)) +(/usr/share/texmf-dist/tex/latex/amsfonts/euscript.sty +Package: euscript 2009/06/22 v3.00 Euler Script fonts +LaTeX Font Info: Overwriting math alphabet `\EuScript' in version `bold' +(Font) U/eus/m/n --> U/eus/b/n on input line 33. +)) +(/usr/share/texmf-dist/tex/latex/lipsum/lipsum.sty +(/usr/share/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +Package: l3keys2e 2025-10-09 LaTeX2e option processing using LaTeX3 keys +) +Package: lipsum 2021-09-20 v2.7 150 paragraphs of Lorem Ipsum dummy text +\g__lipsum_par_int=\count506 +\l__lipsum_a_int=\count507 +\l__lipsum_b_int=\count508 + +(/usr/share/texmf-dist/tex/latex/lipsum/lipsum.ltd.tex)) +Package csquotes Info: Checking for multilingual support... +Package csquotes Info: ... found 'babel' package. +Package csquotes Info: Enabling multilingual quotes. + + +Package biblatex Warning: Attempt to redefine deprecated '\mkbibnamelast'. +(biblatex) Please use '\mkbibnamefamily' instead. +(biblatex) Using '\mkbibnamefamily'. + + +Package biblatex Warning: Conflicting options. +(biblatex) 'urldate=iso' requires 'seconds=true'. +(biblatex) Setting 'seconds=true' on input line 144. + +(./kidiplom.aux +Package babel Info: 'czech' activates 'czech' shorthands. +(babel) Reported on input line 21. + + +LaTeX Warning: Label `tab:prepinace' multiply defined. + +) +\openout1 = `kidiplom.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 144. +LaTeX Font Info: ... okay on input line 144. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 144. +LaTeX Font Info: ... okay on input line 144. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 144. +LaTeX Font Info: ... okay on input line 144. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 144. +LaTeX Font Info: ... okay on input line 144. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 144. +LaTeX Font Info: ... okay on input line 144. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 144. +LaTeX Font Info: ... okay on input line 144. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 144. +LaTeX Font Info: ... okay on input line 144. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 144. +LaTeX Font Info: ... okay on input line 144. +LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 144. +LaTeX Font Info: ... okay on input line 144. + (/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count509 +\scratchdimen=\dimen268 +\scratchbox=\box112 +\nofMPsegments=\count510 +\nofMParguments=\count511 +\everyMPshowfont=\toks51 +\MPscratchCnt=\count512 +\MPscratchDim=\dimen269 +\MPnumerator=\count513 +\makeMPintoPDFobject=\count514 +\everyMPtoPDFconversion=\toks52 +) (/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf +Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 +85. + +(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +Package hyperref Info: Link coloring ON on input line 144. +\c@lstlisting=\count515 + +(./kidiplom.glsdefs) +Package biblatex Info: Trying to load language 'czech' -> 'czech-iso'... +Package biblatex Info: ... file 'czech-iso.lbx' found. + (./czech-iso.lbx +File: czech-iso.lbx +Package biblatex Info: Trying to load language 'czech'... +Package biblatex Info: ... file 'czech.lbx' found. + (./czech.lbx +File: czech.lbx +Package biblatex Info: Trying to load language 'english' -> 'english-iso'... +Package biblatex Info: ... file 'english-iso.lbx' found. + (./english-iso.lbx +File: english-iso.lbx +Package biblatex Info: Trying to load language 'english'... +Package biblatex Info: ... file 'english.lbx' found. + +(/usr/share/texmf-dist/tex/latex/biblatex/lbx/english.lbx +File: english.lbx 2025/07/10 v3.21 biblatex localization (PK/MW) +))) +Package biblatex Info: Trying to load language 'czech'... +Package biblatex Info: ... file 'czech.lbx' found. + (./czech.lbx +File: czech.lbx +Package biblatex Info: Trying to load language 'english' -> 'english-iso'... +Package biblatex Info: ... file 'english-iso.lbx' found. + +(./english-iso.lbx +File: english-iso.lbx +Package biblatex Info: Trying to load language 'english'... +Package biblatex Info: ... file 'english.lbx' found. + (/usr/share/texmf-dist/tex/latex/biblatex/lbx/english.lbx +File: english.lbx 2025/07/10 v3.21 biblatex localization (PK/MW) +)))) +Package biblatex Info: Trying to load language 'english' -> 'english-iso'... +Package biblatex Info: ... file 'english-iso.lbx' found. + (./english-iso.lbx +File: english-iso.lbx +Package biblatex Info: Trying to load language 'english'... +Package biblatex Info: ... file 'english.lbx' found. + (/usr/share/texmf-dist/tex/latex/biblatex/lbx/english.lbx +File: english.lbx 2025/07/10 v3.21 biblatex localization (PK/MW) +) +Package biblatex Info: Trying to load language 'english'... +Package biblatex Info: ... file 'english.lbx' found. +(/usr/share/texmf-dist/tex/latex/biblatex/lbx/english.lbx +File: english.lbx 2025/07/10 v3.21 biblatex localization (PK/MW) +)) +Package biblatex Info: Input encoding 'utf8' detected. +Package biblatex Info: Data encoding 'utf8' specified. +(biblatex) No need to reencode data. +\openout8 = `kidiplom.bcf'. + +Package biblatex Info: Trying to load bibliographic data... +Package biblatex Info: ... file 'kidiplom.bbl' found. + (./kidiplom.bbl) +Package biblatex Info: Reference section=0 on input line 144. +Package biblatex Info: Reference segment=0 on input line 144. + +*geometry* detected driver: pdftex +*geometry* verbose mode - [ preamble ] result: +* driver: pdftex +* paper: a4paper +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: +* h-part:(L,W,R)=(113.81102pt, 409.50119pt, 74.19566pt) +* v-part:(T,H,B)=(99.58464pt, 645.87756pt, 99.58464pt) +* \paperwidth=597.50787pt +* \paperheight=845.04684pt +* \textwidth=409.50119pt +* \textheight=645.87756pt +* \oddsidemargin=41.54103pt +* \evensidemargin=41.54103pt +* \topmargin=-9.68535pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=12.0pt +* \footskip=30.0pt +* \marginparwidth=44.0pt +* \marginparsep=10.0pt +* \columnsep=10.0pt +* \skip\footins=10.8pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidefalse +* \@mparswitchfalse +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + + +File: graphics/kititle-cz-nofont.pdf Graphic file (type pdf) + +Package pdftex.def Info: graphics/kititle-cz-nofont.pdf used on input line 149 +. +(pdftex.def) Requested size: 225.24323pt x 43.36232pt. +LaTeX Font Info: Trying to load font information for OT1+lmr on input line 1 +49. +(/usr/share/texmf-dist/tex/latex/lm/ot1lmr.fd +File: ot1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +LaTeX Font Info: Trying to load font information for OML+lmm on input line 1 +49. + +(/usr/share/texmf-dist/tex/latex/lm/omllmm.fd +File: omllmm.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +LaTeX Font Info: Trying to load font information for OMS+lmsy on input line +149. + +(/usr/share/texmf-dist/tex/latex/lm/omslmsy.fd +File: omslmsy.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +LaTeX Font Info: Trying to load font information for OMX+lmex on input line +149. + +(/usr/share/texmf-dist/tex/latex/lm/omxlmex.fd +File: omxlmex.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <14.4> on input line 149. +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <10> on input line 149. +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <7> on input line 149. +LaTeX Font Info: Trying to load font information for U+msa on input line 149 +. + +(/usr/share/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Trying to load font information for U+msb on input line 149 +. + +(/usr/share/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) + +File: graphics/UP_znak.pdf Graphic file (type pdf) + +Package pdftex.def Info: graphics/UP_znak.pdf used on input line 149. +(pdftex.def) Requested size: 101.59187pt x 101.59187pt. +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <12> on input line 149. +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <8> on input line 149. +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <6> on input line 149. + [1 + +\openout3 = `kidiplom.ist'. + +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}{/usr/share/texmf-dist/fonts +/enc/dvips/lm/lm-ec.enc} <./graphics/kititle-cz-nofont.pdf> <./graphics/UP_znak +.pdf>] +LaTeX Font Info: External font `lmex10' loaded for size +(Font) <10.95> on input line 149. + [2] [3 + +] [4 + +] +(./kidiplom.toc [5 + +] [6]) +\tf@toc=\write9 +\openout9 = `kidiplom.toc'. + + [7] (./kidiplom.lot) +\tf@lot=\write10 +\openout10 = `kidiplom.lot'. + + [8 + +] [9 + +] +Package hyperref Info: bookmark level for unknown definition defaults to 0 on i +nput line 170. + [10] + +File: graphics/TcpIp.png Graphic file (type png) + +Package pdftex.def Info: graphics/TcpIp.png used on input line 221. +(pdftex.def) Requested size: 409.50119pt x 260.91075pt. + [11{/usr/share/texmf-dist/fonts/enc/dvips/lm/lm-mathit.enc}] [12 <./graphics/T +cpIp.png>] [13] +[14] [15] [16] (/usr/share/texmf-dist/tex/latex/listings/lstlang1.sty +File: lstlang1.sty 2025/11/14 1.11b listings language file +) +LaTeX Font Info: Trying to load font information for T1+pcr on input line 33 +0. + +(/usr/share/texmf-dist/tex/latex/psnfss/t1pcr.fd +File: t1pcr.fd 2001/06/04 font definitions for T1/pcr. +) [17{/usr/share/texmf-dist/fonts/enc/dvips/base/8r.enc}] +Package hyperref Info: bookmark level for unknown lstlisting defaults to 0 on i +nput line 336. + [18] [19] +Overfull \hbox (15.3443pt too wide) in paragraph at lines 393--394 +\T1/lmr/m/n/12 Pi po-u-it knihovny Ze-roMQ vy-tv-me ob-jekt `ctx = zmq_co +ntext(num_threads)`. + [] + + +Overfull \hbox (4.16487pt too wide) in paragraph at lines 403--404 +\T1/lmr/m/n/12 Populrn im-ple-men-tac, kte-rou vi-dme na-p-klad v Rust ne +bo C#, je async/await. + [] + +[20] [21] +Overfull \hbox (4.1038pt too wide) in paragraph at lines 451--452 +\T1/lmr/m/n/12 Pro m-en v-konu pro-gramu ser-veru po-u--vm v-born pro- +fi-ler Tracy. Je zdarma, + [] + +[22] [23] +Overfull \hbox (3.57536pt too wide) in paragraph at lines 509--510 +\T1/lmr/m/n/12 necraft pro Win-dows. Nej-prve vy-tvo-me re-gistr, co je ob-j +ekt typu `entt::registry`, + [] + +[24] [25] [26] +Overfull \hbox (46.2356pt too wide) in paragraph at lines 581--582 +\T1/lmr/m/n/12 kdo se prv pi-po-jil a kdo od-po-jil. Tda na to m dv me-t +ody: [][][] + [] + +[27] [28{/usr/share/texmf-dist/fonts/enc/dvips/lm/lm-mathsy.enc}{/usr/share/tex +mf-dist/fonts/enc/dvips/lm/lm-rm.enc}] +Overfull \hbox (782.2338pt too wide) in alignment at lines 647--656 + [] [] [] + [] + +[29] [30] [31] +Overfull \hbox (2.99237pt too wide) in paragraph at lines 722--723 +\T1/lmr/m/n/12 do pro-to-kolu za-tm ne-pi-d-vali, pro-toe si stejn do pa-k +etu ukl-dme slo snmku, + [] + +[32] + +File: graphics/latencycomparison.pdf Graphic file (type pdf) + +Package pdftex.def Info: graphics/latencycomparison.pdf used on input line 743 +. +(pdftex.def) Requested size: 327.60219pt x 245.71564pt. + +File: graphics/integrationcomparison.pdf Graphic file (type pdf) + +Package pdftex.def Info: graphics/integrationcomparison.pdf used on input line + 749. +(pdftex.def) Requested size: 409.50119pt x 307.14322pt. + +File: graphics/playerbenchmark.png Graphic file (type png) + +Package pdftex.def Info: graphics/playerbenchmark.png used on input line 761. +(pdftex.def) Requested size: 204.7506pt x 129.84302pt. + +File: graphics/OutboundArchitecture.png Graphic file (type png) + +Package pdftex.def Info: graphics/OutboundArchitecture.png used on input line +774. +(pdftex.def) Requested size: 409.50119pt x 145.32677pt. + [33 <./graphics/latencycomparison.pdf>] [34 <./graphics/integrationcomparison. +pdf> <./graphics/playerbenchmark.png>] [35 <./graphics/OutboundArchitecture.png +>] +LaTeX Font Info: Trying to load font information for TS1+lmr on input line 8 +36. + (/usr/share/texmf-dist/tex/latex/lm/ts1lmr.fd +File: ts1lmr.fd 2015/05/01 v1.6.1 Font defs for Latin Modern +) [36{/usr/share/texmf-dist/fonts/enc/dvips/lm/lm-ts1.enc}] +(/usr/share/texmf-dist/tex/latex/listings/lstlang1.sty +File: lstlang1.sty 2025/11/14 1.11b listings language file +) +(/usr/share/texmf-dist/tex/latex/listings/lstlang2.sty +File: lstlang2.sty 2025/11/14 1.11b listings language file +) +(/usr/share/texmf-dist/tex/latex/listings/lstlang3.sty +File: lstlang3.sty 2025/11/14 1.11b listings language file +) +(/usr/share/texmf-dist/tex/latex/listings/lstlang1.sty +File: lstlang1.sty 2025/11/14 1.11b listings language file +) +(/usr/share/texmf-dist/tex/latex/listings/lstlang2.sty +File: lstlang2.sty 2025/11/14 1.11b listings language file +) +(/usr/share/texmf-dist/tex/latex/listings/lstlang3.sty +File: lstlang3.sty 2025/11/14 1.11b listings language file +) +(/usr/share/texmf-dist/tex/latex/listings/lstmisc.sty +File: lstmisc.sty 2025/11/14 1.11b (Carsten Heinz) +) +Overfull \hbox (11.6933pt too wide) in alignment at lines 881--943 + [] [] [] + [] + + +ignored: Infinite glue shrinkage found in box being split [37] +ignored: Infinite glue shrinkage fo +und in box being split [38] +Overfull \vbox (0.47247pt too high) has occurred while \output is active [] + + +[39] [40{/usr/share/texmf-dist/fonts/enc/dvips/lm/lm-mathex.enc}] +Overfull \hbox (12.74097pt too wide) in paragraph at lines 995--996 +\T1/lmr/m/n/12 Pro sazbu li-te-ra-tury m ui-va-tel dv mo-nosti. Me po-u- +t slu-eb ba-lk \T1/lmr/m/sc/12 Bib\T1/lmr/m/n/12 L[]T[]X, + [] + + +LaTeX Font Warning: Font shape `T1/lmr/bx/sc' undefined +(Font) using `T1/lmr/bx/n' instead on input line 996. + + +Overfull \hbox (33.70378pt too wide) in paragraph at lines 1013--1014 +[][][][][][][][][][][]\T1/lmr/m/n/12 . Na da-nou zkratku se pak lze od-ka-zo-va +t jed-no-due, []. + [] + +[41] + +Package lipsum Warning: Unknown language 'latin'. Hyphenation patterns for +(lipsum) 'czech' will be used instead. + +\@gls@deffile=\write11 +\openout11 = `kidiplom.glsdefs'. + +Package hyperref Info: bookmark level for unknown proof defaults to 0 on input +line 1066. +[42] [43] +Package hyperref Info: bookmark level for unknown remark defaults to 0 on input + line 1070. +Package hyperref Info: bookmark level for unknown example defaults to 0 on inpu +t line 1074. +Package hyperref Info: bookmark level for unknown lemma defaults to 0 on input +line 1078. +Package hyperref Info: bookmark level for unknown consequence defaults to 0 on +input line 1082. +Package hyperref Info: bookmark level for unknown theorem defaults to 0 on inpu +t line 1086. + [44] [45] [46 + +] [47 + +] [48 + +] [49] +No file kidiplom.acr. +[50 + +] + +LaTeX Warning: Empty bibliography on input line 1215. + +No file kidiplom.ind. + +enddocument/afterlastpage (AED): lastpage setting LastPage. +(./kidiplom.aux) + *********** +LaTeX2e <2025-11-01> +L3 programming layer <2026-01-19> + *********** + + +LaTeX Font Warning: Some font shapes were not available, defaults substituted. + + +LaTeX Warning: There were undefined references. + + +LaTeX Warning: There were multiply-defined labels. + + +Package biblatex Warning: Please (re)run Biber on the file: +(biblatex) kidiplom +(biblatex) and rerun LaTeX afterwards. + +Package logreq Info: Writing requests to 'kidiplom.run.xml'. +\openout1 = `kidiplom.run.xml'. + + ) +Here is how much of TeX's memory you used: + 31791 strings out of 469481 + 588463 string characters out of 5469630 + 1700795 words of memory out of 5000000 + 59687 multiletter control sequences out of 15000+600000 + 713119 words of font info for 105 fonts, out of 8000000 for 9000 + 24 hyphenation exceptions out of 8191 + 110i,12n,125p,2606b,2308s stack positions out of 10000i,1000n,20000p,200000b,200000s + +pdfTeX warning (dest): name{section*.8} has been referenced but does not exist, + replaced by a fixed one + + +pdfTeX warning (dest): name{glo:UPOL} has been referenced but does not exist, r +eplaced by a fixed one + + +pdfTeX warning (dest): name{1ind.ind} has been referenced but does not exist, r +eplaced by a fixed one + + +Output written on kidiplom.pdf (50 pages, 789781 bytes). +PDF statistics: + 1073 PDF objects out of 1200 (max. 8388607) + 899 compressed objects within 9 object streams + 254 named destinations out of 1000 (max. 500000) + 804 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/kidiplom.lot b/kidiplom.lot new file mode 100644 index 0000000..2291cdd --- /dev/null +++ b/kidiplom.lot @@ -0,0 +1,8 @@ +\babel@toc {czech}{}\relax +\contentsline {table}{\numberline {1}{Rozhraní třídy QuicrEndpoint}}{29}{table.1}% +\contentsline {table}{\numberline {2}{Seznam přepínačů}}{37}{table.2}% +\contentsline {table}{\numberline {3}{\ignorespaces Odstavce v tabulkách}}{43}{table.3}% +\babel@toc {czech}{}\relax +\babel@toc {czech}{}\relax +\babel@toc {english}{}\relax +\babel@toc {czech}{}\relax diff --git a/kidiplom.pdf b/kidiplom.pdf new file mode 100644 index 0000000..6a8f890 Binary files /dev/null and b/kidiplom.pdf differ diff --git a/kidiplom.run.xml b/kidiplom.run.xml new file mode 100644 index 0000000..b372d0b --- /dev/null +++ b/kidiplom.run.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + latex + + kidiplom.bcf + + + kidiplom.bbl + + + blx-dm.def + iso-numeric.dbx + blx-compat.def + biblatex.def + blx-natbib.def + iso.bbx + iso-numeric.bbx + numeric.cbx + iso-numeric.cbx + biblatex.cfg + english.lbx + english-iso.lbx + czech.lbx + czech-iso.lbx + + + + biber + + biber + kidiplom + + + kidiplom.bcf + + + kidiplom.bbl + + + kidiplom.bbl + + + kidiplom.bcf + + + bibliografie.bib + + + diff --git a/kidiplom.synctex.gz b/kidiplom.synctex.gz new file mode 100644 index 0000000..71ec4cc Binary files /dev/null and b/kidiplom.synctex.gz differ diff --git a/kidiplom.tex b/kidiplom.tex new file mode 100644 index 0000000..f155069 --- /dev/null +++ b/kidiplom.tex @@ -0,0 +1,1234 @@ +%%% Ukázkový text a dokumentace stylu pro text závěrečné (bakalářské a +%%% diplomové) práce na KI PřF UP v Olomouci +%%% Copyright (C) 2012 Martin Rotter, +%%% Copyright (C) 2014 Jan Outrata, + + +%% Pro získání PDF souboru dokumentu je třeba tento zdrojový text v +%% LaTeXu přeložit (dvakrát) programem pdfLaTeX. + +%% V případě použití programu BibLaTeX pro tvorbu seznamu literatury +%% je poté ještě třeba spustit program Biber s parametrem jméno +%% souboru zdrojového textu bez přípony a následně opět (dvakrát) +%% přeložit zdrojový text programem pdfLaTeX. + +%% Postup získání Postscriptového souboru je popsán v dokumentaci. + + +%% Třída dokumentu implementující styl pro závěrečnou práci. Vybrané +%% nepovinné parametry (ostatní v dokumentaci): + +%% 'master' pro sazbu diplomové práce, jinak se sází bakalářská práce + +%% 'program=kód' pro Váš studijní program/obor (specializaci), kódy +%% pro diplomovou práci 'infoi' pro Informatiku (Obecná informatika), +%% 'infui' pro Informatiku (Umělá inteligence), 'ainfpst' pro +%% Aplikovanou informatiku (Počítačové systémy a technologie), 'uinf' +%% pro Učitelství informatiky pro střední školy, 'binf' pro +%% Bioinformatiku, 'inf' pro Informatiku (bez specializací) a 'ainf' +%% pro Aplikovanou informatiku (bez specializací), jinak je výchozí +%% ainfvs pro Aplikovanou informatiku (Vývoj software), a pro +%% bakalářskou práci 'infoi' pro Informatiku (Obecná informatika), +%% 'itp' pro Informační technologie v prezenční formě, 'itk' pro +%% Informační technologie v kombinované formě, 'infv' pro Informatiku +%% pro vzdělávání, 'binf' pro Bioinfomatiku, 'inf' pro Informatiku +%% (bez specializací), 'ainfp' pro Aplikovanou informatiku (bez +%% specializací) v prezenční formě, 'ainfk' pro Aplikovanou +%% informatiku (bez specializací) v kombinované formě, jinak je +%% výchozí infpvs pro Informatiku (Programování a vývoj software) + +%% 'printversion' pro sazbu verze pro tisk (nebarevné logo a odkazy, +%% odkazy s uvedením adresy za odkazem, ne odkazy do rejstříku), +%% jinak verze pro prohlížeč + +%% 'biblatex' pro zapnutí podpory pro sazbu bibliografie pomocí +%% BibLaTeXu, jinak je výchozí sazba v prostředí thebibliography + +%% 'language=jazyk' pro jazyk práce, jazyky english pro anglický, +%% slovak pro slovenský, jinak je výchozí czech pro český + +%% 'font=sans' pro bezpatkový font (Iwona Light), jinak je výchozí +%% serif pro patkový (Latin Modern) + +%% 'figures, tables, theorems a sourcecodes' pro sazbu seznamu +%% obrázků, tabulek, vět a zdrojových kódů, jinak při =false se +%% nesází (u theorems a sourcecodes výchozí) + +\documentclass[ +% master, +% program=ainfvs, +% printversion, + biblatex, +% language=english, +% font=sans, + figures=false, +% tables=false, +% theorems, +% sourcecodes, + glossaries, + index +]{kidiplom} + +\title{Hra} +\title[english]{A style for thesis} + + + +%% Informace pro úvodní strany. V jazyku práce (pokud není v komentáři +%% uvedeno česky) a anglicky. Uveďte všechny, u kterých není v +%% komentáři uvedeno, že jsou volitelné. Při neuvedení se použijí +%% výchozí texty. Text pro jiný než nastavený jazyk práce (nepovinným +%% parametrem language makra \documentclass, výchozí český) se zadává +%% použitím makra s uvedením jazyka jako nepovinného parametru. + +%% Název práce, česky a anglicky. Měl by se vysázet na jeden řádek. +\title{Styl pro text závěrečné práce} +\title[english]{A style for thesis} + +%% Volitelný podnázev práce, česky a anglicky. Měl by se vysázet na +%% jeden řádek. Výchozí je prázdný. +\subtitle{Ukázkový text a dokumentace stylu v \LaTeX{}u} +\subtitle[english]{Sample text and documentation of the \LaTeX{} style} + +%% Jméno autora práce. Makro nemá nepovinný parametr pro uvedení +%% jazyka. +\author{Martin Šlachta} + +%% Jméno vedoucího práce (včetně titulů). Makro nemá nepovinný +%% parametr pro uvedení jazyka. +\supervisor{Mgr. Tomáš Urbanec, Ph.D.} + +%% Volitelný rok odevzdání práce. Výchozí je aktuální (kalendářní) +%% rok. Makro nemá nepovinný parametr pro uvedení jazyka. +%\yearofsubmit{\the\year} + +%% Anotace práce, včetně anglické (obvykle překlad z jazyka +%% práce). Jeden odstavec! +\annotation{Ukázkový text závěrečné práce na Katedře informatiky + Přírodovědecké fakulty Univerzity Palackého v Olomouci, který je + zároveň dokumentací stylu pro text práce v \LaTeX{}u. Zdrojový text + v \LaTeX{}u je doporučeno použít jako šablonu pro text skutečné + závěrečné práce studenta.} + +\annotation[english]{Sample text of thesis at the \kitextdepten, + \kitextfacultyen, \kitextuniven{} and, at the same time, + documentation of the \LaTeX{} style for the text. The source text in + \LaTeX{} is recommended to be used as a template for real student's + thesis text.} + +%% Klíčová slova práce, včetně anglických. Oddělená (obvykle) středníkem. +\keywords{styl textu; závěrečná práce; dokumentace; ukázkový text} +\keywords[english]{text style; thesis; documentation; sample text} + +%% Volitelná specifikace příloh textu práce, i anglicky. Výchozí je +%% 'elektronická data v systému katedry informatiky / electronic data +%% in system of department of computer science'. +%\supplements{nejlepší software všech dob} +%\supplements[english]{the best software of all times} + +%% Volitelné poděkování. Stručné! Výchozí je prázdné. Makro nemá +%% nepovinný parametr pro uvedení jazyka. +\thanks{Děkuji, děkuji, děkuji.} + +%% Cesta k souboru s bibliografií pro její sazbu pomocí BibLaTeXu +%% (zvolenou nepovinným parametrem biblatex makra +%% \documentclass). Použijte pouze při této sazbě, ne při (výchozí) +%% sazbě v prostředí thebibliography. +\bibliography{bibliografie.bib} + +%% Další dodatečné styly (balíky) potřebné pro sazbu vlastního textu +%% práce. +\usepackage{lipsum} +\usepackage{longtable} + +\begin{document} +%% Sazba úvodních stran -- titulní, s bibliografickými údaji, s +%% anotací a klíčovými slovy, s poděkováním a prohlášením, s obsahem a +%% se seznamy obrázků, tabulek, vět a zdrojových kódů (pokud jejich +%% sazba není vypnutá). +\maketitle + +%% Vlastní text závěrečné práce. Pro povinné závěry, před přílohami, +%% použijte prostředí kiconclusions. Povinná je i příloha s obsahem +%% elektronických dat. + +%% ------------------------------------------------------------------- + +\newcommand{\BibLaTeX}{\textsc{Bib}\LaTeX} + + +\section{Úvod} + +V práci se budeme zabývat technikami a způsoby pro optimalizaci datového přenosu, ať už pro šířku pásma nebo odezvu. + +\newpage + +\section{Distribuované systémy} + +V této kapitole si představíme problematiku distribuovaných systémů a princip jejich fungovaní. Distribuované systémy jsou takové, které svůj úkol plní pomocí více počítačů, propojených v jedné síti. Příkladem takové sítě je Internet, která je největší a skládá se z mnoha podsítí. Výhoda oproti paralelním systémům je spolehlivost a škálovatelnost. + +\begin{definition}[Počítačová síť] + Skupina komunikujících počítačů, které komunikují s ostatními v síti pomocí komunikačních protokolů, se nazývá počítačová síť. +\end{definition} + +Počítačovou síť si lze představit jako graf, kde vrcholy jsou jednotlivé počítače a hrana je přímé spojení mezi dvěma počítači, jako třeba měděný kabel nebo optické vlákno. Každý počítač v síti, neboli vrchol, má síťovou adresu, jeden nebo více procesů a vlastní paměť, kterou mezi sebou nemohou počítače sdílet. Namísto sdílené paměti musejí vrcholy komunikovat pomocí zpráv. + +\begin{definition}[Distribuovaný systém] + Systém je \uv{distribuovaný}, když svůj úkol plní pomocí více počítačů, které jsou propojené v síti a mohou tak spolu komunikovat. +\end{definition} + +Podobné jsou paralelní systémy, které také řeší společný problém více procesy, které běží souběžně. Rozdíl je ten, že v distribuovaném systému má každý proces vlastní paměť, kterou mezi sebou počítače nemohou sdílet. Procesy mezi sebou musejí komunikovat posíláním zpráv. + +\subsection{Komunikace v síti} + +V síti počítače komunikují pomocí komunikačního protokolu, kterému musejí rozumět. Komunikační protokol je soubor pravidel pro výměnu informací mezi počítači. Mají často různé charakteristiky, např. jestli jsou vyžadují navázání spojení nebo ne. To chápejme jako domluvu mezi dvěma stranami před tím, než začne přenos aplikačních dat pro systém. + +Nejčastěji se strany domlouvají na tajném klíči pro symetrické šifrování zpráv mezi sebou tak, aby nemohli být odposlouchávány. Dále si mohou vyměnit informace o verzi protokolu a omezeních, jako rychlost přenosu apod. Opakem jsou protokoly bez připojení. V takovém protokolu může na počítač A přijít zpráva z počítače B, o kterém A nemuselo nikdy předtím slyšet. Protokol pak může mít definované různé chování pro tento případ. + +\begin{definition}[Komunikační protokol] + Soubor pravidel pro výměnu informací mezi počítači se nazývá \uv{komunikační protokol}. +\end{definition} + + + + +\subsection{TCP/IP} + +Rodina protokolů pro komunikaci v síti Internet se nazývá TCP/IP. Název se skládá ze dvou nejdůležitějších protokolů: IP, neboli Internet Protocol a TCP (Transmission Control Protocol) - protokol pro řízení přenosu. IP umožňuje komunikaci libovolných dvou uzlů počítačů v propojených sítích. TCP zajišťuje spolehlivý obousměrný přenos dat mezi procesy na dvou počítačích (ne nutně různých). + +Síťová komunikace je rozdělena do několika vrstev, každá s jinou zodpovědností. Jednotlivé vrstvy pak mezi sebou komunikují, podobně jako vidíme na obrázku . Konkrétně architektura TCP/IP je rozdělena do čtyř vrstev: aplikační, transportní, síťová a síťové rozhraní. Každá vrstva obsahuje vlastní protokoly, které lze měnit podle toho, co je třeba. + +\begin{description} + + \item[{Síťové rozhraní}] \hfill \\ + Nejnižší vrstva, která se stará o přenos přes fyzické médium. Pro různé sítě bude vyžadovat různé protokoly. Příkladem jsou Ethernet, Token ring, apod. + + \item[{Síťová}] \hfill \\ + Pro adresaci máme vrstvu síťovou. Ta směruje a předává jednotlivé datagramy. Příkladem protokolů jsou IP, ARP, RARP nebo IPSEC. Je nutné, aby stejně jako vrstva síťového rozhraní, byla implementována ve všech prvcích sítě. + + \item[{Transportní}] \hfill \\ + Předposlední vrstva je transportní. Tato vrstva je rozbalena až na koncových bodech, nikoliv po cestě. Není totiž důležitá pro směrování packetů. Stará se o to, jaké packety přišli, jestli nejsou poškozené a nebo jestli jsou všechny. Příkladem je TCP, UDP nebo QUIC. + + \item[{Aplikační}] \hfill \\ + Poslední vrstva je aplikační a v ní jsou právě aplikace. Příkladem protokolů jsou HTTP nebo gRPC, které spadají do kategorie tzv. middleware. To znamená, že protokol není nutně specifický pro konkrétní aplikaci. +\end{description} + +V práci se zaměříme na rodinu protokolů TCP/IP, která na síťové vrstvě využívá Internet protokol a na transportní TCP nebo UDP. Na obrázku TODO vidíme, jak mezi sebou jednotlivé vrstvy komunikují. Aplikace na počítači $A$ odešle zprávu, kterou počítač $D$ uvidí ve své instanci aplikace. Vrstva zná pouze vrstvu pod sebou. Plnou čarou vidíme datový tok zprávy, jak putuje přes jednotlivé vrstvy. Šrafovaná čára reprezentuje abstrahovaný datový tok, tak jak ho vidí jednotlivé vrstvy, které neřeší vrstvu pod nimi. Počítače B a C jsou tzv. redistribuční body. Všimněme si, že se vůbec nedostanou do transportní nebo aplikační vrstvy, pouze si rozbalí IP paket a zjistí, kam mají pakety posílat dál. Vrstva síťového rozhraní pracuje s různými médii, jak také vidíme na obrázku. ř + + +\begin{figure} + \begin{center} + \includegraphics[width=1\textwidth]{graphics/TcpIp} + \end{center} +\end{figure} + +Vrstvy jsou modelované pomocí hlaviček. Poslaný paket obsahuje hlavičku pro každou vrstvu. Nejnižší (linková) vrstva, např. s Ethernet protokolem, přenáší \uv{rámce}. Síťová vrstva s Internet protokolem přenáší IP pakety a hlavička obsahuje IP adresu odesílatele, příjemce a další informace potřebné k nasměrování rámce. TCP protokol přenáší \uv{segmenty} a UDP \uv{datagramy}. + +% Zaměřím se na tzv. rodinou protokolů TCP/IP která definuje, jak má probíhat komunikace v síti Internet, na kterou bych se v práci chtěl zaměřit. Síť internet je celosvětová síť sítí, na které najdeme webové stránky, souborová úložiště a informační systémy. Problém jakékoliv komunikace, včetně té na internetu, je propustnost, která je omezená. Malá propustnost může způsobit pomalé načtení webové stránky, což může potenciálního zákazníka odradit. Nebo například příliš opožděné reakce v informačním systému, který tak může snižovat produktivitu. + +\subsection{Architektury} + +Distribuované systémy mají různé architektury. Liší se např. v tom, kdo má v systému jak velké slovo a kdo komunikuje s kým. My zmíníme dvě: klient-server a peer-to-peer. + +\subsubsection{Klient-Server} + +První architekturu, kterou zmíníme, je klient-server. Vrcholy v síti jsou rozděleny na + +\subsubsection{Peer-to-Peer} + +\subsection{Rodina protokolů TCP/IP} + +Mezi uzly v síti je potřeba komunikovat. Narozdíl od komunikace mezi procesy na stejném počítači, nemáme k dispozici sdílenou paměť. Komunikace v síti je založena na posílání primitivních zpráv. Primitivních znamená formou n-tice bytů. Pokud proces A chce poslat zprávu procesu B, který je na jiném počítači, tak sestaví zprávu M. Tuto zprávu odešle procesu B pomocí systémového volání `send`. Toto systémové volání podporuje většina operačních systémů. Proces B jiným systémovým voláním `read` zprávu přečte a může na ni zareagovat, například provedením výpočtu a zasláním výsledku zprávou zpět na proces A. V této interakci mezi procesy počítáme s tím, že se oba shodnou, co jednotlivé bity ve zprávě znamenají. + +% ref: https://cs.wikipedia.org/wiki/TCP/IP +Komunikační protokol je množina pravidel, která určují syntaxi a význam jednotlivých zpráv při komunikaci. + +Síťová komunikace je rozdělena do vrstev. Každá vrstva má svou zodpovědnost. Internet protokol, neboli IP, určuje navigaci zpráv v síti. IP adresa počítače je protějšek adresy domu. + +\subsection{Protokoly v transportní vrstvě} + +Nejčastější protokoly transportní vrstvy pro komunikaci v síti Internet jsou TCP a UDP. Problém jiných protokolů je, že ne všechny uzly je musí podporovat, což může způsobovat ztracené packety, nebo dokonce žádná cesta nemusí existovat. Protokoly TCP i UDP si představíme. + +\subsubsection{Sockety} + +Tyto protokoly se v aplikacích používají pomocí tzv. socketů. Jedná se o objekt, který se chová jako soubor. Můžeme ho otevřít, zapsat, přečíst a zavřít. Představím přesně tyto funkce, protože je budu v práci využívat. Konkrétně budu používat Linuxové rozhraní. + +Pro začátek komunikace pomocí těchto protokolů musím otevřít socket pomocí `socket`. Funkce má parametr pro typ protokolu, který chceme použít. Po vytvoření socketu ho můžeme navázat na konkrétní port pomocí `bind` s číslem portu. Pokud socket nenavážeme, přiřadí nám operační systém libovolný volný port. + +\subsubsection{TCP} + +Nejběžnější protokol je TCP. Při použití mezi sebou dva koncové body vytvoří spojení, přes které mohou posílat zprávy obousměrně. Protokol garantuje spolehlivé doručení dat v pořadí, ve kterém byla odeslána. Zároveň za Vás řeší tzv. congestion control. Jedná se o problém přetížení sítě, kdy v případě, že uzel může začít packety zahazovat. Příkladem může být omezení rychlosti stahování. Pokud platíte u poskytovatele 300Mb/s a začnou Vám chodit data rychlostí 500Mb/s, přebytečné packety se prostě zahodí. + +Po vytvoření socketu pro TCP můžeme použít funkci `accept`, která přijme první připojení ve frontě. Pokud se na náš socket někdo pokusí připojit, operační systém vykoná tzv. handshake a přidá nové připojení do fronty. Z fronty můžeme vytahovat právě pomocí `accept`. Zjistit, jestli ve frontě už nějaké připojení máme, můžeme pomocí funkce `listen`, která blokuje, dokud nějaké připojení nepřibyde. + +Nové přijaté připojení bude mít svůj vlastní socket s vlastním portem. Když zavoláme `write` a do argumentu dáme ukazatel na data a jejich délku, operační systém je odešle na druhou stranu, která s námi navázala spojení. Zaručí to, že na druhou stranu dojdou všechna data, nebo žádná. Druhá strana může pomocí `read` do alokované paměti přečíst to, co mu do socketu přišlo. Je nutné si uvědomit, že pokud zavoláme `write` pro data o délce řekněme 1000 bytů, tak druhá strana nemusí dostat všechna data pomocí jednoho `read`. Tento příkaz vrací počet bytů, které přečetl. Pokud tak přečte méně, než očekáváme, musíme provést volání znova, dokud nepřečteme vše co očekáváme. Mohlo by nás zarazit: jak může druhá strana vědět, kolik má očekávat dat? Pro to slouží tzv. komunikační protokol, který rozeberu v kapitole... + +\subsubsection{Spolehlivost} + +Popíšeme si, jak TCP zajišťuje spolehlivost pomocí ACK zpráv. Pokaždé, co dostane packet, odešle druhému koncovému bodu zprávu ACK s číslem packetu. V případě, že odesílatel ACK, neboli potvrzení o přijetí, nedostane, odešle packet znova. Příjemce si u sebe postupně skládá seřazený proud bytů. Jakmile je na socketu seřazená posloupnost bytů, umožní nám ji přečíst pomocí `read`. Pokud odešle jedna strana packety A, B a C, a příjemci přijde nejprve C a B, `read` nebude nic vracet, dokud nepřijde i packet A. Zmíním konkrétní případ, kdy to nemusí být žádoucí: Představme si, že A tvoří jeden příkaz a C a B tvoří druhý příkaz. Oba příkazy jsou na sobě nezávislé a příjemce je dokáže vykonat v libovolném pořadí. Stále potřebujeme spolehlivost doručení, ale stačí nám jen částečné uspořádání. + +Mezi aplikační protokoly využívající TCP patří HTTP/2, email, nebo SSH. + +Mezi nevýhodu bych zařadil to, že přenáší proud dat. Jinými slovy, v protokolu není proud rozdělen na jednotlivé, řekněme, "zprávy". Tuto logiku si musíme implementovat sami. Později si ukážeme, jak toho lze docílit. + +\subsubsection{UDP} + +Méně spolehlivá alternativa je UDP, neboli Unrealiable Datagram Protocol. Ten komunikuje pomocí tzv. datagramů, na rozdíl od proudu bytů, jako je tomu v případě TCP. Znamená to, že jedním systémovým voláním `write` odešleme právě jeden datagram, a na příjemci právě jedním `read` přečteme celý datagram. + +Zde již nebudeme volat `listen` ani `accept`. Výhoda je, že pokud zavoláme `write` a odešleme data o velikosti 100 bytů, je zaručeno, že druhá strana dostane celý tento blok právě jedním zavoláním `read`, ve kterém nebude nic dalšího. UDP totiž rozděluje data na datagramy, které v podstatě reprezentují packety. To usnadňuje práci s komunikačním protokolem. Protokol je nespolehlivý: datagramy mohou dorazit v jiném pořadí nebo vůbec. Jsou ale způsoby, jak spolehlivost, alespoň částečnou, implementovat. + + +\subsubsection{QUIC} + +QUIC je spolehlivý protokol transportní vrstvy od společnosti Google. Jeho cílem je být rychlejší varianta TCP, která využívá protokol UDP. Mezi dvěma koncovými body vytváří spolehlivé spojení. Na rozdíl od TCP umožňuje otevřít více proudů dat v jednom spojení a modelovat tak částečné uspořádání. Když se čeká na paket v TCP, tak se pozastaví celý tok dat, ale v případě QUIC se zastaví jen konkrétní proud. + +V protokolu se nachází pakety, rámce a čísla koncových bodů. Paketů máme více druhů a liší se především hlavičkou, ale také typem šifrování a její silou. Pro otevření spojení odešle klient serveru paket typu Initial, který má v hlavičce číslo lokálního spojení (LCID - Local connection ID) a číslo cílového spojení (DCID - Destination connection ID). Když server obdrží paket typu Initial, s číslem cílového spojení takovým, které nemá v registru, vytvoří úplně nové spojení s jiným číslem. Zpět klientovi pošle opět paket typu Initial a v hlavičce bude jako lokální číslo spojení mít nově vygenerované ID a jako cílové bude mít to, co klient poslal jako lokální. Touto výměnou se dva koncové body shodnou na svých číslech. Podotknu že čísla na obou koncích se liší, a prvotní cílové ID, které posílá klient, tak server nepoužívá. Jeho využití zmíním později. + +Paket v sobě obsahuje různé rámce, každý nějakého typu. Mezi typy patří třeba: ACK, CRYPTO, PADDING, PING, STREAM apod. Postupně je rozeberu. Rámec typu ACK funguje podobně jako v TCP a obsahuje čísla paketů, které chce druhé straně oznámit jako zpracované. Tento rámec najdeme právě v paketu typu Initial od serveru na klienta, kdy server chce oznámit klientovi, že paket přijal a zpracoval. Druhý rámec který už při handshake uvidíme je CRYPTO. Ten je v Initial paketu a obsahuje klient secret resp. server secret. Server je v moment, kdy mu přijde první Initial paket odvodit tzv. session key z klient secret a svého vygenerovaného server secret. Na klienta odešle paket Initial s CRYPTO rámcem obsahujícím server secret. Hned za ním odešle Handshake paket, který už je zašifrovaný pomocí session klíče a obsahuje certifikát serveru. Jakmile klient obdrží od serveru Initial a Handshake, může začít bezpečná komunikace. Druhá strana musí na všechny zprávy odpovědět pomocí ACK rámce. + +QUIC se tak shodl na tajném klíči i navázal spojení dvěma roundtripy, namísto čtyřmi, jako je tomu klasicky u TCP s TLS. Důvod je, že pakety může spojovat do jednoho datagramu. Takže server odpovídá na první Initial paket dvěma pakety: Initial a Handshake, ale v jednom datagramu. Dalším typem paketu, který už v tento moment může použít, jsou RTT-0 a RTT-1. RTT-0 lze poslat už v datagramu, ve kterém klient posílá na server Initial, a může obsahovat STREAM rámce. To znamená, že obsahuje užitečné aplikační data. Pokud nám tak v datagramu zbývá místo, nebo nechceme čekat na odpověď, můžeme okamžitě poslat RTT-0. Tento paket je sice šifrovaný, ale slabě a není odolný proti replay útoku, kdy útočník paket odposlechne a pošle znova. RTT-1 už je plně šifrovaný pomocí session klíče a nelze použít replay útok. + +Jak už jsem zmínil, užitečná aplikační data jsou ve STREAM rámcích. Pro začátek proudu ho musí jedna ze stran otevřít pomocí specifického rámce. Kdykoliv ho pak může zase zavřít. Dokonce je možné v jednom datagramu proud otevřít, poslat data a zase zavřít. Vidíme, že lze snadno modelovat částečné uspořádání a snížit blokování, které třeba v TCP běžně nastává. + +Čísla spojení, které mají dva koncové body spojení vybrané, se využívají pro identifikaci odesílatele. Normálně by TCP využilo adresu z IP hlavičky, ale ta se může třeba při přepnutí z mobilních dat na Wi-Fi, změnit. V ten moment nastává zdlouhavý TCP timeout, kdy se socket nakonec zavře a aplikace se pokusí navázat spojení znovu. V případě QUIC je přepnutí okamžité, protože druhý koncový bod se podívá jen na číslo cílového spojení v hlavičce a ví, od koho mu datagram přišel. + +Jak QUIC řeší spolehlivost už jsem trochu vysvětlil při handshake. Obecně používá ACK rámce, které posílá druhé straně, a který obsahuje úseky čísel paketů, které obdržel. Číslo paketu je v hlavičce a je postupně se inkrementující. Pokud druhá strana neobdrží ACK rámec, například pro paket n, pak odešle identický paket n, ale s novým číslem, které mu přiřadí čítač. Pokud druhá strana ACK odeslala, ale ten zrovna nepřišel, musí nějak řešit duplicity. Každý STREAM rámec obsahuje úsek dat proudu, který obsahuje, například od x do y. Díky tomu může koncový bod zjistit, že tuto část proudu už má a rámec zahodit. + + + +\subsection{Protokoly v aplikační vrstvě} + +Nejvyšší v rodině protokolů TCP/IP je aplikační vrstva. V ní najdeme protokoly jako HTTP, gRPC nebo SMTP. Aplikačním protokolům, které ale nejsou specifické pro konkrétní aplikaci, se říká middleware. Mezi takové řadíme právě HTTP nebo gRPC, které jsou pro obecné posílání zpráv. V aplikační vrstvě děláme autentizaci a autorizaci. + +\subsubsection{HTTP} + +Velmi používaným protokolem je HTTP, neboli Hyper Text Transport Protocol. Používá se např. na přenos HTML stránek. Byl navržen ke komunikaci mezi webovými prohlížeči a webovými servery, ale často se používá i pro API pro komunikaci mezi dvěma programy. Tento protocol je bezestavový. To znamená, že žádná data si neukládá mezi dvěma HTTP dotazy. Každý HTTP dotaz musí obsahovat kompletní informace k jeho vyhodnocení. + + + +\subsubsection{HTTP/3} + +Poměrně zajímavou novinkou je HTTP/3, která běží na protokolu QUIC. Jinak je podobný protocolu HTTP/2. + +\subsubsection{gRPC} + +Další protokol od Googlu je gRPC, který je binární a snaží se simulovat volání metod v objektech. Je to intuitivní alternativa k posílání zpráv. + +\subsubsection{Middleware} + +Speciálním případem protokolů v aplikační vrstvě je tzv. middleware. Je charakteristický tím, že není specifický pro žádnou aplikaci. Příkladem jsou právě protokoly zmíněné výše, jako gRPC nebo HTTP, protože libovolná aplikace je může využívat. Typické jsou různé typy rozhraní pro posílání zpráv. Pokročilejším případem jsou autentizační a autorizační middleware. Authentizace je ověření, že klient je opravdu ten, za koho se vydává. Autorizace je ověření, že klient má právo na to, co se snaží udělat. Je jasné, že tato problematika bude trápit více různých aplikací s ne nutně jinak společnou částí. + + + + +\subsection{Posílání zpráv} + +V této sekci se budu soustředit na middleware pro komunikaci mezi procesy pomocí zpráv. Rozeberu jak lze zprávy kódovat a strukturovaná data serializovat. Komunikovat pomocí zpráv sice neschovává síťovou komunikaci, jako třeba RPC. + +\subsubsection{Serializace} + +V systému jsem chtěl zprávu reprezentovat jako instanci konkrétního objektu. To znamená pro zprávu, která říká, že hráč napsal něco do chatu, bude existovat třída \kiinlinecode{C++}{!}{NewChatMessage} a konkrétní hodnoty budou v instanci této třídy. Díky tomu jsem schopný snadno vytvářet zprávy v systému. Alternativou je implementovat dynamický strom, který bych následně kódoval jako JSON. Uzly by byly JSON objekty a listy JSON hodnoty. Podmínkou je, že každý list musí být převeditelný na hodnotu v JSONu a musí mít klíč. Druhý přístup ale zbytečně obchází vlastnosti jazyka C++, jako dědičnost, kontrolu typů (i když ta je v C++ slabá) a další. Na druhou stranu je tento přístup hodně dynamický, proto se hodí například, kdyby schéma zprávy definoval sám uživatel, až po kompilaci programu. + +Pokud jsem chtěl posílat instance objektů, musel jsem instance převést na n-tici bytů. Tomuto procesu se říká serializace (resp. deserializace při převedení n-tice bytů na instance objektu). Velmi častým příkladem je serializace do JSON formátu, hojně využívaná v aplikacích s REST API rozhraním, nebo do XML v případě SOAP API rozhraní. To jsou tzv. textové formáty, které jsou pro člověka čitelné. Díky tomu jsou vhodné pro webové aplikace, kde rozhraní musí být srozumitelné pro snadnou práci. Nevýhoda je paměťová náročnost. Například číslo 1 000 000 se v JSON zakóduje do 7 bytů, i když binární reprezentace stejného čísla se vleze do 4 bytů. Rozdíl je směšný, ale téměř dvojnásobný. Druhým kamenem úrazu je struktura. Každý atribut objektu se v JSONu reprezentuje řetězcem, namísto třeba čísla o 2 bytech, které by unikátně atribut identifikovalo. + +Všechna tato snížení prostorové náročnosti řeší binární formáty. Známým příkladem je ProtoBuf, FlatBuffers, Parquet nebo Cap'n'Proto. Postupně je rozeberu jejich specializace. ProtoBuf je volně dostupný protokol od Googlu pro serializaci strukturovaných dat. Pro použití je třeba definovat v univerzálním jazyce to, jakou má zpráva strukturu. Jazyk je podobný definici struktur v jazyce C. Pro přestavu si ukážeme: + +\begin{kicode}{C++}{}{C++} + message EntitySpawnMessage { + uint32 entity_id = 1; + bool is_player = 2; + string name = 3; + } +\end{kicode} + +Vidíme, že místo \kiinlinecode{C++}{!}{struct} píšeme \kiinlinecode{C++}{!}{message} a atributy musí mít unikátní ID. Důvodem je kompatibilita verzí definice. Pokud bychom měli systém o dvou službách, a v jedné bychom přidali atribut `position`, jak vidíme v příkladě, mohla by být druhá služba stále schopná serializovaná data první službou deserializovat. + +\begin{kicode}{C++}{}{C++} +message EntitySpawnMessage { + uint32 entity_id = 1; + Vector3 position = 4; + bool is_player = 2; + string name = 3; +} +\end{kicode} + +Stejnou vlastnost má i JSON, kdy unikátní ID je právě řetězec pro klíč. Serializující služba může přidávat atributy, ale deserializaci to neovlivní. Z .proto souboru se vygenerují přímo třídy do potřebného jazyka. V mém případě C++. Výhoda definovat zprávy v univerzálním jazyce je čitelnost, možnost převést do libovolného programovacího jazyka a především reflexe. + +FlatBuffers je opět protokol od Googlu, který se vyvýjel pro použití v herních enginech pro hry více hráčů. Jeho výhoda je, že není třeba zprávu "deserializovat". Instanci třídy čte atributy přímo z n-tice bytů. V případě 60 zpráv za vteřinu zprávy od stovek hráčů, je rozdíl mezi deserializací a FlatBuffers znát. + +Parquet je formát pro sloupcová data, který umožňuje v serializovaných datech vyhledávat a má menší paměťovou náročnost, takže je vhodný i pro přenos. + +Posledním příkladem je Cap'n'Proto, čteno Captain Proto. Je to volně dostupný protokol, který nemá deserializaci, a je tak velmi rychlý. Jeho tvůrce navíc pracoval právě na ProtoBuf. + +\subsubsection{Kódování zpráv} + +Při čtení dat ze socketu pomocí TCP protokolu dostáváme proud bytů. Je potřeba z proudu zprávy dekódovat a naopak je být schopni do proudu zakódovat. Proto jsem definoval kódování zpráv a komponentu Messenger. TCP je spolehlivý protokol, proto se málokdy stane, že zprávy nebudou následovat hned po sobě. Pro zakódování zprávy zakóduju nejprve tzv. hlavičku. To je prvních pár bytů, které ukládají informaci o zprávě, jako třeba délku nebo typ. Za hlavičkou následuje serializovaná zpráva. V hlavičce budou první 4 byty tzv. magické číslo, které označuje začátek kóvání a slouží k synchronizaci čtecí hlavy v případě, že došlo při deserializaci k chybě. Dalšími 4 byty je n pro n-tici bytů pro serializovanou zprávu. + +Při zavolání peek na instanci Messenger, se do bufferu v instanci, který má velikost 64KB, přečte funkcí recv z TCP socketu. Volání není nutné opakovat, protože peek budeme opakovat hned další snímek za pár milisekund. Po zavolání `recv` skenujeme vstupní buffer a hledáme magické číslo. Jakmile ho najdeme, čteme další 4 byty jako délku $n$. Pokud v bufferu zbývá ještě alespoň $n$ bytů, vložíme je do fronty zpráv a odebereme z bufferu pro uvolnění místa. Nakonec funkce `peek` ověří, jestli něco ve frontě je, pokud ano, vrátí typ nejstarší zprávy ve frontě. + +Druhou funkcí je `pop`, která má template s argumentem T pro datový typ zprávy. Uživatel instance `Messenger` musí umět z čísla, které reprezentuje typ, dostat datový typ. To jsem udělal pomocí tzv. template specialization. Uživatel musí zavolat `peek` a podle vracené hodnoty zavolat `pop` se správným template argumentem. Funkce `pop` zavolá deserializační funkci generovanou ProtoBuf. + +\subsubsection{Implementace} + +Bylo potřeba zadefinovat, jak se zpráva bude posílat přes síť. Cílem nebyla univerzálnost a čitelnost, jako je například protokol HTTP, ale optimalizace velikosti. Je třeba definovat, jak zpráva v toku dat vypadá, a jak ji dekódovat. + +První čtyři byty obsahují tzv. `MAGIC` číslo. Může to být libovolná konstanta, protože jediný její význam je synchronizace toho, kde zpráva začíná. Důvod si ukážeme v části o nápravě chyb. Další byte je typ zprávy. Další 2 byty je délka zprávy. Průměrná délka packetu je 1200-1500 bytů, nemá proto smysl posílat delší zprávy. K tomu tento protokol není. Nakonec následuje samotná serializovaná zpráva. Těmto prvním 6 bytům se říká hlavička. + +\subsubsection{Detekce a náprava chyb} + +Občas mohou nastat v proudu chyby, kdy zprávu nelze dekódovat, nebo nastane chyba při deserializaci. Proto jsem do kódování implementoval nápravu chyb. Definoval jsem maximální délku bytů, kterou lze přeskočit při hledání magického čísla. To nestačí, pokud jsou data náhodná, protože se může stát, že číslo objeví i tak (i když je pravděpodobnost 1/(256\^4)). Proto si dekodér pro socket počítá chyby. Pokud se objeví 3 po sobě jdoucí chyby, tak spojení ukončí. Příkladem takové chyby je selhání deserializace nebo `recv` vrátí chybu. + + + + + +\subsection{Asynchroní IO} + +Čtení a zápis na socket je běžně blokující operace. To znamená, že při zavolání `read` pro čtení 10 bytů, bude volání blokovat, dokud na socket nepřijde 10 bytů. V případě serveru pro online hru je to nevhodné, protože pokud nám nic nepřišlo, můžeme mezitím vykonávat ostatní logiku hry. Socket lze nastavit jako neblokující tak, že pokud zavolám `read` a budu chtít číst 10 bytů, a ty tam ještě nebudou, vrátí mi ty co zatím přečetl (pokud přišlo jen 5 bytů, vrátí mi jen 5 bytů). Tuto menší část si můžu u klienta ukládat do bufferu a postupně zkoušet dekódovat jako zprávu. + +Podobnému přístupu se říká *asynchronní sockety*. Jinými slovy to znamená oddělení volání a samotného vykonání. V tomto případě sice zavoláme `read`, ale toto volání by se uložilo někam do fronty, a jiné samostatné vlákno by ho mohlo vykonat později. Protějšek z reálného světa je hodit dopis do schránky a pokračovat ve svém klasickém programu dne. Doručení se stane v nejbližších dnech a to někým jiným, takže my už se o dopis nemusíme starat. Pro lepší představu si pár existujících implementací představíme: + +\subsubsection{ZeroMQ} + +Při použití knihovny ZeroMQ vytváříme objekt `ctx = zmq\_context(num\_threads)`. Ten vytvoří námi specifikovaný počet vláken `num\_thread`. Když následně zavoláme `zmq\_send(ctx, x)`, protějšek klasického `send(x)`, tak nedojde k blokování. Místo toho se zpráva `x` umístí do fronty, ze které pak vlákna z `zmq\_context` tzv. "kradou" (work-stealing), a odesílají v pozadí. + +To samé platí o `zmq\_receive`, které si v pozadí bufferuje celou zprávu. TCP totiž nemá žádnou strukturu zprávy, a proto když zavoláme `recv`, můžeme dostat jen část. ZeroMQ místo toho v pozadí bufferuje, dokud neobdrží celou zprávu, a až poté vrací `true`. + +\subsubsection{Work stealing} + +Běžnou strategií pro dynamický multithreading, je tzv. work stealing. Jiné strategie jsou třeba work sharing. Implementuje se thread-safe fronta. Při asynchroním volání úkolu se vloží do této fronty. Následně máme X vláken, které se ve smyčce dotazují na frontu. Pokud v ní něco je, vytáhnou to a začnou na tom pracovat. Těmto vláknům se někdy říká "Worker". Většinou jich je právě tolik, kolik je fyzických jader v procesoru, protože cílem je paralerismus, a ten s vyšším počtem vláken nezlepšíme. Zajímavou vlastností je, že součástí úkolu může být právě vložení dalších úkolu do fronty. + +\subsubsection{Async/Await} + +Populární implementací, kterou vidíme například v Rust nebo C\#, je async/await. Async už jsme si vysvětlili. Await slouží pro volání asynchroních funkcí. Místo `queue.push(make\_task(...))` tak úkol může být právě volání funkce. Práce je tak daleko intuitivnější. Zde pozor, že pouhým voláním await na asynchroní funkci v C\# nebo Rust paralerismu nedocílíme! Na to je třeba v jeden moment await více úkolů. + +Příklad z reálného světa je poslat dopis s otázkou. Opět stačí hodit dopis do schránky. Až si ho eventuélně někdo přečte, může nám poslat odpověď. Když dostaneme odpověď, vzpomeneme si, kde jsme skončili, když jsem práci přerušili a odeslali dopis s otázkou, a když už máme odpověď, tak pokračujeme. + +\subsubsection{Boost Asio} + +Velmi podobná ZeroMQ je Boost ASIO. Ta ale nechává vytváření vláken na nás. Pouze vytvoříme objekt `asio\_context`, který má metodu `run`. Když z vlákna zavoláme metodu `run`, stane se vlákno workerem, který krade práci z fronty, která je taky `context`. + +Tento přístup je intuitivnější, protože se jedná přesně o to, jak worker thready fungují. Pouze spuštěná funkce, která se opakovaně dotazuje na frontu. Pokud něco najde, vytáhne to, a začne na tom pracovat. Jakmile práci dokončí, opět se dotazuje na frontu. Zde si také všimněme, že se nejedná o klasický rychlý context switching, který dodává iluzi více jader v operačních systémech, ale worker opravdu práci nejprve dokončí, než změní kontext a začne pracovat na něčem jiném. + +Otázka by mohla být, proč nevytvořit thread pro každou zprávu, kterou chceme odeslat. Důvodem je, že vytváření vláken je sice rychlejší, než celých procesů, ale pořád vyžaduje systémové volání, které může způsobit zpomalení. + +Proto se často používají tzv. green thready, fibery, user thready, ... což jsou thready, ale spravované kompletně v user-space. Není třeba žádné systémové volání. + +Na začátku se spustí několik workerů, což jsou thready, které právě kradou práci z fronty a vykonávají je. Většinou mají dlouhou životnost. + +\subsubsection{Stack pointer} + +Problém může být definovat práci pro thready. Jak vypadá takový objekt `Job`? Intuitivně by nás napadlo, že by obsahoval ukazatel na funkci. Nebo v případě, že máme jen velmi omezený počet různých implementací, může obsahovat jen typ, a worker už si dohledá, co má dělat. + +Druhým způsobem, který vidíme při použití `await/async` v jazycích jako Rust nebo C\#, je prostě zavolat funkci, která reprezentuje práci, pomocí `await`. Funkce await si uloží aktuální ukazatel na stack, vytvoří nový stack speciálně pro job, a objekt `Job` tak vypadá tak, že obsahuje tento nový stack pointer, ukazatel na funkci, a všechny potřebné registry. + +Všimněme si, že můžeme job vytvářet i z jiného jobu, a tím v podstatě větvit. Zároveň můžeme kód paralerizovat tak, že najednou budeme awaitovat více jobů. Představme si, že máme fyzický systém s metodou `step`. Ta zavolá `awaitAll(jobs)`, kde `jobs` je list jobů. Automaticky se všechny dostanou do fronty, a různé workery je mohou začít vykonávat paralerně. + + + + + +\subsection{Metriky} + +Abych byl schopný správně optimalizovat tok dat, potřeboval jsem sbírat metriky. Proto jsou třeba dvě komponenty. První je úložiště, kde budu metriky ukládat. Může se jednat o CSV soubor nebo databázi. Druhá je rozhraní, ve kterém budu metriky vizualizovat. Představím dvě služby, které pro to využívám. Následně si představíme samotné metriky, které budu měřit a proč. Všechny metriky budu měřit po vteřinách, některé jako sumu, jako např. množství odchozích dat, a jiné jako průměr, jako např. odezvu. + +\subsubsection{TimescaleDB} + +Jako úložiště jsem zvolil TimescaleDB. Jedná se o rozšíření do PostgreSQL, takže není třeba spouštět a starat se o další službu. Stačí mít spuštěnou PostgreSQL databázi. TimescaleDB umožňuje vytvářet tzv. hypertables, které jsou optimalizované pro rychlý insert. Vytvořil jsem komponentu `NetworkBandwidthReporter`, která má na rozhraní `report\_outbound` a `report\_inbound`. Tyto údaje posílá do komponenty `TimescaleDBReportOutputter`, která už zajišťuje připojení do databáze a umožňuje `report(metric\_name, value)`. V rámci optimalizace přidávám hodnoty do bufferu a posílám je pouze jednou za vteřinu jako sumu. + +\subsubsection{Grafana} + +Grafana je služba, která skrze webovou stránku poskytuje rozhraní pro vizualizaci metrik. Lze nastavit svůj dashboard a v něm různé grafy. V mém případě graf pro množství odchozích a množství příchozích dat, zatížení procesoru a nebo zatížení paměti RAM. + + + +\subsubsection{ImGui} + +Chtěl jsem mít i možnost se na metriky podívat přímo ve hře při běhu. Pro uživatelské rozhraní používám knihovnu ImGui a ImPlot. Tyto knihovny využívají pro vykreslování grafickou kartu a snadno jsem je mohl integrovat do svého vykreslovacího enginu. Knihovna funguje procedurálně, nikoliv objektově. Každý snímek, který vykresluju, musím celé rozhraní definovat. To udělám pomocí volání funkcí. Nejprve zavolám funkci `Begin("Název okna")`, které zobrazí okno, do kterého můžu vložit další prvky, jako texty, textové vstupy, nebo tlačítka. Tento přístup je pro herní enginy a podobné kreativní aplikace ideální, protože umožňuje velmi snadno a rychle dělat dynamické uživatelské rozhraní. + +\subsubsection{Tracy} + +Pro měření výkonu programu serveru používám výborný profiler Tracy. Je zdarma, open-source, napsaný v C++ a využívající ImGui. Poskytuje přesnost na nanosekundy, což se u serverů, na kterém může být miliony různých entity, hodí. Navíc umožňuje se k programu, který měří, připojit vzdáleně, případně sbírat metriky do souboru, ten si ze serveru stáhnout a analyzovat později. + +\subsubsection{Konkrétní metriky} + +Ukážu různé metriky, které lze měřit, jak a hlavně proč. Je dobré zmínit, že místo, ze kterého budu metriky sbírat, je server. To ale nevadí, protože jak uvidíte, vše potřebné na něm měřit jde, a to co ne, tak nás nemusí zajímat. + +\begin{description} + + \item[{Inbound/Outbound bandwidth}] \hfill \\ + Nejpřirozenější metrika je příchozí a odchozí množství dat v bytech. Už zde pro mě bylo nutné si uvědomit důležitost oddělit vrstvu, která kóduje a dekóduje zprávy, od zbytku. Přesně na tomto místě totiž budu metriky dělat. Metriku budu sčítat. + + \item[{Odezva}] \hfill \\ + Budu měřit odezvu mezi odesláním vstupu od klienta pro snímek x a odpovědí od serveru pro snímek x. Tuto metriku budu průměrovat. + + \item[{Počet snímků za vteřinu}] \hfill \\ + Ze začátku se mi stávalo, že uzké hrdlo nebyla síť, ale síťová vrstva v aplikaci, která třeba dlouho skládala zprávy. Proto si udržuju i přehled o počtu snímků, které server stíhá. Podle toho se lze orientovat při výběru hardware pro server. +\end{description} + +\subsubsection{Sbírání v reálném čase} + +Přímo v hráčově klientské aplikaci jsme chtěli mít možnost vidět metriky v reálném čase. Do síťové vrstvy jsme přidali komponentu pro reportování událostí a jejich metrik zvanou \kiinlinecode{C++}{!}{\\NetworkMetricReporter}, která obsahuje metody jako \kiinlinecode{C++}{!}{\\reportInbound} a \kiinlinecode{C++}{!}{\\reportOutbound}. První metoda hlásí příchozí byty a druhá odchozí. + + + + + + + + + + + + + +\newpage + +\section{Hra pro více hráčů} + +Pro zkoušku různých technik jsme se rozhodli vytvořit hru pro více hráčů. Nejprve představíme, jak vypadá architektura hry jednoho hráče. Podporu pro více hráčů jsme implementovali jako rozšiřující vrstvu, která příliš neovlivňuje klasickou architekturu her. Ve hře se jednotlivý hráči uvidí, budou se moct pohybovat a interagovat s vybranými objekty. + +Ukážu, jaké komponenty jsem přidal a proč, jak jsem je měřil a analyzoval a případné optimalizace, které jsem pro ně použil. Představím svůj protokol QUICr, který je inspirovaný QUIC, ale upouští od spolehlivosti, což je ideální pro hry. + +\subsection{Hry} + +Program hry většinou obsahuje smyčku, kde jedné iteraci říkáme snímek. Moderní hry iterují od 60 do až 240 snímků za sekundu, někdy více. V našem případě jsme se rozhodli pro jednoduchou 3D hru s vykreslováním 60 snímků za vteřinu. Zajímá nás aplikace různých technik. Hra si také udržuje svůj stav, jako entity ve světě, počasí, terén, herní pravidla apod. + +Každý snímek nejprve posbírá vstupy od hráče, převede je na jednotlivé akce, podle toho, co pro hru vstupy znamenají, a aplikuje je na stav hry. Například stisknutí tlačítka W převede na akci: pohyb dopředu. Takto postupně iterujeme z počátečního stavu hry. + +Architektura programů her je specifická tím, že tolik nevyužívá dědičnost a především virtuální funkce. V případě milionu entity, pro které voláme funkci 60 krát za sekundu, se i virtualizované volání negativně projeví ve výkonu. Např. chceme li mít obrovský svět s různými postavami, kde každá má různé schopnosti a vlastnosti, špatně by se nám modeloval strom dědičnosti. + +https://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/ + +Namísto toho se logika vlastností a schopností, které různé entity mohou mít, rozdělí do tzv. komponent. Např. komponenta pro obchodníka, stráž, kouzelníka, truhlu, dialog apod. Ve světě pak máme entity, kde každá má svůj individuální list komponent, které má. Tento styl je podobný kompozici objektů, ale s tím rozdílem, že komponenty skládáme do entity až za běhu programu. Nedefinujeme třídu pro každý typ entity, který může ve hře být. + +Samotná logika je pak v tzv. systémech. Každý iteruje přes konkrétní komponentu, která v sobě musí mít stav a zároveň derivaci, kterou systém aplikuje, resp. provede integraci. Tomuto návrhu se říká Entity, Component, System, neboli zkráceně ECS. + +\subsubsection{Entt} + +V našem případě využíváme knihovnu entt, která obsahuje různé nástroje pro ECS a vývoj tak zjednodušuje. Příkladem her, které ji využívají taky je třeba Minecraft pro Windows. Nejprve vytvoříme registr, což je objekt typu `entt::registry`, který spravuje své entity a jejich komponenty. Entita je v tomto případě pouze unikátně identifikační číslo, komponenta je libovolný typ a systém je lambda. Pro vytvoření systému musíme definovat pohled, tedy n-tici komponent. Tento pohled pak bude iterátor přes všechny entity, které mají každou z těchto komponent. Můžeme pak podle stavu jedné aktualizovat jinou a dělat různé interakce mezi nimi. + +\begin{kicode}{C++}{}{C++} + entt::registry registry; + + entt::entity entity = registry.create(); + + registry.emplace(entity, Transform::from_position(position)); + + registry.view() + .each([&](Transform& ts, CharacterBody& rb) { + auto character = rb.m_character; + + auto transform = character->GetWorldTransform(); + memcpy(&ts.transform, &transform, sizeof(glm::mat4)); + }); +\end{kicode} + +Představíme komponenty, které jsme pro hru definovali a proč: + +\begin{description} + + \item[{Transform}] \hfill \\ + Obsahuje transformační matici. Entity, které chceme zobrazit ve světě, tuto komponentu potřebují. Příkladem entity, která ji mít nebude, je zpráva v chatu. + + \item[{Mesh}] \hfill \\ + Obsahuje mesh, který má hra využít pro vykreslení entity. Mesh je n-tici bodů, které dohromady dávají 3D povrch objektu. Systém, který entity vykresluje si vytvoří pohled na Mesh a Transform, protože je potřeba vědět kam entitu vykreslit. + + \item[{Rigidbody}] \hfill \\ + Slouží pro fyzikální informace o entitě, jako hmotnost a sílu, kterou na entitu budeme aplikovat. Systém pro tuto komponentu bude fyzický engine. + +\end{description} + + + + + +\subsection{Svět} + +Stav hry reprezentujeme kompletně ve třídě Svět, neboli `World`. Ta bude obsahovat právě entt registr pro entity ve světě. Další komponenta, zvaná ovladač, pak bude sbírat vstupy a stav světa postupně aktualizovat. V případě hry pro jednoho hráče získá ovladač vstupy z klávesnice a myši a vhodně aktualizuju svět. Například při zmáčknutí klávesy W pro posun dopředu, nastavím rychlost RigidBody entity pro hráče tak, aby při zavolání integrace posunula Transform hráče. Oddělím tak logiku která drží stav a tu která stav mění. + +\subsubsection{Ovladač pro hru jednoho hráče} + +Definujeme, jak bude vypadat ovladač světa, tedy vrstva, která transformuje vstupy od hráče na akce ve hře, a podle nich postupně mění stav světa. Pro tento přístup jsme vytvořili `LocalWorldController`. + +\subsubsection{Ovladač pro hru více hráčů} + +V případě hry pro více hráčů jsme vytvořil \kiinlinecode{C++}{!}{\\ClientWorldController}. Ve jméně je zmíněný *Client*, protože pro peer-to-peer architekturu by ovladač vypadal jinak. Nejedná se tedy o univerzální řešení pro hru více hráčů. Další součástí systému je `WorldServer`. Ten má v případě klient-server architektury zodpovědnost přijímat vstupy od klientů a odesílat zpátky stav světa. Architektura je podobná té pro hru jednoho hráče, pouze se změnilo kdo integruje. + +% #image("ClientServerArchitecture.png") + +Protějškem je hra šachů, kterou ovládáme hlasem a někdo jiný za nás táhne. Zvoláme "pěšec XY na ZW", tahač táhne a my vidíme, jak se našim vstupem změnil stav hry. Stejně tak to vidí i druhý hráč. Všimněme si, že druhý hráč vůbec nemusí vědět, co byl náš vstup (ten může dostat derivací), ale stačí mu pouze stav. + +\subsection{Klient-Server architektura} + +Hry budeme programovat s architekturou klient-server. To znamená, že hráči budou mít klienta a někde v síti musí být dostupný server, na který se klienti budou připojovat. Server bude mít absolutní autoritu. Klienti budou na server posílat pouze vstupy, server se k nim bude chovat stejně, jako by se jednalo o hru jednoho hráče a on je přečetl z klávesnice a myši. Server bude na klienty posílat co nejčastěji stav světa. Tento stav se bude postupně měnit. Zodpovědnost programu klienta je tento stav správně zobrazit. Například vykreslit všechny entity na správných pozicích apod. + +Alternativou je peer-to-peer architektura, kdy každý uzel je zároveň server i klient, neboli peers. Na rozdíl od klient-server ale nemá nikdo autoritu. Uzly si mezi sebou posílají opět jen vstupy. Hra se simuluje na každém peerovi zvlášť. Zde nastává problém synchronizace, protože simulace se nám mohou snadno rozejít. Musíme tedy definovat, jak zjistit, že se desynchronizace stala a co s ní dělat. Musíme si dát pozor na pseudo-náhodné generátory, aby náhodné prvky hry se vyhodnotili všude stejně. Další problém může nastav v přesnosti čísel s plovoucí desetinou čárkou. Některé procesory mohou udělat operaci jinak a způsobit desynchronizaci. + +Detekovat desynchronizaci můžeme tak, že si jednou za čas peers pošlou snapshot svého stavu. + + + + + +\subsection{Server} + +Rozebereme si jak vypadá program pro server. Ukážeme komponenty, které jsme pro podporu více hráčů museli přidat. Architektura se skládá z replikátoru a manažera zájmu. Stav světa, který server odesílá na klienty, se skládá z entity a komponent, které chceme synchronizovat. Replikátor pro každého hráče zakóduje entity a jejich komponenty a udržuje je synchronizované. Pomocná komponenta je manažer zájmu. Ta říká, které entity se mají synchronizovat kterým. Základní implementace by pro hráče $A$ mohla omezit entity, které mu server bude synchronizovat, na ty v maximální vzdálenosti $d$ metrů. + + +\subsubsection{Registr spojení} + +Vytvořili jsme registr, ve kterém jsou všichni připojení hráči. Tato komponenta slouží jako sifon pro všechny zprávy, které klienti odesílají. Zároveň z ní lze zjistit kdo se právě připojil a kdo odpojil. Třída na to má dvě metody: \kiinlinecode{C++}{!}{\\popDisconnectedPlayers} a \kiinlinecode{C++}{!}{\\popConnectedPlayers}. Třída si udržuje seznam nových připojení od posledního zavolání \kiinlinecode{C++}{!}{\\popConnectedPlayers}. + +Také zde udržujeme počet selhání, které u klienta nastali a jakmile počet překročí určitou hranici, např. 5 chyb, relaci s klientem ukončíme. + +% Pro odstínění zbytku logiky od síťové vrstvy slouží registr spojení. O to se stará pouze třída `ClientSessionManager`. Ta hlídá, jestli se nesnaží připojit někdo další. Pokud ano, udělá s ním patřičný handshake, ve kterém si vymění důležité informace o spojení jako session ID a tajný klíč. Na rozhraní bude mít funkci `update`, která při zavolání zkontroluje nová připojení a stavy handshake. V případě, že se klient nebude dlouho ozývat, vyřadí ho z registru. Tuto skutečnost o vyřazení, a samozřejmě o připojení, by měla dát vědět. Vytvořil jsem dvě fronty, jednu pro nově připojené a jednu pro odpojené klienty. Ovladač pro svět si každý snímek tyto fronty vyprázdní. + +\subsubsection{Replikátor} + +Systém hry pro více hráčů se snaží mít na všech zařízeních stejný stav. V případě klient-server architektury odesílá server svůj stav klientům. O to se stará replikátor. Pro každého klienta si drží seznam entit, které mu musí synchronizovat. Jeho zodpovědnost je odesílat zprávy klientům tak, aby vždy měli aktuální stav. Základní implementace by posílala každý snímek kompletní stav entity se všemi komponentami. Lepší varianta je posílat pouze změny. Pokud se například pozice nezmění, není třeba posílat stejnou pozici jako minule. Na druhé straně u klienta máme replicator receiver. Ten se stará o dekódování zpráv a správné aktualizaci komponent entit. + +% Druhým důležitým systémem je replikátor. Ten pro každého klienta získá z Interest manageru seznam entit, které odebírá. Ty mu pak replikuje. Replikátor je už vrstva, která má zájem o to minimalizovat bandwidth. Všechny entity, které klient odebírá, mu musí udržovat synchronizované, ale může dělat například delta-compression. Tedy pokud se něco nezmění, tak to nebude synchronizovat. Je ale třeba, aby u každé komponenty věděl, jestli a jak ji má synchronizovat. + +\subsubsection{Interest manager} + +Zájem, neboli seznam entit, které se musí klientovi $A$ synchronizovat, vybírá komponenta manažer zájmů. + +Systém, který se bude starat o to, které entity se musejí klientům synchronizovat, se nazývá *Interest manager*. Nejprve klientovi, podle jeho ID, přiřadíme tzv. delegáta ve světě. Bude to entita s transformací. Pro každého delegáta bude v pravidelných intervalech kontrolovat a přiřazovat do zájmu ty entity, které jsou v dostatečné blízkosti. Nejprve jsem udělal základní ground-truth implementaci, která funguje na principu brute-force a nevyužívá akceleračních struktur. Jednoduše pro každou jinou entitu pomocí Pythagorovy věty zjistí, jestli je dostatečně blízko. + +Dotazu na všechny body, které jsou v určité vzdálenosti, se říká `range-query`. Datové struktury, které mi pomohli tento proces zrychlit jsou spatial grid, quad stromy a nebo kd-stromy. Techniky představím a porovnám: + + + +\subsection{Klient} + +V klientské aplikaci mám komponenty svět a ovladač. ClientWorldController, která obstarává vše kolem síťování. Třída World funguje stejně jako na serveru a stará se o klasický běh hry. + +\subsubsection{Replicator controller} + +Abychom oddělili to, jak replikátor funguje, vytvořili jsme pro něj na straně klienta ovladač. To nám později umožnilo měnit protokol mezi klientem a server podle potřeby. + +\subsubsection{Interpolace} + +Když jsme začali systém měřit, zjistili jsme, že áž příliš zatěžuje síť. Graf s průměry pro počet hráčů vidíme na grafu. Prvně jsme snížili počet snímků za sekundu, které server na klienty posílá, na 20 za sekundu. To snížilo zátěž na třetinu. Problém ale byl neplynulost hry. Klient sice vykresloval 60 krát za vteřinu, ale méně časté aktualizace způsobili neplynulý pohyb. Řešení je na klientovi interpolovat spojité proměnné, jako pozice nebo rotace. Do ovladače pro replikátor jsme přidali komponentu interpolátor. Do něj registrujeme jednotlivé komponenty, které chceme interpolovat. Interpolátor si je ukládá i s časovou známkou do bufferu. Na rozhraní jsem vytvořili funkci s argumentem čas a typ komponenty. + +Technika měla nepříjemný důsledek zvýšení odezvy. To vadí především pro entity, které hráč ovládá, jako např. hráčova postava. Problém je, že když na interpolátor přijde snapshot $n$, může teprve začít interpolovat z pozice $n-1$. Proto +% Když jsem ale architekturu vyměnil za hru pro více hráčů, narazil jsem na obrovské zatížení sítě, protože posílat 60x za vteřinu $n$ vstupů a pak $n$ set snapshotů zpátky má objem. Především řeším velikost snapshotů, protože vstupy hráče lze reprezentovat velmi úsporně, a to bitem pro každou akci, kterou mohl vyvolat. + +% Pro snížení náročnosti jsem umožnil nastavit počet snímků za vteřinu a nastavil 20. To pomohlo, ale za cenu velmi neplynulého hraní. Naštěstí pro plynulost hraní nám stačí pozice a rotace, a ty můžeme interpolovat. Přidal jsem tedy klientovi možnost si pozice uložit do bufferu a postupně, s fixním zpožděním, je interpolovat. + +\subsubsection{Rollback a simulace vlastního hráče} + +Interpolovat sice pomohlo pro plynulost, ale zvýšilo odezvu, což je nepříjemné. Způsob, jakým jsem se rozhodl tento problém řešit, je integrovat hráče pro daného klienta přímo na klientovi. Nejen že odezva bude v podstatě nulová, ale navíc bude ještě nižší než před interpolací. Musel jsem ale vytvořit mechanismus, který v případě, že se simulace neshodnou, tak na klientovi stav hráče opraví. + +Do bufferu jsem si ukládal pro konkrétní snímky vstup od hráče, který pošlu na server, a aktuální stav, ve kterém hráč je. Následně když ve snímku $x$ přijde snapshot pro snímek $x - t$, který má až moc velkou odchylku, tak vrátíme stav světa na $x - t$ a podle vstupů z bufferu znova integrujeme. Tím dostaneme novou a opravenou pozici. + + + +\subsection{Komunikační protokol} + +Představíme komunikační protokol, který replikátor využívá. + +% Pro použití UDP jsem musel přepracovat jak komponenta Messenger funguje. Shrnu co všechno bylo potřeba při návrhu vzít v potaz. Spolehlivost tak, aby nemusela být potřeba vždycky. TCP se čte jako proud bytů bez jasného rozdělení na jednotlivé packety, zatímco když na UDP socket zavolám `recv`, dostanu právě jeden datagram. Potřeboval jsem kódování zpráv, které bude pasovat na oba typy. + + + +% Rozdělil jsem program architektonicky do tří vrstev. První je síťová, která ze socketu čte data a dekóduje z nich rámce. Komponenta, která toto řeší, jsem pojmenoval `QuicrEndpoint`. Ten po vytvoření instance otevře socket. Obsahuje rozhraní pro `bind`, který socketu přiřadí konkrétní port. k + +% Problém je, kam umístit fronty. V případě serveru totiž chceme jednu velkou příchozí frontu rámců, ale frontu zvlášť pro každé připojení. Důvod univerzální fronty je, že můžeme mít více workerů, které zprávy budou obstarávat. Důvodem individuální fronty pro každé připojení je, aby se nestalo, že jeden hladový socket zablokuje všechny ostatní. Je proto třeba být v posílání packetů fér. + +\subsection{Protokol QUICr} + +Naše hra používala ke komunikaci mezi vrcholy protokol TCP. Zmínili jsme ale, že ten pro hry nemusí být vhodný. Vytvořil jsme proto protokol inspirovaný QUIC, který využívá UDP, ale upustil jsem podmínky pro spolehlivost, konkrétně jistotu doručení a uspořádání. V protokolu je možné na každém rámci definovat spolehlivost zvlášť. Ty, které budou obsahovat pozice hráčů, tak budu moct odesílat nespolehlivě, zatímco změny stavu, jako výměna animace nebo modelu, budu posílat spolehlivě. Pro vytvoření spojení budu používat dva objekty: koncový bod a spojení. + +Koncový bod se stará o socket, tedy čtení a zápis na něj, a udržuje si objekty spojení, které ho využívají. Když přijde na socket datagram, správně ho přiřadí spojení. Jeho chování je definované jako ťik. V něm posbírá zprávy, které se spojení snaží poslat a pošle je, následně přečte socket a roztřídí datagramy. + +\begin{center} + \begin{longtable}{>{\bfseries}l >{\ttfamily}c L{cm}} + \caption{Rozhraní třídy QuicrEndpoint}\label{tab:prepinace}\\ + {\normalfont Název metody} & {\normalfont Popis} \\ + \hline + bind(port) & Přiřadí socketu konkrétní port. \\ + + write(adress, payload) & Odešle `payload` přes socket na adresu `address`. Tato funkce bude volána objektem typu QuicrConnection, která tak bude odesílat celé datagramy. \\ + + poll & Přečte ze socketu všechny datagramy, které najde a podle hlavičky dekóduje ID spojení. Po zjištění ID zprávu přiřadí právě tomu spojení.. \\ + \end{longtable} +\end{center} + +Druhý objekt, spojení, je navenek stavový stroj a fronta zpráv, podobně jako TCP spojení. Stavový stroj mění stavy v reakci na příchozí rámce. Když na koncový bod přijde datagram, odešle ho do správného objektu připojení. Tento objekt si datagram přečte a postupně prochází rámce v něm. Stavový stroj bude důležitý hlavně v procesu zvaném "handshake", který definuju níže. + +Zároveň jsem se rozhodl, že na spojení nebude zdánlivě nekonečný proud bytů, jako je tomu například v TCP, ale fronta zpráv. Výhoda je, že když začnu číst datagram, tak mám jistotu, že nenarazím na konec bufferu a budu si muset načíst další část. V mém případě jedno čtení znamená čitelná zpráva, tak jak jsme byla odeslána. + +\subsubsection{Frame} + +Inspiroval jsem se u protokolu QUIC, který datagram rozděluje na tzv. framy neboli \uv{rámce}. Tyto rámce můžu kódovat jak v TCP, tak v UDP. V případě UDP jsem se rozhodl u každého rámce definovat jeho spolehlivost, tedy jestli musí frame dojít vždy. Připojení pak bude mít jednotku pro spolehlivost, která bude spolehlivost zaručovat. + +U UDP je další problém, a to ten, že když implementuju připojení pro UDP, tak všechny datagramy budou chodit na socket, na kterém poslouchám. Když budu ze socketu číst, dostanu libovolný datagram, který zrovna přišel, společně s adresou, ze které přišel. Tuto adresu přečtu z IP hlavičky, která není zašifrovaná, a tudíž ji kdokoliv může zfalšovat. Tomu se říká tzv. IP spoofing. Tento útok je poměrně slabý, protože v případě odpovědi budu stále odesílat data zpět na správnou adresu. Útok může sloužit například pro poslání požadavku na odpojení, nebo posílat jiné vstupy. Jedná se tedy spíše o neškodný ale otravný charakter útoku. + +\subsubsection{Handshake} + +Po vytvoření instance připojení z koncového bodu je připojení ve stavu `Closed`, neboli uzavřené. Pro navázání spojení jsem potřeboval, aby se dva objekty domluvili, například na svých ID, tajném klíči a verzi. Proto jsem definoval **handshake**. Mějme dva koncové body $A$ a $B$, které se mezi sebou budou snažit navázat spojení. Začne koncový bod $A$, a to tím, že odešle na koncový bod $B$ paket typu Initial, který obsahuje rámec typu `Hello`. Jakmile na koncový bod dorazí QUICr paket, který má v hlavičce jako Destination ID číslo, které nemá v registru, tak si ho přidá a přiřadí novou instanci připojení. Nová instance se chová stejně jako na straně $A$ a vygeneruje si unikátní identifikátor. Po vytvoření instance nechá koncový bod toto připojení tento paket zpracovat celý. + +Nové připojení projde všechny rámce v paketu. Měl by narazit na rámec Hello, který když najde, a je ve stavu `Initial`, tak z hlavičky zjistí unikátní ID druhé strany a uloží si ho. Reaguje na rámec tak, že druhé straně odešle přes koncový bod paket, který obsahuje: rámec ACK o tom, že paket s číslem přijal, a rámec Hello. ACK si pro začátek představme zakódovaný jako: první 4 byty reprezentují kladné celé číslo pro počet rámců, řekněme $n$, které chceme označit jako přijaté. Následně přečteme $4n$ bytů. Každé 4 byty představují číslo paketu, který označíme jako ACKed. Jednotce, která udržuje stav o tom, jaké pakety jsou potřeba oznámit jako ACK a které je třeba poslat znovu, budu říkat `RealiabilityUnit` a podrobněji ji rozeberu později. + +Přeskočme zpět na klienta, který dostává paket typu Initial, ve kterém je rámec Hello a ACK. Pro rámec Hello se chová stejně jako druhá strana, a pokud je ve stavu `SendHello`, nastaví si Destination ID. Všechna čísla paketů z ACK rámce předá do jednotky pro spolehlivost. Jelikož víme, že tam je číslo paketu, který obsahuje právě prvotní Hello, tak si jednotka tento rámec odebere z fronty pro opakované odeslání. + +\begin{description} + + \item[{Closed}] \hfill \\ + Počátečním stavem je `Closed`. Zároveň se jedná o stav, do kterého se spojení dostane, pokud dlouho s druhou stranou nekomunikuje. + + \item[{SentHello}] \hfill \\ + Po odeslání Hello packetu se spojení dostane do stavu `SentHello`. V tomto stavu čeká na `HelloAck` zprávu. + + \item[{ReceivedHello}] \hfill \\ + Jakmile server dostane zprávu Hello, dostane se do stavu `ReceivedHello`. + + \item[{Established}] \hfill \\ + Po odeslání HandshakeDone zprávy se klient dostane do stavy Established. Jakmile server přijme zprávu HandshakeDone, taky se dostává do stavu Established. + +\end{description} + + +Klient následně odpovídá Handshake done, protože už má všechny informace, které potřebuje o spojení. Upustil jsem od packetů a nechal pouze rámce. + +\subsubsection{Spolehlivost} + +Pro spolehlivost se protokol stará podobně jako QUIC, s tím rozdílem, že ji rozlišuje nad jednotlivými rámci. Všimněme si, že něco podobného má i samotný QUIC. Pokud odešleme paket, ve kterém je pouze ACK rámec, tak nedostaneme nikdy zpátky ACK. Rámec ACK se tedy chová stejně, jako by byl nespolehlivý. Rámce tak můžeme dělit na dvě kategorie: spolehlivé a nespolehlivé. Nespolehlivé rámce spojení odešle a hned je zapomene, tzv. fire and forget. O spolehlivé rámce se stará třída zvaná `QuicrReliabilityUnit`. Každá instance připojení na koncovém bodě má svou instanci, kterou ke spolehlivosti využívá. Její rozhraní tvoří 4 hlavními metodami: + +\begin{description} + + \item[\texttt{push\_reliable\_frame(deadline, frame)}] \hfill \\ + Uloží si zakódovaný rámec a nastaví si u něj čas deadline. Jakmile bude po deadline, jednotka se bude snažit odeslat rámec znovu. + + \item[\texttt{peek/pop\_reliable\_frames\_to\_send(packet\_number)}] \hfill \\ + Vrátí rámce, které je potřeba v tomto okamžiku odeslat. Číslo paketu je důležité proto, aby jednotka věděla, které všechny rámce může ACK pro určitý paket označit jako hotové. + + \item[\texttt{push\_ack(packet\_number)}] \hfill \\ + Uloží si do seznamu číslo paketu a v další iteraci ho odešle jako ACK. + + \item[\texttt{peek/pop\_acks\_to\_send()}] \hfill \\ + Vrátí seznam paketů, které je třeba odeslat jako ACK. Zároveň si je ze seznamu odebere. + +\end{description} + +Jednotka pro spolehlivost si každý vložený rámec uloží, společně s časem, do kdy je potřeba ho odeslat znova, tzv. `deadline`. Tento přístup mimo jiné umožňuje vložit spolehlivý rámec rovnou do jednotky s deadline aktuálního času. Rámec se odešle co nejdříve a zajistí se jeho spolehlivost. + +Dále si jednotka ukládá čísla paketů, které jsou v oběhu. Každý takový paket v oběhu ukazuje na seznam odkazů na spolehlivé rámce, které obsahuje. Když přijde číslo paketu jako ACKed, jednotka odstraní všechny rámce, na které paket ukazuje, a nakonec zapomene celý paket. Mohlo by se stát, že pro jisté pakety se nedoručí ACK nikdy, ale tyto pakety můžeme jednoduše vyčistit kontrolou, jestli obsahují alespoň jeden rámec, který nebyl takto označen. + +Do jednotky si ukládám už zakódované rámce, protože tak můžu snadno odhadnout jejich velikost. Když bude + +Možná jste si všimli, že nezaručujeme spolehlivost pořadí. Tuto záruku jsme do protokolu zatím nepřidávali, protože si stejně do paketu ukládáme číslo snímku, které je potřebné pro správnou aktualizaci světa. Toto číslo bychom z čísla paketu nebyly schopni vyčíst. Zároveň nás v našem případě nezajímá, ve kterém pořadí pakety pro jeden snímek přijdou. Kdybychom měli úplné uspořádání, a odeslali bychom z replikátoru datagramy $A$ a $B$, které by přišli na klienta v pořadí $B$, $A$, musel by klient čekat na datagram $A$, i když by mohl zpracovávat datagram $B$. + +\subsubsection{Enkodér} + +Pro kódování jsme vytvořili komponentu \kiinlinecode{C++}{!}{\\QuicrEncoder}, která přes konstruktor získá cílový buffer, do kterého má kódovat a na rozhraní má různé pomocné metody pro kódování hlaviček a rámců. Specifická vlastnost, kterou jsme potřebovali, je kódovat, dokud je v bufferu místo. Pokud zbývá $r$ bytů místa a replikátor by chtěl zakódovat rámec, který má $> r$ bytů, musí metoda vrátit informaci o neúspěchu, ale nevyhazovat vyjímku, ani neposunovat kurzor. Důvodem je, že UDP je nad protokolem IP, který může začít fragmentovat datagramy. Proto se většina protokolů snaží držet velikost datagramů kolem 1200 bytů. Podobný přístup jsme adaptovali my. +Dále musel umožňovat zakódovat hodnotu zpětně, jako například délku, kterou kvůli omezení bufferu víme až později. + + +\subsubsection{Testování} + +Při implementaci jsme zjistili, že je dobré začít testy, které definují jednotlivé vlastnosti, jako například: "Spojení začne komunikaci rámcem Hello", "Po rámci Hello odpoví spojení rámcem Hello a ACK", "Na pakety obsahující spolehlivé rámce odpoví spojení ACK rámcem" apod. V testu jsem pak tyto vlastnosti ověřil. Tomuto přístupu se říká test driven development. +% Pro vývoj protokolu jsem si nejprve zkoušel zapsat specifikaci, následně udělat vývoj a nakonec otestovat. Tento přístup ale způsoboval časté chyby v návrhu protokolu. Daleko více se mi osvědčil tzv. Test Driven Development, kdy začneme tvorbou testů, které slouží v podstatě jako specifikace chování. Příkladem jsou testy: "Client begins with Hello datagram", "Connection reacts to Hello with ACK \& Hello" nebo "Both connections have correct IDs after Initial exchange". Tímto způsobem jsem definoval jak chci, aby se protokol a komponenty v něm chovali. + +% Popsal jsem problémy, které jsem potřeboval vyřešit. Představím protokol, který je pro mě řeší. Vytvořil jsem třídu `QuicrConnection`, která bude reprezentovat stavový stroj připojení a zároveň umožní číst a zapisovat. Rozhodl jsem se, že zapisovat bude zprávy, nikoliv pouze proud bytů. Proto jsem použil tzv. message frame. Pokud něco popnu z QuicrConnection, je to vždy celá zpráva, která přišla. Stejný princip používá i ZeroMQ. Vytvořil jsem dvě třídy: QuicrConnection a QuicrConnectionListener. QuicrConnection obsahuje stavový stroj připojení a rozhraní pro příjímání a odesílání zpráv. QuicrConnectionListener obsahuje rozhraní pro poslouchání nově příchozích spojení. Nasluchač bude spravovat UDP socket. Když přijde nový datagram z adresy, kterou ještě nezná, a přišla zpráva Hello, tak si do seznamu přidá připojení ve stavu HelloReceived. Při datagramu z adresy, kterou zná, pošle tento datagram přímo do spojení na spracování. Každé spojení si bude udržovat svoji frontu příchozích zpráv. + +Protokol měl za cíl snížit odezvu na nespolehlivé síti. Proto jsme vytvořili test, ve kterém máme klienta, který na server posílá datagram a měří, za jak dlouho dostane odpověď pro konkrétní snímek. Tato metrika se někdy nazývá RTT, neboli round-trip-time. Jak vidíme na obrázku, náš protokol je v případě ztráty paketů stabilnější. + +Pro nasimulování nespolehlivosti sítě jsme využili Linuxový nástroj \uv{tc}. Ten obsahuje network emulator, který umožňuje například nastavit, kolik procent paketů má zahodit, jaká má být odezva nebo jak moc se budou prohazovat pakety. Nástroj a jeho vlastnosti, které budeme využívat, si představíme. + +\begin{figure} + \begin{center} + \includegraphics[width=0.8\textwidth]{graphics/latencycomparison.pdf} + \end{center} +\end{figure} + +\begin{figure} + \begin{center} + \includegraphics[width=1\textwidth]{graphics/integrationcomparison.pdf} + \end{center} + \label{integrationcomparison} + \caption{Integrace} +\end{figure} + +Následně jsme zkusili, jak se nespolehlivost sítě projeví pro integraci proměnné. Přidali na server hodnotu, kterou pomocí hodnot od klienta inkrementujeme. Pro derivaci jsme použili sinusoidu, abychom ji mohli zreplikovat snadno v TCP i QUICr. Na obrázku \ref{integrationcomparison} vidíme, že TCP při ztrátě paketů způsobuje skoky, které nemusí být pro hráče příjemné. Naopak náš protokol má daleko méně znatelné skoky. + +Nakonec jsme integrovali protokol přímo do replikátoru. Na obrázku \ref{playerbenchmark} vidíme 301 hráčů, kde 300 je simulovaných, avšak individuálních připojení a jeden je náš hráč. Server se občas zasekl, ale zátěž zvládl. + +\begin{figure} + \begin{center} + \includegraphics[width=0.5\textwidth]{graphics/playerbenchmark.png} + \end{center} + \label{playerbenchmark} + \caption{301 připojených hráčů} +\end{figure} + +\subsubsection{Odesílání} + +Nejprve představím, jak jsem navrhnul odesílání zpráv. Na obrázku vidíme, celou architekturu. Vidíme dvě velké komponenty, a to Network Sender a Player Session Registry. První komponenta je celá logika, která práci posílání zpráv organizuje. Vytahuje z fronty zprávy, které pomocí Message Serializeru převede na rámce. Reliability System je jednotka, která určuje, které rámce budou v dalším datagramu. Důvod je ten, aby se kontrolovali rámce, pro které nemáme ACK a prioritizovalo se jejich odeslání. Výstupem Reliability System je tedy přímo sestavený datagram. To kdo a jak sestavuje datagram z rámců je detail. + + +\begin{figure} + \begin{center} + \includegraphics[width=1\textwidth]{graphics/OutboundArchitecture} + \end{center} +\end{figure} + +\subsubsection{Čtení} + +Představím architekturu přijímání zpráv. Opět vidíme registr spojení. Když nám ze sítě přijde nový datagram, přepošleme ho do reliability systému. Ten z něj vytvoří rámce a pošle do Frame Routeru. Zodpovědnost Frame Routeru je třídit rámce podle toho, jestli se má serializovat na zprávu, nebo jestli je to tzv. ovládací rámec. Příklad ovládacích rámců je třeba HELLO, HELLO\_ACK, nebo CRYPTO. Handshake handler si poté drží stav handshaků a v případě, že některý dokončil, registruje v Player Session Registry novou session. + +% #image("InboundArchitecture.png") + +\subsubsection{Šifrování} + +Jednotlivé datagramy a zprávy je třeba šifrovat a pro to je třeba, aby si dvě strany vyměnili tajný klíč. Představím metodu, kterou pro výměnu budu využívat. + +\subsubsection{SPR-6} + +Metodu, kterou jsem viděl například u síťového protokolu pro hru World Of Warcraft je SRP-6. Jedná se o protokol, který nevyžaduje, aby server znal heslo klienta, ale měl u sebe pouze validátor, a klient mu díky němu dokáže, že heslo zná. Pro tento přístup je třeba udělat handshake. + + +\subsubsection{Lockstep} + +Aby tato technika fungovala správně, musí být intergrace ve fyzickém enginu stejné na klientovi a serveru. + +\subsubsection{Congestion control} + +\subsubsection{Bandwidth control} + +Entity, které jsou od hráče daleko, není třeba aktualizovat tak často jako ty, které jsou k němu blízko. Proto jsem do zájmu ke každé entitě přidal důležitost. Replikátor se při odesílání snaží nejprve nacpat do packetu entity s vyšší prioritou. Aby nedošlo k vyhladovění, tak odeslané entitě trochu klesne důležitost. Tuto informaci už si řeší replikátor. + +\subsection{Sharding} + +Proces, při kterém hráče rozdělíme do skupin, které se navzájem nevidí, i když jsou na stejném serveru blízko sebe, se říká sharding. Podobný princip funguje i v databázích. Tato technika složitá udělat správně. Vývojář musí dobře definovat logiku toho, že dva hráči mohou skončit na jiném shardu. + +\subsection{Komprese} + +Poslední optimalizací, kterou jsem pro přenos informací použili, byla komprese. Nejprve jsme nahradili byte buffer, který pracuje pouze s byty, bit bufferem, který nám umožnil pracovat s jednotlivými bity. + +\subsubsection{Bit Buffer} + +Snadným zmenšením packetů je zaměřit se na bity namísto bytů. Původně jsem nově příchozí datagramy obalil pomocí ByteBuffer, který umožnil dekódovat postupně příchozí byty. Často ale potřebujeme mít možnost zakódovat informaci pomocí jednotlivých bitů. + +\subsubsection{Komprese QUICr} + +Protokol QUICr kóduje pakety a rámce. Toto kódování jsme se rozhodli zkompresovat. + +\subsubsection{Komprese protokolu replikátoru} + +Komprese, která lze provést na úrovni QUICr protokolu, je značně omezená. Komprese lze ale provést i na samotných aplikačních zprávách. Pro + + + + +% \noindent\textcolor{red}{\LARGE Upozornění: Následující text +% dokumentace stylu, vyjma přílohy~\ref{sec:ObsahData}, je rozpracovaná +% a (značně) neúplná verze!!!} + +\section{Styly pro psaní bakalářských a diplomových prací} +Toto jsou styly pro psaní bakalářských a diplomových prací přes typografický systém \LaTeX{}, tedy \textbf{kistyles}. + +\subsection{Požadavky a podprovaná prostředí} +Sada balíku \textbf{kistyles} podporuje následující distribuce systému \LaTeX{}: +\begin{itemize} +\item \TeX{} Live. +\end{itemize} + +Jsou podporovány všechny výstupní ovladače, tedy jak \textbf{dvi}, tak \textbf{pdf} i \textbf{ps}. Funkčnost zmiňovaných distribucí byla ověřena na několika operačních systémech, mezi které patří: +\begin{enumerate} +\item Windows $8.1$, +\item Archlinux, +\item Debian GNU/Linux. +\end{enumerate} + +Důrazně se doporučuje používat aktuální verzi dané distribuce systému \LaTeX{}. + +%%% Po přeložení programem CSLaTeX (třikrát) je potřeba použít +%%% program DVIPS a takto získaný PostScriptový soubor vytisknout +%%% na PostScriptové tiskárně nebo pomocí programu GhostScript. +%%% +%%% Rovněž je možné použít program DVIPDFM a vytvořit z dokumentu +%%% soubor ve formátu PDF včetně hypertextových odkazů. + +\subsection{Přepínače} +Styl kidiplom je z hlediska uživatele zastoupen ekvivalentně nazvanou třídou, kterou je třeba volat na záčátku dokumentu: +\begin{kicode}{TeX}{}{Volání třídy \textbf{kidiplom}} +\documentclass[ + master, + program=ainfvs, + printversion, + biblatex, + language=english, + font=sans, + figures=false, + tables=false, + theorems, + sourcecodes, + joinlists, + glossaries, + index, + encoding=utf8, + bibencoding=utf8 +]{kidiplom} +\end{kicode} + +Následuje přehled přepínačů, je vždy uvedeno jméno přepínač, včetně výchozí hodnoty. Přepínače uvádí tabulka \ref{tab:prepinace}. + +%\begin{table} +\begin{center} +\begin{longtable}{>{\bfseries}l >{\ttfamily}c L{8cm}} +\caption{Seznam přepínačů}\label{tab:prepinace}\\ + {\normalfont Přepínač} & {\normalfont Výchozí hodnota} & {\normalfont Popis} \\ +\hline +master & false & Povolí nebo zakáže režim diplomové práce. Výchozí režim je tedy bakalářská práce. \\ + +printversion & false & Je-li zapnuto, pak budou odkazy vysázeny optimalizovaně pro knižní sazbu. Tuto volbu je nutno použít pro tisk práce. \\ + +biblatex & false & Zapne sazbu bibliografie přes balík \BibLaTeX{}. \\ + +language & czech & Jazyk textu práce. Možné hodnoty jsou \textbf{czech}, +\textbf{english} a \textbf{slovak}. \\ + +font & serif & Zapne či vypne podporu pěkného bezpatkového fontu. Možné hodnoty jsou:\newline +\begin{description}\setlength{\itemsep}{-1ex} +\item[serif] Patkové písmo (Computer Modern). +\item[sans] Bezpatkové písmo (Iwona). +\end{description} \\[-3ex] + +figures & true & Je-li zapnuto, pak v seznamech položek bude zahrnut seznam obrázků. \\ + +tables & true & Je-li zapnuto, pak v seznamech položek bude zahrnut seznam tabulek. \\ + +theorems & false & Je-li zapnuto, pak v seznamech bude zahrnut seznam teorémů. \\ + +sourcecodes & false & Je-li zapnuto, pak v seznamech bude zahrnut seznam zdrojových kódů. \\ + +%%% Argument `joinlists' způsobí zřetězení seznamů obrázků, tabulek, +%%% vět a zdrojových kódů. Není-li použít, všechny seznamy jsou +%%% uvedeny na samostatných stránkách. + +joinlists & true & Je-li zapnuto, pak seznamy obrázků, tabulek, vět a +zdrojových kódů sázené za obsahem nebudou rozděleny na samostatné stránky. \\ + +glossaries & false & Je-li zapnuto, pak na konci dokumentu bude vysázen seznam zkratek. \\ + +index & false & Zapíná podporu sazby rejstříku. \\ + +%% 'encoding=kódování' pro kódování tohoto a vložených zdrojových +%% textů v kódování jiném než výchozím utf8 +encoding & utf8 & Kódování souboru dokumentu, doporučuje se ponechat výchozí hodnotu. \\ + +bibencoding & utf8 & Kódování souboru bibliografie. Tato volba má +smysl pouze, pokud je použita bibliografie skrze balíček \BibLaTeX{}. \\ + +program & \vtop{\hbox{\strut infpvs}\hbox{\strut ainfvs}} & Specifikuje studijní program/obor (specializaci):\newline +\begin{description} +\item[infoi] Informatika (Obecná informatika)\,--\,bakalářský i navazující magisterský, +\item[infpvs] Informatika (Programování a vývoj software)\,--\,bakalářský, +\item[itp] Informační technologie\,--\,bakalářský, prezenční forma, +\item[itk] Informační technologie\,--\,bakalářský, kombinovaná forma, +\item[infui] Informatika (Umělá inteligence)\,--\,navazující magisterský, +\item[ainfvs] Aplikovaná informatika (Vývoj software)\,--\,navazující magisterský, +\item[ainfpst] Aplikovaná informatika (Počítačové systémy a technologie)\,--\,navazující magisterský, +\item[infv] Informatika pro vzdělávání\,--\,bakalářský, +\item[uinf] Učitelství informatiky pro střední školy\,--\,navazující magisterský, +\item[binf] Bioinformatika\,--\,bakalářský i navazující magisterský, +\item[inf] Informatika (bez specializací)\,--\,bakalářský i navazující magisterský, +\item[ainfp] Aplikovaná informatika (bez specializací)\,--\,bakalářský, prezenční forma, +\item[ainfk] Aplikovaná informatika (bez specializací)\,--\,bakalářský, kombinovaná forma, +\item[ainf] Aplikovaná informatika (bez specializací)\,--\,navazující magisterský. +\end{description} +\end{longtable} +\end{center} +%\end{table} + +\subsection{Geometrie stránky} +Tento styl používá list velikosti $A4$. Pro sazbu prací je třeba použít jednostrannou sazbu. Levý okraj je rozšířen s ohledem na vazbu výsledné knižní podoby práce. + +\section{Sazba částí dokumentu} +\subsection{Sazba úvodní strany či obsahu} +Vysázení všech podstatných částí úvodu práce obstará makro \kiinlinecode{TeX}{!}{\\maketitle}. Pro správné vysázení všech částí a meta-informací je potřeba použí makra \kiinlinecode{TeX}{!}{\\title}, \mbox{\kiinlinecode{TeX}{!}{\\author}} a další. Jejich přehled lze najít ve zdrojovém souboru tohoto dokumentu. V případě použítí \textbf{pdf} výstupu se generuje i dodatečná hlavička souboru s meta-informacemi jako je autor dokumentu, název práce či dalšími. + +\subsection{Závěry} +Závěr práce by se měl poskytnout jak v původním jazyce práce, tak v jazyce anglickém. Pro sazbu závěru jsou k dispozici příslušná makra. Berte na vědomí, že v anglickém závěru se aktivuje plně anglická sazba se všemi konvencemi. Tedy je třeba používat anglické uvozovky a další správné typografické prvky. + +\begin{kicode}{TeX}{}{Sazba závěrů} +% Tiskne český závěr práce. +\begin{kiconclusions} +Závěr práce v \uv{českém} jazyce. +\end{kiconclusions} + +% Tiskne anglický závěr práce. +\begin{kiconclusions}[english] +Thesis conclusions written in \uv{English}. +\end{kiconclusions} +\end{kicode} + +\subsection{Matematika} +Pro sazbu matematiky je k dispozici sada standardních maker. +$$\langle f \rangle, \lfloor g \rfloor, +\lceil h \rceil, \ulcorner i \urcorner$$ + +$$\left\{\frac{x^2}{y^3}\right\}$$ + +$$ +A_{m,n} = + \begin{pmatrix} + a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ + a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ + \vdots & \vdots & \ddots & \vdots \\ + a_{m,1} & a_{m,2} & \cdots & a_{m,n} + \end{pmatrix} +$$ + +$$ +M = \begin{bmatrix} + \frac{5}{6} & \frac{1}{6} & 0 \\[0.3em] + \frac{5}{6} & 0 & \frac{1}{6} \\[0.3em] + 0 & \frac{5}{6} & \frac{1}{6} + \end{bmatrix} +$$ + +\subsection{Sazba literatury} +Pro sazbu literatury má uživatel dvě možnosti. Může použít služeb balíků \BibLaTeX{}, který je pro \textbf{kistyles} zapnutý, či lze použít manuální sazbu bibliografie. +\subsubsection{Sazba bibliografie přes \BibLaTeX{}} +Při použití tohoto balíku se data o použité literatuře ukládají do dedikovaného textového souboru, ukázku najdete i v tomto stylu pod jménem \kiinlinecode{text}{!}{bibliografie.bib}. + +Formát daného souboru je nad rámec této dokumentace a je na každém uživateli, aby si jej nastudoval. Bibliografie se tiskne makrem \kiinlinecode{TeX}{!}{\\printbibliography}. Taktéž v preambuli dokumentu je třeba definovat, který soubor data bibliografie obsahuje, tedy například \kiinlinecode{TeX}{!}{\\bibliography\{bibliografie.bib\}}. + +Dokument, který využívá \BibLaTeX{} je následně nutné přeložit jak pomocí překladače zvoleného ovladače, tak pomocí aplikace \kiinlinecode{text}{!}{biber}. Více informací poskytne soubor \kiinlinecode{text}{!}{Makefile} z distribuce tohoto stylu. + +Výhodou tohoto přístupu je, že bibliografie se vysází automaticky a (obvykle) není třeba manuální úprava formátování. + +\subsubsection{Manuální sazba bibliografie} +Manuální sazba obnáší vysázení prostředí \kiinlinecode{text}{!}{thebibliography} ručně. To je nad rámec tohoto dokumentu. Ukázku tohoto přístupu lze samozřejmě nalézt ve zdrojovém souboru tohoto dokumentu nebo také \href{http://www.math.uiuc.edu/~hildebr/tex/bibliographies.html}{zde}. + +Pro aktivaci manuální sazby bibliografie je třeba volat třídu \kiinlinecode{text}{!}{kidiplom} s parametrem \kiinlinecode{text}{!}{biblatex=false}. Mějte, prosím, na paměti, že v tomto módu jsou makra \kiinlinecode{text}{!}{\\bibliography} a \kiinlinecode{text}{!}{\\printbibliography} nedostupná. + +\subsection{Drobná makra} +Základní styl definuje hned několik maker pro usnadnění práce. Například makro \kiinlinecode{TeX}{!}{\\buno} vysází řetezec \uv{bez újmy na obecnosti}. Je k dispozici i verze s prvním velkým písmenem, \kiinlinecode{TeX}{!}{\\Buno}. + +Je rovněž možno přidávat položky do seznamu zkratek. K tomu slouží makro \mbox{\kiinlinecode{TeX}{!}{\\newacronym}}, které lze použít například jednoduše jako \kiinlinecode{TeX}{!}{\\newacronym\{UPOL\}\{UPOL\}\{\\kitextunivcz\}}. Na danou zkratku se pak lze odkazovat jednoduše, \mbox{\kiinlinecode{TeX}{!}{\\gls\{UPOL\}}}. + +Sazba uvozovek respektuje nastavení částí dokumentu, a proto se doporučuje používat makro \kiinlinecode{TeX}{!}{\\uv}. V anglické závěru práce toto platí taky, viz tato PDF ukázka. + +Styl podporuje sazbu odstavců v tabulkách, více obsahuje tabulka \ref{tab:odstavce}. + +\begin{table} +\begin{center} +\caption{Odstavce v tabulkách}\label{tab:odstavce} +\begin{tabular}{L{4cm}|R{4cm}|L{4cm}} +\lipsum[23] & \lipsum[22] & \lipsum[21] +\end{tabular} +\end{center} +\end{table} + +K dispozici jsou také makra pro sazbu \csharp{} (\kiinlinecode{TeX}{!}{\\csharp}) či \cpp{} (\kiinlinecode{TeX}{!}{\\cpp}). + +%% v případě tvorby rejstříku přeložit vygenerovaný soubor .idx +%% programem Makeindex a v případě tvorby seznamu zkratek spustit +%% program Makeglossaries s parametrem jméno souboru zdrojového textu +%% bez přípony a následně opět (dvakrát) přeložit zdrojový text +%% programem pdfLaTeX. + +\subsection{Sazba rejstříku} +Sazba rejstříku sestává z několika kroků: + +\begin{enumerate} +\item Je třeba přes volbu \kiinlinecode{TeX}{!}{index=true} rejstříkování povolit. +\item Použítím makra \kiinlinecode{TeX}{!}{\\index} rejstříkovat vybrané pojmy. +\item Kompilovat s použitím utility \kiinlinecode{TeX}{!}{makeindex}. Pro specifika tohoto kroku si stačí prohlédnout soubor \kiinlinecode{text}{!}{Makefile}. +\end{enumerate} + +Makro \kiinlinecode{TeX}{!}{\\index} je redefinováno tak, že sází klikací odkaz na výraz v rejstříku. Je doporučeno jej použít ihned za výrazem\index{výraz}. + +\textbf{Omezení redefinovaného makra \kiinlinecode{TeX}{!}{\\index}}: klikací odkaz nefunguje, pokud použijete konstrukci \kiinlinecode{TeX}{!}{\\index\{výraz|makro\}} (resp. \kiinlinecode{TeX}{!}{\\index\{výraz|(makro\}}), např. \kiinlinecode{TeX}{!}{\\index\{výraz|textit\}}. + +Rejstřík lze vysázet pomocí makra \kiinlinecode{TeX}{!}{\\printindex}. + +\subsection{Sazba zdrojových kódů} +Styl nabízí dva způsoby sazby zdrojových kódů: + +\begin{enumerate} +\item Sazbu řádkových kódů, například \kiinlinecode{CSS}{!}{background-color: white;}. K tomu slouží makro formátu \kiinlinecode{TeX}{!}{\\kiinlinecode\{jazyk\}\{separátor\}\{kód\}}. Za separátor je vhodné volit jakýkoliv znak, který se nevyskytuje v samotném sázeném zdrojovém kódu. Za jazyk je nutno dosadit jeden z těchto: C, TeX, PHP, HTML, Lisp, SQL, TeX, Python, Java, TutorialD, text, csharp, cpp, JavaScript, CSS. + +\item Sazbu zdrojových kódu do separátních prostředí. Takto vytištěný kód se objeví v seznamu zdrojových kódů. Ukázka například zdrojový kód \ref{kod:cpp}. Ukázku sazby naleznete ve zdrojovém kódu tohoto dokumentu. +\end{enumerate} + +\newacronym{UPOL}{UPOL}{\kitextunivcz} + +\begin{definition}[Název definice] +Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. \gls{UPOL} +\end{definition} + +\begin{proof}[Název důkazu] +Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. +\end{proof} + +\begin{remark}[Pumpovací věta] +Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. +\end{remark} + +\begin{example}[Pumpovací věta] +Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. +\end{example} + +\begin{lemma}[Název definice] +Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. +\end{lemma} + +\begin{consequence}[Název důkazu] +Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. +\end{consequence} + +\begin{theorem}[Pumpovací věta] +Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. Abcd. +\end{theorem} + + +\begin{kicode}{cpp}{kod:cpp}{\cpp} +int main("cs acsa") // komentar +int main("cs acsa") // komentar +int main("cs acsa") // komentar +int main("cs acsa") // komentar +int main("cs acsa") // komentar +\end{kicode} + +\begin{kicode}{JavaScript}{}{JS} +new object() // komentar +\end{kicode} + +\begin{kicode}{csharp}{}{\csharp} +public static int main("cs acsa") // komentar +\end{kicode} + +\begin{kicode}{SQL}{}{SQL} +SELECT * FROM table_1; /* komentar */ +\end{kicode} + +\begin{kicode}{TutorialD}{}{TutorialD} +table_1 AND table_2; +\end{kicode} + +%% Závěry práce. V jazyce práce a anglicky. Text pro jiný než +%% nastavený jazyk práce (nepovinným parametrem language makra +%% \documentclass, výchozí český) se zadává použitím makra s uvedením +%% jazyka jako nepovinného parametru. +\begin{kiconclusions} +Závěr práce v \uv{českém} jazyce. +\end{kiconclusions} + +\begin{kiconclusions}[english] +Thesis conclusions in \uv{English}. +\end{kiconclusions} + +%% Přílohy obsahu textu práce, za makrem \appendix. +\appendix + +\section{První příloha} +Text první přílohy + +\section{Druhá příloha} +Text druhé přílohy + +%% Obsah elektronických dat. Poslední příloha. Upravte podle vlastní +%% práce! +\section{Obsah elektronických dat} \label{sec:ObsahData} + +Na samotném konci textu práce je uveden stručný popis obsahu +elektronických dat odevzdaných v systému katedry informatiky spolu s +textem. Tato data jsou nedílnou součástí práce a tvoří (datovou) +přílohu textu práce. Povinné položky struktury dat jsou: + +\begin{description} + +\item[\texttt{text/}] \hfill \\ + Adresář s textem práce ve formátu PDF, vytvořený s~použitím + závazného stylu KI PřF UP v~Olomouci pro závěrečné práce, včetně + všech (textových) příloh, a~všechny soubory potřebné pro + bezproblémové vytvoření PDF dokumentu textu (případně v~ZIP + archivu), tj.~zdrojový text textu a příloh, vložené obrázky, apod. + +\item[\texttt{README.*}] \hfill \\ + Textový soubor (s příponou např. \texttt{.txt}) s informacemi o + opakovatelném způsobu použití ostatních dat práce -- typicky plně + reprodukovatelný co nejúplnější funkční postup zprovoznění software + vytvořeného v~rámci práce, tzn. jeho případné instalace/nasazení a + spuštění, včetně uvedení všech požadavků pro bezproblémový provoz; + za zprovoznění software se nepovažuje zpřístupnění (např. po + Internetu) již někde zprovozněného software. + +\item[\texttt{*}] \hfill \\ + Adresáře a soubory s veškerými ostatními autorskými daty práce + (případně v~ZIP archivu) -- typicky spustitelné a další soubory + software vytvořeného v rámci práce potřebné pro bezproblémový provoz + software, případně jeho instalační program, a kompletní zdrojové + texty software a další data nutná pro plně reprodukovatelné korektní + vytvoření spustitelných souborů. + +\end{description} + +Dále mohou data obsahovat například: + +\begin{itemize} + +%\item[\texttt{data/}] \hfill \\ +\item + ukázková a~testovací data použitá v~práci nebo pro potřeby posouzení + práce v rámci její obhajoby, + +%\item[\texttt{literature/}] \hfill \\ +\item + položky bibliografie v elektronické podobě, příp.~jiná relevantní literatura + a dokumentace vztahující se k~práci, + +%\item[\texttt{install/}] \hfill \\ +\item + cizí data (software) potřebná pro bezproblémové použití autorských + dat práce (software), která nejsou standardní součástí + předpokládaného (softwarového) vybavení uživatele. + +\end{itemize} + +U~veškerých cizích obsažených materiálů jejich +zahrnutí dovolují podmínky pro jejich veřejné šíření nebo přiložený souhlas +držitele práv k užití. Pro všechny použité (a~citované) materiály, +u~kterých toto není splněno a~nejsou tak obsaženy, je uveden +jejich zdroj, např.~webová adresa, v~bibliografii nebo textu práce +nebo souboru \texttt{README.*}. + +%% ------------------------------------------------------------------- + +%% Sazba volitelného seznamu zkratek, za přílohami. +\printglossary + +%% Sazba povinné bibliografie, za přílohami (případně i za seznamem +%% zkratek). Při použití BibLaTeXu použijte makro +%% \printbibliography. jinak prostředí thebibliography. Ne obojí! + +%% Sazba i v textu necitovaných zdrojů, při použití +%% BibLaTeXu. Volitelné. +\nocite{*} +%% Vlastní sazba bibliografie při použití BibLaTeXu. +\printbibliography + +%% Bibliografie, včetně sazby, při NEpoužití BibLaTeXu. +% \begin{thebibliography}{9} +%\bibitem{kniha2} \uppercase{Hawke}, Paul. NanoHttpd: Light-weight HTTP server designed for embedding in other applications. GitHub [online]. 2014-05-12. [cit. 2014-12-06]. Dostupné z: \url{https://github.com/NanoHttpd/nanohttpd} +% +%\bibitem{jeske13} \uppercase{Jeske}, David; \uppercase{Novák}, Josef. Simple HTTP Server in \csharp: Threaded synchronous HTTP Server abstract class, to respond to HTTP requests. CodeProject: For those who code [online]. 2014-05-24. [cit. 2014-12-06]. Dostupné z: \url{http://www.codeproject.com/Articles/137979/Simple-HTTP-Server-in-C} +% +%\bibitem{uzis2012} \uppercase{ÚSTAV ZDRAVOTNICKÝCH INFORMACÍ A STATISTIKY ČR}. Lékaři, zubní lékaři a farmaceuti 2012 [online]. Praha 2, Palackého náměstí 4: Ústav zdravotnických informací a statistiky ČR, 2012 [cit. 2014-12-06]. ISBN 978-80-7472-089-5. Dostupné z: \url{http://www.uzis.cz/publikace/lekari-zubni-lekari-farmaceuti-2012} +% \end{thebibliography} + +%% Sazba volitelného rejstříku, za bibliografií. +\printindex + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: diff --git a/kidiplom.toc b/kidiplom.toc new file mode 100644 index 0000000..ab131f1 --- /dev/null +++ b/kidiplom.toc @@ -0,0 +1,96 @@ +\babel@toc {czech}{}\relax +\contentsline {section}{\numberline {1}Úvod}{9}{section.1}% +\contentsline {section}{\numberline {2}Distribuované systémy}{10}{section.2}% +\contentsline {subsection}{\numberline {2.1}Komunikace v síti}{10}{subsection.2.1}% +\contentsline {subsection}{\numberline {2.2}TCP/IP}{11}{subsection.2.2}% +\contentsline {subsection}{\numberline {2.3}Architektury}{12}{subsection.2.3}% +\contentsline {subsubsection}{\numberline {2.3.1}Klient-Server}{12}{subsubsection.2.3.1}% +\contentsline {subsubsection}{\numberline {2.3.2}Peer-to-Peer}{12}{subsubsection.2.3.2}% +\contentsline {subsection}{\numberline {2.4}Rodina protokolů TCP/IP}{12}{subsection.2.4}% +\contentsline {subsection}{\numberline {2.5}Protokoly v transportní vrstvě}{13}{subsection.2.5}% +\contentsline {subsubsection}{\numberline {2.5.1}Sockety}{13}{subsubsection.2.5.1}% +\contentsline {subsubsection}{\numberline {2.5.2}TCP}{13}{subsubsection.2.5.2}% +\contentsline {subsubsection}{\numberline {2.5.3}Spolehlivost}{14}{subsubsection.2.5.3}% +\contentsline {subsubsection}{\numberline {2.5.4}UDP}{14}{subsubsection.2.5.4}% +\contentsline {subsubsection}{\numberline {2.5.5}QUIC}{15}{subsubsection.2.5.5}% +\contentsline {subsection}{\numberline {2.6}Protokoly v aplikační vrstvě}{16}{subsection.2.6}% +\contentsline {subsubsection}{\numberline {2.6.1}HTTP}{16}{subsubsection.2.6.1}% +\contentsline {subsubsection}{\numberline {2.6.2}HTTP/3}{16}{subsubsection.2.6.2}% +\contentsline {subsubsection}{\numberline {2.6.3}gRPC}{16}{subsubsection.2.6.3}% +\contentsline {subsubsection}{\numberline {2.6.4}Middleware}{17}{subsubsection.2.6.4}% +\contentsline {subsection}{\numberline {2.7}Posílání zpráv}{17}{subsection.2.7}% +\contentsline {subsubsection}{\numberline {2.7.1}Serializace}{17}{subsubsection.2.7.1}% +\contentsline {subsubsection}{\numberline {2.7.2}Kódování zpráv}{18}{subsubsection.2.7.2}% +\contentsline {subsubsection}{\numberline {2.7.3}Implementace}{19}{subsubsection.2.7.3}% +\contentsline {subsubsection}{\numberline {2.7.4}Detekce a náprava chyb}{19}{subsubsection.2.7.4}% +\contentsline {subsection}{\numberline {2.8}Asynchroní IO}{20}{subsection.2.8}% +\contentsline {subsubsection}{\numberline {2.8.1}ZeroMQ}{20}{subsubsection.2.8.1}% +\contentsline {subsubsection}{\numberline {2.8.2}Work stealing}{20}{subsubsection.2.8.2}% +\contentsline {subsubsection}{\numberline {2.8.3}Async/Await}{20}{subsubsection.2.8.3}% +\contentsline {subsubsection}{\numberline {2.8.4}Boost Asio}{21}{subsubsection.2.8.4}% +\contentsline {subsubsection}{\numberline {2.8.5}Stack pointer}{21}{subsubsection.2.8.5}% +\contentsline {subsection}{\numberline {2.9}Metriky}{22}{subsection.2.9}% +\contentsline {subsubsection}{\numberline {2.9.1}TimescaleDB}{22}{subsubsection.2.9.1}% +\contentsline {subsubsection}{\numberline {2.9.2}Grafana}{22}{subsubsection.2.9.2}% +\contentsline {subsubsection}{\numberline {2.9.3}ImGui}{22}{subsubsection.2.9.3}% +\contentsline {subsubsection}{\numberline {2.9.4}Tracy}{22}{subsubsection.2.9.4}% +\contentsline {subsubsection}{\numberline {2.9.5}Konkrétní metriky}{23}{subsubsection.2.9.5}% +\contentsline {subsubsection}{\numberline {2.9.6}Sbírání v reálném čase}{23}{subsubsection.2.9.6}% +\contentsline {section}{\numberline {3}Hra pro více hráčů}{24}{section.3}% +\contentsline {subsection}{\numberline {3.1}Hry}{24}{subsection.3.1}% +\contentsline {subsubsection}{\numberline {3.1.1}Entt}{24}{subsubsection.3.1.1}% +\contentsline {subsection}{\numberline {3.2}Svět}{25}{subsection.3.2}% +\contentsline {subsubsection}{\numberline {3.2.1}Ovladač pro hru jednoho hráče}{26}{subsubsection.3.2.1}% +\contentsline {subsubsection}{\numberline {3.2.2}Ovladač pro hru více hráčů}{26}{subsubsection.3.2.2}% +\contentsline {subsection}{\numberline {3.3}Klient-Server architektura}{26}{subsection.3.3}% +\contentsline {subsection}{\numberline {3.4}Server}{27}{subsection.3.4}% +\contentsline {subsubsection}{\numberline {3.4.1}Registr spojení}{27}{subsubsection.3.4.1}% +\contentsline {subsubsection}{\numberline {3.4.2}Replikátor}{27}{subsubsection.3.4.2}% +\contentsline {subsubsection}{\numberline {3.4.3}Interest manager}{27}{subsubsection.3.4.3}% +\contentsline {subsection}{\numberline {3.5}Klient}{28}{subsection.3.5}% +\contentsline {subsubsection}{\numberline {3.5.1}Replicator controller}{28}{subsubsection.3.5.1}% +\contentsline {subsubsection}{\numberline {3.5.2}Interpolace}{28}{subsubsection.3.5.2}% +\contentsline {subsubsection}{\numberline {3.5.3}Rollback a simulace vlastního hráče}{28}{subsubsection.3.5.3}% +\contentsline {subsection}{\numberline {3.6}Komunikační protokol}{29}{subsection.3.6}% +\contentsline {subsection}{\numberline {3.7}Protokol QUICr}{29}{subsection.3.7}% +\contentsline {subsubsection}{\numberline {3.7.1}Frame}{30}{subsubsection.3.7.1}% +\contentsline {subsubsection}{\numberline {3.7.2}Handshake}{30}{subsubsection.3.7.2}% +\contentsline {subsubsection}{\numberline {3.7.3}Spolehlivost}{31}{subsubsection.3.7.3}% +\contentsline {subsubsection}{\numberline {3.7.4}Enkodér}{32}{subsubsection.3.7.4}% +\contentsline {subsubsection}{\numberline {3.7.5}Testování}{32}{subsubsection.3.7.5}% +\contentsline {subsubsection}{\numberline {3.7.6}Odesílání}{33}{subsubsection.3.7.6}% +\contentsline {subsubsection}{\numberline {3.7.7}Čtení}{35}{subsubsection.3.7.7}% +\contentsline {subsubsection}{\numberline {3.7.8}Šifrování}{35}{subsubsection.3.7.8}% +\contentsline {subsubsection}{\numberline {3.7.9}SPR-6}{35}{subsubsection.3.7.9}% +\contentsline {subsubsection}{\numberline {3.7.10}Lockstep}{35}{subsubsection.3.7.10}% +\contentsline {subsubsection}{\numberline {3.7.11}Congestion control}{35}{subsubsection.3.7.11}% +\contentsline {subsubsection}{\numberline {3.7.12}Bandwidth control}{35}{subsubsection.3.7.12}% +\contentsline {subsection}{\numberline {3.8}Sharding}{36}{subsection.3.8}% +\contentsline {subsection}{\numberline {3.9}Komprese}{36}{subsection.3.9}% +\contentsline {subsubsection}{\numberline {3.9.1}Bit Buffer}{36}{subsubsection.3.9.1}% +\contentsline {subsubsection}{\numberline {3.9.2}Komprese QUICr}{36}{subsubsection.3.9.2}% +\contentsline {subsubsection}{\numberline {3.9.3}Komprese protokolu replikátoru}{36}{subsubsection.3.9.3}% +\contentsline {section}{\numberline {4}Styly pro psaní bakalářských a diplomových prací}{36}{section.4}% +\contentsline {subsection}{\numberline {4.1}Požadavky a podprovaná prostředí}{36}{subsection.4.1}% +\contentsline {subsection}{\numberline {4.2}Přepínače}{37}{subsection.4.2}% +\contentsline {subsection}{\numberline {4.3}Geometrie stránky}{40}{subsection.4.3}% +\contentsline {section}{\numberline {5}Sazba částí dokumentu}{40}{section.5}% +\contentsline {subsection}{\numberline {5.1}Sazba úvodní strany či obsahu}{40}{subsection.5.1}% +\contentsline {subsection}{\numberline {5.2}Závěry}{40}{subsection.5.2}% +\contentsline {subsection}{\numberline {5.3}Matematika}{40}{subsection.5.3}% +\contentsline {subsection}{\numberline {5.4}Sazba literatury}{41}{subsection.5.4}% +\contentsline {subsubsection}{\numberline {5.4.1}Sazba bibliografie přes \textsc {Bib}\LaTeX {}}{41}{subsubsection.5.4.1}% +\contentsline {subsubsection}{\numberline {5.4.2}Manuální sazba bibliografie}{41}{subsubsection.5.4.2}% +\contentsline {subsection}{\numberline {5.5}Drobná makra}{41}{subsection.5.5}% +\contentsline {subsection}{\numberline {5.6}Sazba rejstříku}{42}{subsection.5.6}% +\contentsline {subsection}{\numberline {5.7}Sazba zdrojových kódů}{42}{subsection.5.7}% +\contentsline {section}{Z\'av\v er}{46}{section*.3}% +\babel@toc {czech}{}\relax +\babel@toc {czech}{}\relax +\contentsline {section}{Conclusions}{47}{section*.5}% +\babel@toc {english}{}\relax +\babel@toc {czech}{}\relax +\contentsline {section}{\numberline {A}První příloha}{48}{appendix.A}% +\contentsline {section}{\numberline {B}Druhá příloha}{48}{appendix.B}% +\contentsline {section}{\numberline {C}Obsah elektronických dat}{48}{appendix.C}% +\contentsline {section}{Seznam zkratek}{50}{section*.7}% diff --git a/slovak-iso.lbx b/slovak-iso.lbx new file mode 100644 index 0000000..551ac80 --- /dev/null +++ b/slovak-iso.lbx @@ -0,0 +1,11 @@ + +\ProvidesFile{slovak-iso.lbx} + +\InheritBibliographyExtras{slovak} +\InheritBibliographyStrings{slovak} + +\NewBibliographyString{urlalso,urlcomercial,urlcited} +\DeclareBibliographyStrings{% + urlalso={{Dostupn\'e z {\tt WWW}}{{\tt WWW}}}, + urlcomercial={{Dostupn\'e komer\v{c}ne na {\tt WWW}}{Komer\v{c}n\'y zdroj}} +} diff --git a/slovak.lbx b/slovak.lbx new file mode 100644 index 0000000..1677a0d --- /dev/null +++ b/slovak.lbx @@ -0,0 +1,413 @@ +% $Id: historian.lbx,v 0.4 2010/08/22 gliboff $ + +\ProvidesFile{slovak.lbx} + +\InheritBibliographyExtras{english} +\InheritBibliographyStrings{english} + +%Turabian calls for mostly abbreviated bibstrings in the footnotes, but mostly long forms in the bibliography. Here the entire list of bibstrings from the english.lbx file is redefined to select strings by bibliography vs. footnote environment, rather than long vs. short. + +\DeclareBibliographyExtras{ + \protected\def\mkbibordinal#1{ + \ifnumequal{#1}{1}{Prv\'e}{% + \ifnumequal{#1}{2}{Druh\'e}{% + \ifnumequal{#1}{3}{Tretie}{% + \ifnumequal{#1}{4}{\v{S}tvrt\'e}{% + #1\adddot}}}}} + \renewcommand\finalandcomma{} + %\protected\def\nameprint#1#2{#2\space#1} +} + +\NewBibliographyString{urlalso,urlcomercial,urlcited} +\DeclareBibliographyStrings{% + volume={{diel}{d\adddot}}, +% volume={diel}, + edition={{ed\'icia}{ed\adddot}}, +% edition={ed\'icia}, + page={{strana}{str\adddot}}, + pages={{strany}{str\adddot}}, +% page={str\adddot}, +% pages={str\adddot}, + andothers={{a kol\adddot}{a kol\adddot}}, + volume={{diel}{d\adddot}}, + jourvol={{ro\v{c}n\'ik}{ro\v{c}\adddot}}, +% jourvol={diel}, + number={{\v{c}\'islo}{\v{c}\adddot}}, + urlseen={{citovan\'e}{cit\adddot}}, + url = {{Dostupn\'e z www}{www}}, + urlcited = {{citovan\'e}{cit\adddot}}, + bibliography = {{Bibliografia}{Bibliografia}}, + references = {{Literatúra}{Literatúra}}, + shorthands = {{Zoznam skratiek}{Skratky}}, + editor = {{editor}{ed\adddot}}, + editors = {{edotori}{ed\adddot}}, + compiler = {{zostavil}{zost\adddot}}, + compilers = {{zostavili}{zost\adddot}}, + redactor = {{redaktor}{red\adddot}}, + redactors = {{redaktori}{red\adddot}}, + founder = {{zakladateľ}{zakl\adddot}}, + founders = {{zakladatelia}{zakl\adddot}}, + continuator = {{pokračujúci}{pok\adddot}}, % FIXME: unsure + continuators = {{continued}{cont\adddot}}, % FIXME: unsure + collaborator = {{spolupracovník}{spoluprac\adddot}}, % FIXME: unsure + collaborators = {{spolupracovníci}{spoluprac\adddot}}, % FIXME: unsure + translator = {{prekladatel}{prekl\adddot}}, + translators = {{prekladatelia}{prekl\adddot}}, + commentator = {{komentátor}{kom\adddot}}, + commentators = {{komentátori}{kom\adddot}}, + annotator = {{anotátor}{anot\adddot}}, + annotators = {{anotátoři}{anot\adddot}}, + commentary = {{commentary}{comm\adddot}}, + annotations = {{anotatace}{anot\adddot}}, + introduction = {{úvod}{úv\adddot}}, + foreword = {{predhovor}{predh\adddot}}, + afterword = {{doslov}{dosl\adddot}}, + editortr = {{editor a prekladateľ}% + {ed\adddotspace a prekl\adddot}}, + editorstr = {{editori a překladatelia}% + {ed\adddotspace a prekl\adddot}}, + editorco = {{editor a komentátori}% + {ed\adddotspace a kom\adddot}}, + editorsco = {{editor a komentátori}% + {ed\adddotspace a kom\adddot}}, + editoran = {{editor a anotátor}% + {ed\adddotspace a anot\adddot}}, + editorsan = {{editor a anotátoři}% + {ed\adddotspace a anot\adddot}}, + editorin = {{editor a úvod}% + {ed\adddotspace úv\adddot}}, + editorsin = {{editoři a úvod}% + {ed\adddotspace a úv\adddot}}, + editorfo = {{editor a predhovor}% + {ed\adddotspace a predh\adddot}}, + editorsfo = {{editori a predhovor}% + {ed\adddotspace a predh\adddot}}, + editoraf = {{editor a afterword}% + {ed\adddotspace a afterw\adddot}}, + editorsaf = {{editoři a doslov}% + {ed\adddotspace a afterw\adddot}}, + editortrco = {{editor, translator\ a komentátor}% + {ed.,\addabbrvspace překl\adddot\ a comm\adddot}}, + editorstrco = {{editors, translators\ a komentátoři}% + {eds.,\addabbrvspace překl\adddot\ a comm\adddot}}, + editortran = {{editor, translator\ a annotator}% + {ed.,\addabbrvspace překl\adddot\ a anot\adddot}}, + editorstran = {{editors, translators\ a annotators}% + {ed.,\addabbrvspace překl\adddot\ a anot\adddot}}, + editortrin = {{editor, translator\ a úvod}% + {ed.,\addabbrvspace překl\adddot\ a introd\adddot}}, + editorstrin = {{editors, translators\ a úvod}% + {ed.,\addabbrvspace překl\adddot\ a introd\adddot}}, + editortrfo = {{editor, translator\ a předmluva}% + {ed.,\addabbrvspace překl\adddot\ a forew\adddot}}, + editorstrfo = {{editors, translators\ a předmluva}% + {ed.,\addabbrvspace překl\adddot\ a forew\adddot}}, + editortraf = {{editor, translator\ a doslov}% + {ed.,\addabbrvspace překl\adddot\ a afterw\adddot}}, + editorstraf = {{editors, translators\ a doslov}% + {ed.,\addabbrvspace překl\adddot\ a afterw\adddot}}, + editorcoin = {{editor, commentator\ a úvod}% + {ed.,\addabbrvspace comm\adddot\ a introd\adddot}}, + editorscoin = {{editors, commentators\ a úvod}% + {ed.,\addabbrvspace comm\adddot\ a introd\adddot}}, + editorcofo = {{editor, commentator\ a předmluva}% + {ed.,\addabbrvspace comm\adddot\ a forew\adddot}}, + editorscofo = {{editors, commentators\ a předmluva}% + {ed.,\addabbrvspace comm\adddot\ a forew\adddot}}, + editorcoaf = {{editor, commentator\ a doslov}% + {ed.,\addabbrvspace comm\adddot\ a dosl\adddot}}, + editorscoaf = {{editors, commentators\ a doslov}% + {ed.,\addabbrvspace comm\adddot\ a dosl\adddot}}, + editoranin = {{editor, annotator\ a úvod}% + {ed.,\addabbrvspace anot\adddot\ a introd\adddot}}, + editorsanin = {{editors, annotators\ a úvod}% + {ed.,\addabbrvspace anot\adddot\ a introd\adddot}}, + editoranfo = {{editor, annotator\ a předmluva}% + {ed.,\addabbrvspace anot\adddot\ a forew\adddot}}, + editorsanfo = {{editors, annotators\ a předmluva}% + {ed.,\addabbrvspace anot\adddot\ a forew\adddot}}, + editoranaf = {{editor, annotator\ a doslov}% + {ed.,\addabbrvspace anot\adddot\ a dosl\adddot}}, + editorsanaf = {{editors, annotators\ a doslov}% + {ed.,\addabbrvspace anot\adddot\ a dosl\adddot}}, + editortrcoin = {{editor, překladatel, commentator\ a úvod}% + {ed.,\addabbrvspace trans., comm\adddot\ a introd\adddot}}, + editorstrcoin = {{editors, překladatelé, commentators\ a úvod}% + {ed.,\addabbrvspace trans., comm\adddot\ a introd\adddot}}, + editortrcofo = {{editor, překladatel, commentator\ a předmluva}% + {ed.,\addabbrvspace trans., comm\adddot\ a forew\adddot}}, + editorstrcofo = {{editors, překladatelé, commentators\ a předmluva}% + {ed.,\addabbrvspace trans., comm\adddot\ a forew\adddot}}, + editortrcoaf = {{editor, překladatel, commentator\ a doslov}% + {ed.,\addabbrvspace trans., comm\adddot\ a dosl\adddot}}, + editorstrcoaf = {{editors, překladatelé, commentators\ a doslov}% + {ed.,\addabbrvspace trans., comm\adddot\ a dosl\adddot}}, + editortranin = {{editor, překladatel, annotator\ a úvod}% + {ed.,\addabbrvspace trans., anot\adddot\ a introd\adddot}}, + editorstranin = {{editors, překladatelé, annotators\ a úvod}% + {ed.,\addabbrvspace trans., anot\adddot\ a introd\adddot}}, + editortranfo = {{editor, překladatel, annotator\ a předmluva}% + {ed.,\addabbrvspace trans., anot\adddot\ a forew\adddot}}, + editorstranfo = {{editors, překladatelé, annotators\ a předmluva}% + {ed.,\addabbrvspace trans., anot\adddot\ a forew\adddot}}, + editortranaf = {{editor, překladatel, annotator\ a doslov}% + {ed.,\addabbrvspace trans., anot\adddot\ a dosl\adddot}}, + editorstranaf = {{editors, překladatelé, annotators\ a doslov}% + {ed.,\addabbrvspace trans., anot\adddot\ a dosl\adddot}}, + translatorco = {{překladatel a komentátor}% + {překl\adddot\ a comm\adddot}}, + translatorsco = {{překladatelé a komentátoři}% + {překl\adddot\ a comm\adddot}}, + translatoran = {{překladatel a annotator}% + {překl\adddot\ a anot\adddot}}, + translatorsan = {{překladatelé a annotators}% + {překl\adddot\ a anot\adddot}}, + translatorin = {{překlad a úvod}% + {překl\adddot\ a introd\adddot}}, + translatorsin = {{překlad a úvod}% + {překl\adddot\ a introd\adddot}}, + translatorfo = {{překlad a předmluva}% + {překl\adddot\ a forew\adddot}}, + translatorsfo = {{překlad a předmluva}% + {překl\adddot\ a forew\adddot}}, + translatoraf = {{překlad a doslov}% + {překl\adddot\ a dosl\adddot}}, + translatorsaf = {{překlad a doslov}% + {překl\adddot\ a dosl\adddot}}, + translatorcoin = {{překlad, commentary\ a úvod}% + {trans., comm\adddot\ a introd\adddot}}, + translatorscoin = {{překlad, commentary\ a úvod}% + {trans., comm\adddot\ a introd\adddot}}, + translatorcofo = {{překlad, commentary\ a předmluva}% + {trans., comm\adddot\ a forew\adddot}}, + translatorscofo = {{překlad, commentary\ a předmluva}% + {trans., comm\adddot\ a forew\adddot}}, + translatorcoaf = {{překlad, commentary\ a doslov}% + {trans., comm\adddot\ a dosl\adddot}}, + translatorscoaf = {{překlad, commentary\ a doslov}% + {trans., comm\adddot\ a dosl\adddot}}, + translatoranin = {{překlad, anotace,\ a úvod}% + {trans., anot\adddot\ a introd\adddot}}, + translatorsanin = {{překlad, anotace,\ a úvod}% + {trans., anot\adddot\ a introd\adddot}}, + translatoranfo = {{překlad, anotace,\ a předmluva}% + {trans., anot\adddot\ a forew\adddot}}, + translatorsanfo = {{překlad, anotace,\ a předmluva}% + {trans., anot\adddot\ a forew\adddot}}, + translatoranaf = {{překlad, anotace,\ a doslov}% + {trans., anot\adddot\ a dosl\adddot}}, + translatorsanaf = {{překlad, anotace,\ a doslov}% + {trans., anot\adddot\ a dosl\adddot}}, + byauthor = {{by}{by}}, + byeditor = {{edited by}{ed\adddotspace by}}, + bycompiler = {{compiled by}{comp\adddotspace by}}, + byredactor = {{redacted by}{red\adddotspace by}}, + byfounder = {{founded by}{found\adddotspace by}}, + bycontinuator = {{continued by}{cont\adddotspace by}}, + bycollaborator = {{in collaboration with}{in collab\adddotspace with}}, % FIXME: unsure + bytranslator = {{translated \lbx@lfromlang\ by}{překl\adddot\ \lbx@sfromlang\ by}}, + bycommentator = {{commented by}{comm\adddot\ by}}, + byannotator = {{annotated by}{anot\adddot\ by}}, + withcommentator = {{with a commentary by}{with a comment\adddot\ by}}, + withannotator = {{s anotacemi od}{s anot\adddot\ od}}, + withintroduction = {{s úvodem od}{u úv\adddot\ od}}, + withforeword = {{s předmluvou od}{s předml\adddot\ od}}, + withafterword = {{with an afterword by}{with an dosl\adddot\ by}}, + byeditortr = {{edited a translated \lbx@lfromlang\ by}% + {ed\adddotspace a překl\adddot\ \lbx@sfromlang\ by}}, + byeditorco = {{edited a commented by}% + {ed\adddotspace a kom\adddot\ by}}, + byeditoran = {{edited a annotated by}% + {ed\adddotspace a anot\adddot\ by}}, + byeditorin = {{edited, with an úvod, by}% + {ed.,\addabbrvspace with an introd., by}}, + byeditorfo = {{edited, with a foreword, by}% + {ed.,\addabbrvspace with a forew., by}}, + byeditoraf = {{edited, with an afterword, by}% + {ed.,\addabbrvspace with an afterw., by}}, + byeditortrco = {{edited, translated \lbx@lfromlang\ a commented by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a kom\adddot\ by}}, + byeditortran = {{edited, translated \lbx@lfromlang\ a annotated by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a anot\adddot\ by}}, + byeditortrin = {{edited a translated \lbx@lfromlang, with an úvod, by}% + {ed\adddotspace a překl\adddot\ \lbx@sfromlang, with an introd., by}}, + byeditortrfo = {{edited a translated \lbx@lfromlang, with a foreword, by}% + {ed\adddotspace a překl\adddot\ \lbx@sfromlang, with a forew., by}}, + byeditortraf = {{edited a translated \lbx@lfromlang, with an afterword, by}% + {ed\adddotspace a překl\adddot\ \lbx@sfromlang, with an afterw., by}}, + byeditorcoin = {{edited a commented, with an úvod, by}% + {ed\adddotspace a comm., with an introd., by}}, + byeditorcofo = {{edited a commented, with a foreword, by}% + {ed\adddotspace a comm., with a forew., by}}, + byeditorcoaf = {{edited a commented, with an afterword, by}% + {ed\adddotspace a comm., with an afterw., by}}, + byeditoranin = {{edited a annotated, with an úvod, by}% + {ed\adddotspace a annot., with an introd., by}}, + byeditoranfo = {{edited a annotated, with a foreword, by}% + {ed\adddotspace a annot., with a forew., by}}, + byeditoranaf = {{edited a annotated, with an afterword, by}% + {ed\adddotspace a annot., with an afterw., by}}, + byeditortrcoin = {{edited, translated \lbx@lfromlang\ a commented, with an úvod, by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a comm., with an introd., by}}, + byeditortrcofo = {{edited, translated \lbx@lfromlang\ a commented, with a foreword, by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a comm., with a forew., by}}, + byeditortrcoaf = {{edited, translated \lbx@lfromlang\ a commented, with an afterword, by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a comm., with an afterw., by}}, + byeditortranin = {{edited, translated \lbx@lfromlang\ a annotated, with an úvod, by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a annot, with an introd., by}}, + byeditortranfo = {{edited, translated \lbx@lfromlang\ a annotated, with a foreword, by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a annot, with a forew., by}}, + byeditortranaf = {{edited, translated \lbx@lfromlang\ a annotated, with an afterword, by}% + {ed.,\addabbrvspace překl\adddot\ \lbx@sfromlang\ a annot, with an afterw., by}}, + bytranslatorco = {{translated \lbx@lfromlang\ a commented by}% + {překl\adddot\ \lbx@sfromlang\ a kom\adddot\ by}}, + bytranslatoran = {{translated \lbx@lfromlang\ a annotated by}% + {překl\adddot\ \lbx@sfromlang\ a anot\adddot\ by}}, + bytranslatorin = {{translated \lbx@lfromlang, with an úvod, by}% + {překl\adddot\ \lbx@sfromlang, with an introd., by}}, + bytranslatorfo = {{translated \lbx@lfromlang, with a foreword, by}% + {překl\adddot\ \lbx@sfromlang, with a forew., by}}, + bytranslatoraf = {{translated \lbx@lfromlang, with an afterword, by}% + {překl\adddot\ \lbx@sfromlang, with an afterw., by}}, + bytranslatorcoin = {{translated \lbx@lfromlang\ a commented, with an úvod, by}% + {překl\adddot\ \lbx@sfromlang\ a comm., with an introd., by}}, + bytranslatorcofo = {{translated \lbx@lfromlang\ a commented, with a foreword, by}% + {překl\adddot\ \lbx@sfromlang\ a comm., with a forew., by}}, + bytranslatorcoaf = {{translated \lbx@lfromlang\ a commented, with an afterword, by}% + {překl\adddot\ \lbx@sfromlang\ a comm., with an afterw., by}}, + bytranslatoranin = {{translated \lbx@lfromlang\ a annotated, with an úvod, by}% + {překl\adddot\ \lbx@sfromlang\ a annot., with an introd., by}}, + bytranslatoranfo = {{translated \lbx@lfromlang\ a annotated, with a foreword, by}% + {překl\adddot\ \lbx@sfromlang\ a annot., with a forew., by}}, + bytranslatoranaf = {{translated \lbx@lfromlang\ a annotated, with an afterword, by}% + {překl\adddot\ \lbx@sfromlang\ a annot., with an afterw., by}}, + and = {{a}{a}}, + andothers = {{a kolektív}{a kol\adddot}}, + andmore = {{a iní}{a i\adddot}}, + volume = {{číslo}{č\adddot}}, + volumes = {{čísla}{č\adddot}}, + jourvol = {{číslo}{č\adddot}}, + jourser = {{séria}{s\adddot}}, + newseries = {{new series}{new ser\adddot}}, + oldseries = {{old series}{old ser\adddot}}, + edition = {{edícia}{ed\adddot}}, + reprint = {{reprint}{repr\adddot}}, + reprintof = {{reprint z}{repr\adddotspace z}}, + reprintas = {{reprinted ako}{rpt\adddotspace ako}}, + page = {{strana}{str\adddot}}, + pages = {{strany}{str\adddot}}, + column = {{stĺpec}{slp\adddot}}, + columns = {{stĺpce}{slp\adddot}}, + line = {{riadok}{r\adddot}}, + lines = {{riadky}{r\adddot}}, + verse = {{verš}{v\adddot}}, + verses = {{verše}{v\adddot}}, + section = {{sekcia}{\S}}, + sections = {{sekcie}{\S\S}}, + paragraph = {{odstavec}{ods\adddot}}, + paragraphs = {{odstavce}{ods\adddot}}, + in = {{in}{in}}, + inseries = {{v}{v}}, + ofseries = {{z}{z}}, + %number = {{number}{no\adddot}}, + chapter = {{kapitola}{kap\adddot}}, + mathesis = {{diplomová práca}{dipl\adddotspace práca}}, + phdthesis = {{dizertačná práca}{diz\adddotspace práca}}, + resreport = {{výzkumná správa}{výzk\adddotspace spr\adddot}}, + techreport = {{technická správa}{tech\adddotspace spr\adddot}}, + software = {{počítačový softvér}{soft\adddot}}, + datacd = {{CD-ROM}{CD-ROM}}, + audiocd = {{audio CD}{audio CD}}, + version = {{verzia}{ver\adddot}}, + %url = {{address}{address}}, + %urlseen = {{visited on}{visited on}}, + inpress = {{in press}{in press}}, + submitted = {{submitted}{submitted}}, + citedas = {{henceforth cited as}{henceforth cited as}}, + thiscite = {{especially}{esp\adddot}}, + seenote = {{pozri poznámku}{pozri pozn\adddot}}, + quotedin = {{citované v}{cit\adddotspace v}}, + idem = {{idem}{idem}}, + idemsm = {{idem}{idem}}, + idemsf = {{eadem}{eadem}}, + idemsn = {{idem}{idem}}, + idempm = {{eidem}{eidem}}, + idempf = {{eaedem}{eaedem}}, + idempn = {{eadem}{eadem}}, + idempp = {{eidem}{eidem}}, + ibidem = {{ibidem}{ibid\adddot}}, + opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}}, + loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}}, + confer = {{cf\adddot}{cf\adddot}}, + sequens = {{sq\adddot}{sq\adddot}}, + sequentes = {{sqq\adddot}{sqq\adddot}}, + passim = {{passim}{pass\adddot}}, + see = {{pozri}{pozri}}, + seealso = {{pozri tiež}{pozri tiež}}, + backrefpage = {{citované na strane}{cit\adddotspace na s\adddot}}, + backrefpages = {{citované na stranách}{cit\adddotspace na s\adddot}}, + january = {{januára}{jan\adddot}}, + february = {{februára}{feb\adddot}}, + march = {{marca}{mar\adddot}}, + april = {{apríla}{apr\adddot}}, + may = {{mája}{máj}}, + june = {{júna}{jún}}, + july = {{júla}{júl}}, + august = {{augusta}{aug\adddot}}, + september = {{septembra}{sep\adddot}}, + october = {{októbra}{okt\adddot}}, + november = {{novembra}{nov\adddot}}, + december = {{decembra}{dec\adddot}}, + langamerican = {{Americká angličtina}{Am\adddot angl\adddot}}, + langbrazilian = {{Brazilská portugalština}{Braz\adddot portugal\adddot}}, + langdanish = {{Dánština}{Dán\adddot}}, + langdutch = {{Holandština}{Hol.\adddot}}, + langenglish = {{Angličtina}{Angl\adddot}}, + langfrench = {{Francouzština}{Franc\adddot}}, + langgerman = {{Němčina}{Něm\adddot}}, + langgreek = {{Řečtina}{Řeč\adddot}}, + langitalian = {{Italština}{Ital\adddot}}, + langlatin = {{Latina}{Lat\adddot}}, + langnorwegian = {{Norština}{Norš\adddot}}, + langportuguese = {{Portugalština}{Port\adddot}}, + langspanish = {{Šanělština}{Špaň\adddot}}, + langswedish = {{Švédština}{Švéd\adddot}}, + fromamerican = {{z americké Angličtiny}{z amer\adddot angl\adddot}}, + frombrazilian = {{z Brazilské Portugalštiny}{z Braz\adddot Port\adddot}}, + fromdanish = {{z Danštiny}{z Dán\adddot}}, + fromdutch = {{z Holandštiny}{z Hol\adddot}}, + fromenglish = {{z Angličtiny}{z Angl\adddot}}, + fromfrench = {{z Francouzštiny}{z Franc\adddot}}, + fromgerman = {{z Němčiny}{z Něm\adddot}}, + fromgreek = {{z Řečtiny}{z Řeč\adddot}}, + fromitalian = {{z Italštiny}{z Ital\adddot}}, + fromlatin = {{z Latiny}{z Lat\adddot}}, + fromnorwegian = {{z Norštiny}{z Nor\adddot}}, + fromportuguese = {{z Portugalštiny}{z Portuguese}}, + fromspanish = {{ze Španělštiny}{ze Špaň\adddot}}, + fromswedish = {{ze Švédštiny}{ze Švéd\adddot}}, + countryde = {{Německo}{DE}}, + countryeu = {{European Union}{EU}}, + countryep = {{European Union}{EP}}, + countryfr = {{Francie}{FR}}, + countryuk = {{Velká Británie}{GB}}, + countryus = {{Spojené Státy Americké}{US}}, + patent = {{patent}{pat\adddot}}, + patentde = {{German patent}{German pat\adddot}}, + patenteu = {{European patent}{European pat\adddot}}, + patentfr = {{French patent}{French pat\adddot}}, + patentuk = {{British patent}{British pat\adddot}}, + patentus = {{U.S\adddotspace patent}{U.S\adddotspace pat\adddot}}, + patreq = {{patent request}{pat\adddot\ req\adddot}}, + patreqde = {{German patent request}{German pat\adddot\ req\adddot}}, + patreqeu = {{European patent request}{European pat\adddot\ req\adddot}}, + patreqfr = {{French patent request}{French pat\adddot\ req\adddot}}, + patrequk = {{British patent request}{British pat\adddot\ req\adddot}}, + patrequs = {{U.S\adddotspace patent request}{U.S\adddotspace pat\adddot\ req\adddot}}, + file = {{súbor}{súb\adddot}}, + library = {{knižnica}{kniž\adddot}}, + abstract = {{abstrakt}{abst\adddot}}, + annotation = {{anotácia}{anot\adddot}}, +} + +\endinput