diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..84f9e74 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,20 @@ +name: main + +on: + push: + branches: + - main + +jobs: + build: + name: Deploy docs + runs-on: ubuntu-latest + steps: + - name: 'Checkout sources' + uses: actions/checkout@v4 + + - name: 'Deploy docs' + uses: mhausenblas/mkdocs-deploy-gh-pages@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REQUIREMENTS: requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8b03c06 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +site/ +.DS_Store diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..281d399 --- /dev/null +++ b/LICENSE @@ -0,0 +1,619 @@ + 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. diff --git a/README.md b/README.md index c3274f7..4a15355 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# getcodelimit.github.io \ No newline at end of file +# Code Limit Documentation diff --git a/docs/assets/easy.png b/docs/assets/easy.png new file mode 100644 index 0000000..f97fc10 Binary files /dev/null and b/docs/assets/easy.png differ diff --git a/docs/assets/favicon.png b/docs/assets/favicon.png new file mode 100644 index 0000000..701f47e Binary files /dev/null and b/docs/assets/favicon.png differ diff --git a/docs/assets/hard-to-maintain.png b/docs/assets/hard-to-maintain.png new file mode 100644 index 0000000..1e79e67 Binary files /dev/null and b/docs/assets/hard-to-maintain.png differ diff --git a/docs/assets/logo.png b/docs/assets/logo.png new file mode 100644 index 0000000..c6b4b52 Binary files /dev/null and b/docs/assets/logo.png differ diff --git a/docs/assets/report.cast b/docs/assets/report.cast new file mode 100644 index 0000000..d53ee83 --- /dev/null +++ b/docs/assets/report.cast @@ -0,0 +1,49 @@ +{"version": 2, "width": 80, "height": 25, "timestamp": 1712420376, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}} +[0.372445, "o", "\u001b]2;rob@mahler:~/projects/opensource/fastapi\u0007\u001b]1;..ource/fastapi\u0007"] +[0.372945, "o", "\u001b]0;~/projects/opensource/fastapi\u0007"] +[0.376495, "o", "\r\n"] +[0.376679, "o", "\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[34m~/projects/opensource/fastapi\u001b[39m\r\n\r\u001b[35m❯\u001b[39m \u001b[K"] +[0.376864, "o", "\u001b[?1h\u001b="] +[0.377014, "o", "\u001b[?2004h"] +[0.425151, "o", "\r\r\u001b[A\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[34m~/projects/opensource/fastapi\u001b[39m \u001b[38;5;242mmaster\u001b[38;5;218m\u001b[39m\r\n\r\u001b[35m❯\u001b[39m \u001b[K"] +[1.704691, "o", "c"] +[2.220527, "o", "\bco"] +[2.466128, "o", "d"] +[2.511853, "o", "e"] +[2.646861, "o", "l"] +[2.735853, "o", "i"] +[2.955499, "o", "m"] +[3.019103, "o", "i"] +[3.593736, "o", "t"] +[3.654651, "o", " "] +[3.976152, "o", "r"] +[4.02638, "o", "e"] +[4.088613, "o", "p"] +[4.142272, "o", "o"] +[4.540734, "o", "r"] +[5.204344, "o", "t"] +[5.386895, "o", " "] +[6.078544, "o", "."] +[6.734379, "o", "\u001b[?1l\u001b>"] +[6.735087, "o", "\u001b[?2004l\r\r\n"] +[6.737336, "o", "\u001b]2;codelimit report .\u0007\u001b]1;codelimit\u0007"] +[6.737727, "o", "\u001b]0;fastapi: codelimit report .\u0007"] +[6.996205, "o", "\u001b[1mfastapi/applications.py\u001b[0m\u001b[36m:\u001b[0m64\u001b[36m:\u001b[0m5\u001b[36m:\u001b[0m 317 \u001b[31m✖\u001b[0m __init__\r\n"] +[6.996294, "o", "\u001b[1mfastapi/param_functions.py\u001b[0m\u001b[36m:\u001b[0m1263\u001b[36m:\u001b[0m1\u001b[36m:\u001b[0m 229 \u001b[31m✖\u001b[0m Body\r\n"] +[6.996347, "o", "\u001b[1mfastapi/param_functions.py\u001b[0m\u001b[36m:\u001b[0m643\u001b[36m:\u001b[0m1\u001b[36m:\u001b[0m 222 \u001b[31m✖\u001b[0m Header\r\n"] +[6.996423, "o", "\u001b[1mfastapi/param_functions.py\u001b[0m\u001b[36m:\u001b[0m1592\u001b[36m:\u001b[0m1\u001b[36m:\u001b[0m 222 \u001b[31m✖\u001b[0m Form\r\n"] +[6.996499, "o", "\u001b[1mfastapi/param_functions.py\u001b[0m\u001b[36m:\u001b[0m1906\u001b[36m:\u001b[0m1\u001b[36m:\u001b[0m 222 \u001b[31m✖\u001b[0m File\r\n"] +[6.996571, "o", "\u001b[1mfastapi/param_functions.py\u001b[0m\u001b[36m:\u001b[0m11\u001b[36m:\u001b[0m1\u001b[36m:\u001b[0m 216 \u001b[31m✖\u001b[0m Path\r\n"] +[6.996638, "o", "\u001b[1mfastapi/param_functions.py\u001b[0m\u001b[36m:\u001b[0m339\u001b[36m:\u001b[0m1\u001b[36m:\u001b[0m 215 \u001b[31m✖\u001b[0m Query\r\n"] +[6.996719, "o", "\u001b[1mfastapi/param_functions.py\u001b[0m\u001b[36m:\u001b[0m959\u001b[36m:\u001b[0m1\u001b[36m:\u001b[0m 215 \u001b[31m✖\u001b[0m Cookie\r\n"] +[6.996783, "o", "\u001b[1mfastapi/encoders.py\u001b[0m\u001b[36m:\u001b[0m102\u001b[36m:\u001b[0m1\u001b[36m:\u001b[0m 191 \u001b[31m✖\u001b[0m jsonable_encoder\r\n"] +[6.996855, "o", "\u001b[1mfastapi/openapi/utils.py\u001b[0m\u001b[36m:\u001b[0m215\u001b[36m:\u001b[0m1\u001b[36m:\u001b[0m 183 \u001b[31m✖\u001b[0m get_openapi_path\r\n"] +[6.997954, "o", "\u001b[1;36m57\u001b[0m\u001b[1m more rows, use --full option to get all rows\u001b[0m\r\n"] +[7.017025, "o", "\u001b]2;rob@mahler:~/projects/opensource/fastapi\u0007\u001b]1;..ource/fastapi\u0007"] +[7.017091, "o", "\u001b]0;~/projects/opensource/fastapi\u0007"] +[7.018383, "o", "\r\n"] +[7.018456, "o", "\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[34m~/projects/opensource/fastapi\u001b[39m \u001b[38;5;242mmaster\u001b[38;5;218m\u001b[39m\r\n\r\u001b[35m❯\u001b[39m "] +[7.018496, "o", "\u001b[K"] +[7.018593, "o", "\u001b[?1h\u001b="] +[7.018651, "o", "\u001b[?2004h"] +[9.288505, "o", "\u001b[?2004l\r\r\n"] diff --git a/docs/assets/scan.cast b/docs/assets/scan.cast new file mode 100644 index 0000000..50526ab --- /dev/null +++ b/docs/assets/scan.cast @@ -0,0 +1,67 @@ +{"version": 2, "width": 80, "height": 25, "timestamp": 1712419564, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}} +[0.376559, "o", "\u001b]2;rob@mahler:~/projects/opensource/fastapi\u0007\u001b]1;..ource/fastapi\u0007"] +[0.376958, "o", "\u001b]0;~/projects/opensource/fastapi\u0007"] +[0.380477, "o", "\r\n"] +[0.380587, "o", "\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[34m~/projects/opensource/fastapi\u001b[39m\r\n\r\u001b[35m❯\u001b[39m \u001b[K"] +[0.380907, "o", "\u001b[?1h\u001b="] +[0.380952, "o", "\u001b[?2004h"] +[0.427995, "o", "\r\r\u001b[A\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[34m~/projects/opensource/fastapi\u001b[39m \u001b[38;5;242mmaster\u001b[38;5;218m\u001b[39m\r\n\r\u001b[35m❯\u001b[39m \u001b[K"] +[1.641417, "o", "c"] +[1.792557, "o", "\bco"] +[1.916605, "o", "d"] +[1.959507, "o", "e"] +[2.236741, "o", "l"] +[2.351357, "o", "i"] +[2.562204, "o", "m"] +[2.618614, "o", "i"] +[3.116431, "o", "t"] +[3.259285, "o", " "] +[3.811185, "o", "s"] +[4.00725, "o", "c"] +[4.231535, "o", "a"] +[4.321906, "o", "n"] +[4.357836, "o", " "] +[5.063707, "o", "."] +[5.76313, "o", "\u001b[?1l\u001b>"] +[5.763746, "o", "\u001b[?2004l\r\r\n"] +[5.765945, "o", "\u001b]2;codelimit scan .\u0007\u001b]1;codelimit\u0007"] +[5.766406, "o", "\u001b]0;fastapi: codelimit scan .\u0007"] +[6.010441, "o", " \u001b[1mCode Limit\u001b[0m: \u001b[1;36m0.8\u001b[0m.\u001b[1;36m1\u001b[0m\r\n"] +[6.010585, "o", " \u001b[1mScan date\u001b[0m: \u001b[1;36m2024\u001b[0m-\u001b[1;36m04\u001b[0m-\u001b[1;36m06\u001b[0m \u001b[1;92m18:06:10\u001b[0m\r\n"] +[6.010803, "o", " \u001b[1mScan root\u001b[0m: \u001b[35m/Users/rob/projects/opensource/\u001b[0m\u001b[95mfastapi\u001b[0m\r\n\u001b[?25l"] +[7.022598, "o", "\r\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n JavaScript 2 341 21 0 \u001b[31m 1\u001b[0m \r\n "] +[7.53492, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 5 785 15 0 \u001b[31m 8\u001b[0m \r\n JavaScript 2 341 21 0 \u001b[31m 1\u001b[0m \r\n "] +[8.043821, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 14 3,372 54 \u001b[38;5;208m 5\u001b[0m \u001b[31m 19\u001b[0m \r\n JavaScript 2 341 21 0 \u001b[31m 1\u001b[0m \r\n "] +[8.56258, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 17 5,807 91 \u001b[38;5;208m 7\u001b[0m \u001b[31m 32\u001b[0m \r\n JavaScript 2 341 21 0 \u001b[31m 1\u001b[0m \r\n "] +[9.074885, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 36 8,856 185 \u001b[38;5;208m 16\u001b[0m \u001b[31m 39\u001b[0m \r\n JavaScript 2 341 21 0 \u001b[31m 1\u001b[0m \r\n "] +[9.587268, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 42 10,788 221 \u001b[38;5;208m 24\u001b[0m \u001b[31m 42\u001b[0m \r\n JavaScript 2 341 21 0 \u001b[31m 1\u001b[0m \r\n "] +[10.093428, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 49 11,266 256 \u001b[38;5;208m 24\u001b[0m \u001b[31m 42\u001b[0m \r\n JavaScript 2 341 21 0 \u001b[31m 1\u001b[0m \r\n "] +[10.599998, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 49 11,266 256 \u001b[38;5;208m 24\u001b[0m \u001b[31m 42\u001b[0m \r\n JavaScript 2 341 21 0 \u001b[31m 1\u001b[0m \r\n "] +[11.109335, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 98 11,825 269 \u001b[38;5;208m 24\u001b[0m \u001b[31m 42\u001b[0m \r\n JavaScript 2 341 21 0 \u001b[31m 1\u001b[0m \r\n "] +[11.615381, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 186 13,165 279 \u001b[38;5;208m 24\u001b[0m \u001b[31m 42\u001b[0m \r\n JavaScript 2 341 21 0 \u001b[31m 1\u001b[0m \r\n "] +[12.121147, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 226 14,623 361 \u001b[38;5;208m 24\u001b[0m \u001b[31m 42\u001b[0m \r\n JavaScript 2 341 21 0 \u001b[31m 1\u001b[0m \r\n "] +[12.629602, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 279 15,957 445 \u001b[38;5;208m 24\u001b[0m \u001b[31m 42\u001b[0m \r\n JavaScript 2 341 21 0 \u001b[31m 1\u001b[0m \r\n "] +[13.138173, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 366 17,008 466 \u001b[38;5;208m 24\u001b[0m \u001b[31m 42\u001b[0m \r\n JavaScript 2 341 21 0 \u001b[31m 1\u001b[0m \r\n "] +[13.650147, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 443 18,276 523 \u001b[38;5;208m 24\u001b[0m \u001b[31m 42\u001b[0m \r\n JavaScript 3 373 22 0 \u001b[31m 1\u001b[0m \r\n "] +[14.153085, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 512 19,814 545 \u001b[38;5;208m 24\u001b[0m \u001b[31m 42\u001b[0m \r\n JavaScript 3 373 22 0 \u001b[31m 1\u001b[0m \r\n "] +[14.665579, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 597 21,349 579 \u001b[38;5;208m 24\u001b[0m \u001b[31m 42\u001b[0m \r\n JavaScript 3 373 22 0 \u001b[31m 1\u001b[0m \r\n "] +[15.155047, "o", "\r\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K \r\n \u001b[1m \u001b[0m\u001b[1mLanguage \u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Files\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Lines of Code\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m Functions\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ⚠\u001b[0m\u001b[1m \u001b[0m \u001b[1m \u001b[0m\u001b[1m ✖\u001b[0m\u001b[1m \u001b[0m \r\n ────────────────────────────────────────────────────────────────────────────── \r\n Python 684 22,580 627 \u001b[38;5;208m 24\u001b[0m \u001b[31m 42\u001b[0m \r\n JavaScript 3 373 22 0 \u001b[31m 1\u001b[0m \r\n \r\n\u001b[?25h"] +[15.15533, "o", " \u001b[1mTotal lines of code\u001b[0m: \u001b[1;36m22\u001b[0m,\u001b[1;36m953\u001b[0m\r\n"] +[15.15551, "o", " \u001b[1mTotal files\u001b[0m: \u001b[1;36m687\u001b[0m\r\n"] +[15.15561, "o", " \u001b[1mTotal functions\u001b[0m: \u001b[1;36m649\u001b[0m\r\n"] +[15.155786, "o", " \u001b[38;5;208m⚠\u001b[0m \u001b[1;36m24\u001b[0m functions are hard-to-maintain.\r\n"] +[15.155925, "o", " \u001b[31m✖\u001b[0m \u001b[1;36m43\u001b[0m functions need refactoring.\r\n"] +[15.188414, "o", "\u001b]2;rob@mahler:~/projects/opensource/fastapi\u0007\u001b]1;..ource/fastapi\u0007"] +[15.188599, "o", "\u001b]0;~/projects/opensource/fastapi\u0007"] +[15.189781, "o", "\r\n"] +[15.189824, "o", "\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[34m~/projects/opensource/fastapi\u001b[39m \u001b[38;5;242mmaster\u001b[38;5;218m\u001b[39m\r\n\r\u001b[35m❯\u001b[39m \u001b[K"] +[15.189956, "o", "\u001b[?1h\u001b="] +[15.190032, "o", "\u001b[?2004h"] +[17.732463, "o", "e"] +[17.911061, "o", "\bex"] +[17.994353, "o", "i"] +[18.289493, "o", "t"] +[18.891978, "o", "\u001b[?1l\u001b>"] +[18.892446, "o", "\u001b[?2004l\r\r\n"] +[18.894903, "o", "\u001b]2;exit\u0007\u001b]1;exit\u0007"] +[18.895278, "o", "\u001b]0;fastapi: exit\u0007"] diff --git a/docs/assets/unmaintainable-code.jpg b/docs/assets/unmaintainable-code.jpg new file mode 100644 index 0000000..860fc55 Binary files /dev/null and b/docs/assets/unmaintainable-code.jpg differ diff --git a/docs/assets/unmaintainable.png b/docs/assets/unmaintainable.png new file mode 100644 index 0000000..bf3ae60 Binary files /dev/null and b/docs/assets/unmaintainable.png differ diff --git a/docs/assets/verbose.png b/docs/assets/verbose.png new file mode 100644 index 0000000..6e58436 Binary files /dev/null and b/docs/assets/verbose.png differ diff --git a/docs/configuration.md b/docs/configuration.md new file mode 100644 index 0000000..cae964e --- /dev/null +++ b/docs/configuration.md @@ -0,0 +1,74 @@ +# Configuration + +## Excluding functions + +Functions can be excluded from analysis by putting a `# nocl` comment on the +line above the start of the function, or at any line of the function header. + +For example, to ignore a function with a `# nocl` comment above the start of +the function: + +```python +# nocl +def some_function(): + ... +``` + +Or you can ignore a function by putting a `# nocl` comment on any line of the +header: + +```python +def some_function(): # nocl + ... +``` + +```python +def some_functions( + some_numbers: list[int] +) -> int: # nocl + ... +``` + +## Excluding files + +Files can be excluded from analysis by using the `--exclude` option. +This option can be used multiple times and takes a [glob pattern](https://en.wikipedia.org/wiki/Glob_(programming)) as a +value, for example: + +```shell +codelimit --exclude "*.generated.py" --exclude "docs/*" ... +``` + +The `--exclude` option extends the default exclusion list. +The default exclusion list is: + +```python +[ + ".bzr", + ".direnv", + ".eggs", + ".git", + ".git-rewrite", + ".hg", + ".ipynb_checkpoints", + ".mypy_cache", + ".nox", + ".pants.d", + ".pytest_cache", + ".pytype", + ".ruff_cache", + ".svn", + ".tox", + ".venv", + ".vscode", + "__pypackages__", + "_build", + "buck-out", + "build", + "dist", + "node_modules", + "venv", + "test", + "tests", +] +``` \ No newline at end of file diff --git a/docs/development.md b/docs/development.md new file mode 100644 index 0000000..09c0e3a --- /dev/null +++ b/docs/development.md @@ -0,0 +1,64 @@ +# Development + +After installing dependencies with `poetry install`, Code Limit can be run from +the repository root like this: + +```shell +poetry run codelimit +``` + +For example, to check a codebase at `~/projects/fastapi` run: + +```shell +poetry run codelimit scan ~/projects/fastapi +``` + +## Local installation using pipx + +To install the development repository locally run: + +```shell +pipx install . +``` + +To install the `main` branch locally run: + +```shell +pipx install git+https://github.com/getcodelimit/codelimit.git +``` + +Or to install another branch locally run: + +```shell +pip install git+https://github.com/getcodelimit/codelimit.git@issue-123 +``` + +## Building the binary distribution + +Generate a self-contained binary: + +```shell +poetry run poe bundle +``` + +## Static documentation + +Generating the static documentation: + +```shell +poetry run mkdocs build +``` + +See the output: + +```shell +poetry run mkdocs serve +``` + +Terminal sessions in the documentation are recorded with the [Asciinema +CLI](https://docs.asciinema.org/getting-started/) and stored in the `assets` +folder: + +```shell +asciinema rec scan.cast +``` diff --git a/docs/faq.md b/docs/faq.md new file mode 100644 index 0000000..a31084a --- /dev/null +++ b/docs/faq.md @@ -0,0 +1,41 @@ +# F.A.Q. + +### Q. What programming languages does Code Limit support? + +Currently Code Limit supports these programming languages: + +- C +- C++ +- Java +- JavaScript +- Python +- TypeScript + +### Q. How does Code Limit compare to ... + +**Black** + +[Black](https://github.com/psf/black) is a code formatter and can run alongside Code Limit. + +**Flake8** + +[Flake8](https://github.com/PyCQA/flake8) is a linter and can run alongside +Code Limit. Flake8 can be extended with third-party plugins. + +**Lizard** + +[Lizard](https://github.com/terryyin/lizard) is a code quality tool that +measures cyclomatic complexity and code duplication.The tool is more used for +reporting than monitoring during development. + +**Radon** + +[Radon](https://github.com/rubik/radon) is a code quality tool that computes +various metrics. Radon calculates cyclomatic complexity for functions but not +lines of code. The tool is more used for reporting than monitoring during +development. + +**Ruff** + +[Ruff](https://github.com/astral-sh/ruff) is a linter and can run alongside +Code Limit. Ruff has no linting rule for function length. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..6e966e7 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,47 @@ +# Introduction + +Code Limit is a tool for developers with one goal: _it tells the developer when +it’s time to refactor_. + +Code Limit measures the lines of code for each function in your codebase and +assigns each function to a category: + +| Easy | Verbose | Hard-to-maintain | Unmaintainable | +| :---: | :---: | :---: | :---: | +| 1 - 15 lines of code | 16 - 30 lines of code | 31 - 60 lines of code | 60+ lines of code | +| ![](assets/easy.png){: style="height:136px;width:230px"} | ![](assets/verbose.png){: style="height:189px;width:230px"} | ![](assets/hard-to-maintain.png){: style="height:294px;width:230px"} | ![](assets/unmaintainable.png){: style="height:564px;width:230px"} | + +As the table above shows, functions with more than 60 lines of code (comments +and empty lines are not counted) are _unmaintainable_, and _need_ to be +refactored. Functions with more than 30 lines of code run a risk of turning +into unmaintainable functions over time, you should keep an eye on them and +refactor if possible. Functions in the first two categories are fine and don't +need refactoring. + +Function length is just one code metric, but it is a very important code +metric. Short functions are easy to understand, easy to test, easy to re-use. +For example, code duplication is another important code metric but duplication +is much easier to prevent and fix if your functions are short. + +
+
+ +
Unmaintainable code. Looks easy; should be done in half an hour I reckon [source]
+
+
+ +Function length is a simple code metric, so simple you can count it by hand. +It's also a (fairly) non-controversial metric, most developers agree longer +functions are harder to maintain. Also, there's always a refactoring possible +to make functions smaller. + +Because function length is such a simple code metric, many code quality tools +measure it. But these tools measure a lot more metrics, sometimes so much +metrics that developers are overwhemled and loose focus on the metrics that +matter most. + +Code Limit measures only function length but it tries to be the best developer +tool for measuring it. By notifying developers when it's time to refactor, Code +Limit prevents unmaintainable code. + +Keep your software maintainable and start using Code Limit today! diff --git a/docs/javascripts/asciinema-player.min.js b/docs/javascripts/asciinema-player.min.js new file mode 100644 index 0000000..6ab7674 --- /dev/null +++ b/docs/javascripts/asciinema-player.min.js @@ -0,0 +1 @@ +var AsciinemaPlayer=function(A){"use strict";const g={};const I=Symbol("solid-proxy"),B=Symbol("solid-track"),Q={equals:(A,g)=>A===g};let C=J;const E=1,e=2,i={owned:null,cleanups:null,context:null,owner:null};var t=null;let o=null,s=null,n=null,r=null,a=0;function c(A,g){const I=s,B=t,Q=0===A.length,C=Q?i:{owned:null,cleanups:null,context:null,owner:void 0===g?B:g},E=Q?A:()=>A((()=>y((()=>U(C)))));t=C,s=null;try{return R(E,!0)}finally{s=I,t=B}}function D(A,g){const I={value:A,observers:null,observerSlots:null,comparator:(g=g?Object.assign({},Q,g):Q).equals||void 0};return[u.bind(I),A=>("function"==typeof A&&(A=A(I.value)),F(I,A))]}function w(A,g,I){d(f(A,g,!1,E))}function h(A,g,I){I=I?Object.assign({},Q,I):Q;const B=f(A,g,!0,0);return B.observers=null,B.observerSlots=null,B.comparator=I.equals||void 0,d(B),u.bind(B)}function l(A){return R(A,!1)}function y(A){if(null===s)return A();const g=s;s=null;try{return A()}finally{s=g}}function G(A){!function(A,g,I){C=p;const B=f(A,g,!1,E);B.user=!0,r?r.push(B):d(B)}((()=>y(A)))}function M(A){return null===t||(null===t.cleanups?t.cleanups=[A]:t.cleanups.push(A)),A}function k(){return s}function N(A){const g=h(A),I=h((()=>K(g())));return I.toArray=()=>{const A=I();return Array.isArray(A)?A:null!=A?[A]:[]},I}function u(){const A=o;if(this.sources&&(this.state||A))if(this.state===E||A)d(this);else{const A=n;n=null,R((()=>S(this)),!1),n=A}if(s){const A=this.observers?this.observers.length:0;s.sources?(s.sources.push(this),s.sourceSlots.push(A)):(s.sources=[this],s.sourceSlots=[A]),this.observers?(this.observers.push(s),this.observerSlots.push(s.sources.length-1)):(this.observers=[s],this.observerSlots=[s.sources.length-1])}return this.value}function F(A,g,I){let B=A.value;return A.comparator&&A.comparator(B,g)||(A.value=g,A.observers&&A.observers.length&&R((()=>{for(let g=0;g1e6)throw n=[],new Error}),!1)),g}function d(A){if(!A.fn)return;U(A);const g=t,I=s,B=a;s=t=A,function(A,g,I){let B;try{B=A.fn(g)}catch(g){A.pure&&(A.state=E,A.owned&&A.owned.forEach(U),A.owned=null),H(g)}(!A.updatedAt||A.updatedAt<=I)&&(null!=A.updatedAt&&"observers"in A?F(A,B):A.value=B,A.updatedAt=I)}(A,A.value,B),s=I,t=g}function f(A,g,I,B=E,Q){const C={fn:A,state:B,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:g,owner:t,context:null,pure:I};return null===t||t!==i&&(t.owned?t.owned.push(C):t.owned=[C]),C}function Y(A){const g=o;if(0===A.state||g)return;if(A.state===e||g)return S(A);if(A.suspense&&y(A.suspense.inFallback))return A.suspense.effects.push(A);const I=[A];for(;(A=A.owner)&&(!A.updatedAt||A.updatedAt=0;B--)if((A=I[B]).state===E||g)d(A);else if(A.state===e||g){const g=n;n=null,R((()=>S(A,I[0])),!1),n=g}}function R(A,g){if(n)return A();let I=!1;g||(n=[]),r?I=!0:r=[],a++;try{const g=A();return function(A){n&&(J(n),n=null);if(A)return;const g=r;r=null,g.length&&R((()=>C(g)),!1)}(I),g}catch(A){I||(r=null),n=null,H(A)}}function J(A){for(let g=0;gA(g||{})))}function v(A){const g="fallback"in A&&{fallback:()=>A.fallback};return h(function(A,g,I={}){let Q=[],C=[],E=[],e=0,i=g.length>1?[]:null;return M((()=>q(E))),()=>{let t,o,s=A()||[];return s[B],y((()=>{let A,g,B,r,a,D,w,h,l,y=s.length;if(0===y)0!==e&&(q(E),E=[],Q=[],C=[],e=0,i&&(i=[])),I.fallback&&(Q=[m],C[0]=c((A=>(E[0]=A,I.fallback()))),e=1);else if(0===e){for(C=new Array(y),o=0;o=D&&h>=D&&Q[w]===s[h];w--,h--)B[h]=C[w],r[h]=E[w],i&&(a[h]=i[w]);for(A=new Map,g=new Array(h+1),o=h;o>=D;o--)l=s[o],t=A.get(l),g[o]=void 0===t?-1:t,A.set(l,o);for(t=D;t<=w;t++)l=Q[t],o=A.get(l),void 0!==o&&-1!==o?(B[o]=C[t],r[o]=E[t],i&&(a[o]=i[t]),o=g[o],A.set(l,o)):E[t]();for(o=D;oA.each),A.children,g||void 0))}function x(A){const g="fallback"in A&&{fallback:()=>A.fallback};return h(function(A,g,I={}){let Q,C=[],E=[],e=[],i=[],t=0;return M((()=>q(e))),()=>{const o=A()||[];return o[B],y((()=>{if(0===o.length)return 0!==t&&(q(e),e=[],C=[],E=[],t=0,i=[]),I.fallback&&(C=[m],E[0]=c((A=>(e[0]=A,I.fallback()))),t=1),E;for(C[0]===m&&(e[0](),e=[],C=[],E=[],t=0),Q=0;Qo[Q])):Q>=C.length&&(E[Q]=c(s));for(;QA.each),A.children,g||void 0))}function j(A){let g=!1;const I=A.keyed,B=h((()=>A.when),void 0,{equals:(A,I)=>g?A===I:!A==!I});return h((()=>{const Q=B();if(Q){const B=A.children,C="function"==typeof B&&B.length>0;return g=I||C,C?y((()=>B(Q))):B}return A.fallback}),void 0,void 0)}function T(A){let g=!1,I=!1;const B=N((()=>A.children)),Q=h((()=>{let A=B();Array.isArray(A)||(A=[A]);for(let g=0;gA[0]===I[0]&&(g?A[1]===I[1]:!A[1]==!I[1])&&A[2]===I[2]});return h((()=>{const[B,C,E]=Q();if(B<0)return A.fallback;const e=E.children,i="function"==typeof e&&e.length>0;return g=I||i,i?y((()=>e(C))):e}),void 0,void 0)}function Z(A){return A}const W="_$DX_DELEGATE";function O(A,g,I,B={}){let Q;return c((B=>{Q=B,g===document?A():AA(g,A(),g.firstChild?null:void 0,I)}),B.owner),()=>{Q(),g.textContent=""}}function X(A,g,I){const B=document.createElement("template");B.innerHTML=A;let Q=B.content.firstChild;return I&&(Q=Q.firstChild),Q}function z(A,g=window.document){const I=g[W]||(g[W]=new Set);for(let B=0,Q=A.length;BB.call(A,I[1],g))}else A.addEventListener(g,I)}function _(A,g,I){if(!g)return I?function(A,g,I){null==I?A.removeAttribute(g):A.setAttribute(g,I)}(A,"style"):g;const B=A.style;if("string"==typeof g)return B.cssText=g;let Q,C;for(C in"string"==typeof I&&(B.cssText=I=void 0),I||(I={}),g||(g={}),I)null==g[C]&&B.removeProperty(C),delete I[C];for(C in g)Q=g[C],Q!==I[C]&&(B.setProperty(C,Q),I[C]=Q);return I}function $(A,g,I){return y((()=>A(g,I)))}function AA(A,g,I,B){if(void 0===I||B||(B=[]),"function"!=typeof g)return IA(A,g,B,I);w((B=>IA(A,g(),B,I)),B)}function gA(A){const I=`$$${A.type}`;let B=A.composedPath&&A.composedPath()[0]||A.target;for(A.target!==B&&Object.defineProperty(A,"target",{configurable:!0,value:B}),Object.defineProperty(A,"currentTarget",{configurable:!0,get:()=>B||document}),g.registry&&!g.done&&(g.done=!0,document.querySelectorAll("[id^=pl-]").forEach((g=>{for(;g&&8!==g.nodeType&&g.nodeValue!=="pl-"+A;){let A=g.nextSibling;g.remove(),g=A}g&&g.remove()})));B;){const g=B[I];if(g&&!B.disabled){const Q=B[`${I}Data`];if(void 0!==Q?g.call(B,Q,A):g.call(B,A),A.cancelBubble)return}B=B._$host||B.parentNode||B.host}}function IA(A,I,B,Q,C){for(g.context&&!B&&(B=[...A.childNodes]);"function"==typeof B;)B=B();if(I===B)return B;const E=typeof I,e=void 0!==Q;if(A=e&&B[0]&&B[0].parentNode||A,"string"===E||"number"===E){if(g.context)return B;if("number"===E&&(I=I.toString()),e){let g=B[0];g&&3===g.nodeType?g.data=I:g=document.createTextNode(I),B=CA(A,B,Q,g)}else B=""!==B&&"string"==typeof B?A.firstChild.data=I:A.textContent=I}else if(null==I||"boolean"===E){if(g.context)return B;B=CA(A,B,Q)}else{if("function"===E)return w((()=>{let g=I();for(;"function"==typeof g;)g=g();B=IA(A,g,B,Q)})),()=>B;if(Array.isArray(I)){const E=[],i=B&&Array.isArray(B);if(BA(E,I,B,C))return w((()=>B=IA(A,E,B,Q,!0))),()=>B;if(g.context){if(!E.length)return B;for(let A=0;AB-e){const Q=g[E];for(;e=0;C--){const E=g[C];if(Q!==E){const g=E.parentNode===A;B||C?g&&E.remove():g?A.replaceChild(Q,E):A.insertBefore(Q,I)}else B=!0}}else A.insertBefore(Q,I);return[Q]}let EA;const eA=new Array(128).fill(void 0);function iA(A){return eA[A]}eA.push(void 0,null,!0,!1);let tA=eA.length;function oA(A){const g=iA(A);return function(A){A<132||(eA[A]=tA,tA=A)}(A),g}const sA=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});sA.decode();let nA=null;function rA(){return null!==nA&&0!==nA.byteLength||(nA=new Uint8Array(EA.memory.buffer)),nA}function aA(A,g){return sA.decode(rA().subarray(A,A+g))}function cA(A){tA===eA.length&&eA.push(eA.length+1);const g=tA;return tA=eA[g],eA[g]=A,g}function DA(A){const g=typeof A;if("number"==g||"boolean"==g||null==A)return`${A}`;if("string"==g)return`"${A}"`;if("symbol"==g){const g=A.description;return null==g?"Symbol":`Symbol(${g})`}if("function"==g){const g=A.name;return"string"==typeof g&&g.length>0?`Function(${g})`:"Function"}if(Array.isArray(A)){const g=A.length;let I="[";g>0&&(I+=DA(A[0]));for(let B=1;B1))return toString.call(A);if(B=I[1],"Object"==B)try{return"Object("+JSON.stringify(A)+")"}catch(A){return"Object"}return A instanceof Error?`${A.name}: ${A.message}\n${A.stack}`:B}let wA=0;const hA=new TextEncoder("utf-8"),lA="function"==typeof hA.encodeInto?function(A,g){return hA.encodeInto(A,g)}:function(A,g){const I=hA.encode(A);return g.set(I),{read:A.length,written:I.length}};function yA(A,g,I){if(void 0===I){const I=hA.encode(A),B=g(I.length);return rA().subarray(B,B+I.length).set(I),wA=I.length,B}let B=A.length,Q=g(B);const C=rA();let E=0;for(;E127)break;C[Q+E]=g}if(E!==B){0!==E&&(A=A.slice(E)),Q=I(Q,B,B=E+3*A.length);const g=rA().subarray(Q+E,Q+B);E+=lA(A,g).written}return wA=E,Q}let GA=null;function MA(){return null!==GA&&0!==GA.byteLength||(GA=new Int32Array(EA.memory.buffer)),GA}let kA=null;function NA(A,g){return(null!==kA&&0!==kA.byteLength||(kA=new Uint32Array(EA.memory.buffer)),kA).subarray(A/4,A/4+g)}class uA{static __wrap(A){const g=Object.create(uA.prototype);return g.ptr=A,g}__destroy_into_raw(){const A=this.ptr;return this.ptr=0,A}free(){const A=this.__destroy_into_raw();EA.__wbg_vtwrapper_free(A)}feed(A){const g=yA(A,EA.__wbindgen_malloc,EA.__wbindgen_realloc),I=wA;return oA(EA.vtwrapper_feed(this.ptr,g,I))}inspect(){try{const I=EA.__wbindgen_add_to_stack_pointer(-16);EA.vtwrapper_inspect(I,this.ptr);var A=MA()[I/4+0],g=MA()[I/4+1];return aA(A,g)}finally{EA.__wbindgen_add_to_stack_pointer(16),EA.__wbindgen_free(A,g)}}get_size(){try{const B=EA.__wbindgen_add_to_stack_pointer(-16);EA.vtwrapper_get_size(B,this.ptr);var A=MA()[B/4+0],g=MA()[B/4+1],I=NA(A,g).slice();return EA.__wbindgen_free(A,4*g),I}finally{EA.__wbindgen_add_to_stack_pointer(16)}}get_line(A){return oA(EA.vtwrapper_get_line(this.ptr,A))}get_cursor(){return oA(EA.vtwrapper_get_cursor(this.ptr))}}function FA(){const A={wbg:{}};return A.wbg.__wbindgen_object_drop_ref=function(A){oA(A)},A.wbg.__wbindgen_error_new=function(A,g){return cA(new Error(aA(A,g)))},A.wbg.__wbindgen_number_new=function(A){return cA(A)},A.wbg.__wbindgen_bigint_from_u64=function(A){return cA(BigInt.asUintN(64,A))},A.wbg.__wbindgen_string_new=function(A,g){return cA(aA(A,g))},A.wbg.__wbg_set_20cbc34131e76824=function(A,g,I){iA(A)[oA(g)]=oA(I)},A.wbg.__wbg_new_b525de17f44a8943=function(){return cA(new Array)},A.wbg.__wbg_new_f841cc6f2098f4b5=function(){return cA(new Map)},A.wbg.__wbg_new_f9876326328f45ed=function(){return cA(new Object)},A.wbg.__wbindgen_is_string=function(A){return"string"==typeof iA(A)},A.wbg.__wbg_set_17224bc548dd1d7b=function(A,g,I){iA(A)[g>>>0]=oA(I)},A.wbg.__wbg_set_388c4c6422704173=function(A,g,I){return cA(iA(A).set(iA(g),iA(I)))},A.wbg.__wbindgen_debug_string=function(A,g){const I=yA(DA(iA(g)),EA.__wbindgen_malloc,EA.__wbindgen_realloc),B=wA;MA()[A/4+1]=B,MA()[A/4+0]=I},A.wbg.__wbindgen_throw=function(A,g){throw new Error(aA(A,g))},A}function dA(A,g){return EA=A.exports,fA.__wbindgen_wasm_module=g,GA=null,kA=null,nA=null,EA}async function fA(A){const g=FA();("string"==typeof A||"function"==typeof Request&&A instanceof Request||"function"==typeof URL&&A instanceof URL)&&(A=fetch(A));const{instance:I,module:B}=await async function(A,g){if("function"==typeof Response&&A instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(A,g)}catch(g){if("application/wasm"==A.headers.get("Content-Type"))throw g;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",g)}const I=await A.arrayBuffer();return await WebAssembly.instantiate(I,g)}{const I=await WebAssembly.instantiate(A,g);return I instanceof WebAssembly.Instance?{instance:I,module:A}:I}}(await A,g);return dA(I,B)}var YA=Object.freeze({__proto__:null,VtWrapper:uA,create:function(A,g,I,B){const Q=EA.create(A,g,I,B);return uA.__wrap(Q)},default:fA,initSync:function(A){const g=FA();return A instanceof WebAssembly.Module||(A=new WebAssembly.Module(A)),dA(new WebAssembly.Instance(A,g),A)}});const RA=[62,0,0,0,63,52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,0,0,0,0,0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];function JA(A){return RA[A-43]}const pA=function(A){let g,I=A.endsWith("==")?2:A.endsWith("=")?1:0,B=A.length,Q=new Uint8Array(B/4*3);for(let I=0,C=0;I>16,Q[C+1]=g>>8&255,Q[C+2]=255&g;return Q.subarray(0,Q.length-I)}("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CDcDACACQUBrJAAPCxDhAQALEOIBAAvKAQECfwJAAkAgACgCCCIFIAFPBEAgACgCACABQQR0aiEAAkAgBSABayIEIAJPBEAgBCACayIEIAAgBEEEdGogAhASDAELQfyfwABBIUGgoMAAEIkBAAsgASACaiIEIAJJDQEgBCAFSw0CIAIEQCACQQR0IQIDQCAAIAMpAgA3AgAgAEEIaiADQQhqKQIANwIAIABBEGohACACQRBrIgINAAsLDwsgASAFQfidwAAQWQALIAEgBEGInsAAEFsACyAEIAVBiJ7AABBaAAuWAQEDfwJ/IAJFBEBBACEDQQEMAQsgAygCACEGQQAhAyACIQQCQANAAkBBfyABIAJBAXYgA2oiAkECdGooAgAiBSAGRyAFIAZJGyIFQQFGBEAgAiEEDAELIAVB/wFxQf8BRw0CIAJBAWohAwsgBCADayECIAMgBEkNAAtBAQwBCyACIQNBAAshBCAAIAM2AgQgACAENgIAC5IBAQN/IwBBgAFrIgMkACAALQAAIQJBACEAA0AgACADakH/AGogAkEPcSIEQTBBNyAEQQpJG2o6AAAgAEEBayEAIAJB/wFxIgRBBHYhAiAEQQ9LDQALIABBgAFqIgJBgQFPBEAgAkGAAUGsrcAAEFkACyABQbytwABBAiAAIANqQYABakEAIABrEBUgA0GAAWokAAuTAQEDfyMAQYABayIDJAAgAC0AACECQQAhAANAIAAgA2pB/wBqIAJBD3EiBEEwQdcAIARBCkkbajoAACAAQQFrIQAgAkH/AXEiBEEEdiECIARBD0sNAAsgAEGAAWoiAkGBAU8EQCACQYABQaytwAAQWQALIAFBvK3AAEECIAAgA2pBgAFqQQAgAGsQFSADQYABaiQAC4kBAQN/IwBBgAFrIgMkACAAKAIAIQADQCACIANqQf8AaiAAQQ9xIgRBMEHXACAEQQpJG2o6AAAgAkEBayECIABBD0sgAEEEdiEADQALIAJBgAFqIgBBgQFPBEAgAEGAAUGsrcAAEFkACyABQbytwABBAiACIANqQYABakEAIAJrEBUgA0GAAWokAAuIAQEDfyMAQYABayIDJAAgACgCACEAA0AgAiADakH/AGogAEEPcSIEQTBBNyAEQQpJG2o6AAAgAkEBayECIABBD0sgAEEEdiEADQALIAJBgAFqIgBB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IAQoAgAQDwsgAyACKQMQNwIAIANBGGogAkEQaiIFQRhqKQMANwIAIANBEGogBUEQaikDADcCACAEIAVBCGopAwA3AgAgA0EoaiIFEH0gA0EgaiEEIANBLGooAgAEQCAFKAIAEA8LIAQgAikDMDcCACAEQRhqIAJBMGoiBUEYaikDADcCACAEQRBqIAVBEGopAwA3AgAgBEEIaiAFQQhqIgQpAwA3AgAgA0EAOgC0ASAFIAMoApQBED0gA0H8AGohBSADQYABaigCAARAIAUoAgAQDwsgBSACKQMwNwIAIAVBCGogBCgCADYCACADQbIBakEAOwEAIANBrgFqQQI6AAAgA0ECOgCqASADQdAAakEBOgAAIANCADcCSCADQQA7AagBIANBADoAuQEgA0GAgAQ2ALUBIANCADcCnAEgA0H4AGpBgICACDYCACADQfQAakECOgAAIANB8ABqQQI6AAAgA0HsAGpBADYCACADQeQAakKAgIAINwIAIANB4ABqQQI6AAAgA0HcAGpBAjoAACADQgA3AlQgAyADKAKYASIFQQFrNgKkASACQQhqIAUQayAEQQA2AgAgAiACKQMINwMwIAJBMGogBUEBEE8gAkEYaiAEKAIANgIAIAIgAikDMDcDECADQYgBaiEEIANBjAFqKAIABEAgBCgCABAPCyAEIAIpAxA3AgAgBEEIaiACQRhqKAIANgIAIANBADoAuwEgAkHQAGokAAwBCwJAAkAgBEEoaw4CAAECCyADQQA6AKgBDAELIAJBMEYEQCADQQE6AKkBDAELIANBADoAqQELDAQLIAMgAhAlDAMLIAZBADoAGAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBkEUaigCACIERQRAIAJBQGoONgECAxIEBQYfFgcICQoLICAMICANDiAgDxAgESAgICAgHxITIBQVFhcYICAgHh0gICAgHBsaGSALIAYoAgxBACAEGyEEAkACQAJAAkAgAkHsAGsOBQEjIyMDAAsgAkHoAEYNAQwiCyAEKAIAQT9HDSEgBigCCCICBEAgBigCACEFIAJBAXQhBCADQaoBaiECIANB3ABqIQcDQAJAAkAgBS8BACIIQZYITQRAAkACQAJAAkAgCEEGaw4CAQIA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CwsgBCAIRg0BIAIoAgAhCQtBAQwBC0EACyECIAogCTYCBCAKIAI2AgAgBygCDCECIAcoAgghBCADQQA6ALkBIAMgAiADKAKUASICQQFrIgUgBBsiBCAFIAIgBEsbNgJIIAdBEGokAAwYCwJAAkACQAJAIAYoAgBBxJjAACAGKAIIGy8BAA4DAAECAwsgAyADKAJIIANBzABqIgIoAgBBASADIANBqgFqECYgA0GIAWogAigCACADKAKYARBvDAILIAMgAygCSCADQcwAaiICKAIAQQIgAyADQaoBahAmIANBiAFqQQAgAigCAEEBahBvDAELIANBACADKAIYIANBqgFqEDkgA0GIAWpBACADKAKYARBvCwwXCwJAAkACQAJAAkAgBigCAEHEmMAAIAYoAggbLwEADgMAAQIECyADKAIUIQIgAygCSCEEIAMgA0HMAGooAgAiBUGwlMAAEHsiByAEIAIgA0GqAWoQSiAHQQA6AAwMAgsgAygCFCECIAMoAkhBAWohBCADIANBzABqKAIAIgVBoJTAABB7QQAgBCACIAIgBEsbIANBqgFqEEoMAQsgAygCFCECIAMgA0HMAGooAgAiBUGQlMAAEHsiBEEAIAIgA0GqAWoQSiAEQQA6AAwLIANBkAFqKAIAIgIgBUsEQCADKAKIASAFakEBOgAADAELIAUgAkHskMAAEFgACwwWCyADKAKYASADKAKkASICQQFqIAIgA0HMAGooAgAiAkkbIQQgAyACIAQgBigCAEHEmMAAIAYoAggbLwEAIgVBASAFGyADQaoBahBQIANBiAFqIAIgBBBvDBULIAMoApgBIAMoAqQBIgJBAWogAiADQcwAaigCACICSRshBCADIAIgBCAGKAIAQcSYwAAgBigCCBsvAQAiBUEBIAUbIANBqgFqEBwgA0GIAWogAiAEEG8MFAsgAygCSCICIAMoApQBIgRPBEAgA0EAOgC5ASADIARBAWsiAjYCSAsgBigCAEHEmMAAIAYoAggbLwEAIgRBASAEGyIEIAMoAhQgAmsiBSAEIAVJGyEFIANBqgFqIQgCQAJAIAMgA0HMAGooAgAiB0GAlMAAEHsiCSgCCCIEIAJPBEAgCSgCACIKIAJBBHRqIAQgAmsgBRCcASAEIAVrIQIgBCAFSQ0BIAUEQCAKIARBBHRqIQQgCiACQQR0aiEFIAhBCGohAgNAIAVBIDYCACAFIAgpAAA3AAQgBUEMaiACLwAAOwAAIAQgBUEQaiIFRw0ACwsMAgsgAiAEQZiewAAQWQALIAIgBEGonsAAEFkACyAJQQA6AAwCQCADQZABaigCACICIAdLBEAgAygCiAEgB2pBAToAAAwBCyAHIAJB7JDAABBYAAsMEwsgAyAGKAIAQcSYwAAgBigCCBsvAQAiAkEBIAIbEJ4BDBILIAMgBigCAEHEmMAAIAYoAggbLwEAIgJBASACGxCfAQwRCwJAAkACQAJAIAYoAgBBxJjAACAGKAIIGy8BAA4GAAMBAwMCAwsgAygCSCICRQ0CIAIgAygClAFPDQIgA0H8AGogAhCEAQwCCyADQfwAaiADKAJIEIcBDAELIANBhAFqQQA2AgALDBALIAMgAygCSCADQcwAaiICKAIAQQAgBigCAEHEmMAAIAYoAggbLwEAIgRBASAEGyADQaoBahAmIANBkAFqKAIAIgQgAigCACICTQRAIAIgBEHskMAAEFgACyADKAKIASACakEBOgAADA8LIwBBEGsiCyQAIAtBCGohDCADKAJIIRAgA0H8AGoiAigCACEHIAcgAigCCEECdGohAgJAAkACQCAGKAIAQcSYwAAgBigCCBsvAQAiBEEBIAQbIgRBAWsiEUUNAEEBIQoDQCACQQRrIQQgBSIIQQFqIQUCQANAIAQiAkEEaiAHRg0BIAoEQCACQQRrIQQgAigCACAQTw0BCwtBACEKQQEhCSAFIBFHDQEMAgsLIAchAiAIIBFHDQELA0AgAiAHRg0BIAJBBGsiAigCACEEQQEhCiAJDQIgBCAQTw0ACwwBC0EAIQoLIAwgBDYCBCAMIAo2AgAgCygCDCECIAsoAgghBCADQQA6ALkBIAMgAkEAIAQbIgIgAygClAEiBEEBayACIARJGzYCSCALQRBqJAAMDgsgA0EAOgC5ASADQQAgAygCSCAGKAIAQcSYwAAgBigCCBsvAQAiAkEBIAIbaiICIAMoApQBIgRBAWsgAiAESRsgAkEASBs2AkgMDQsgAygCSCICBEAgBigCAEHEmMAAIAYoAggbLwEAIgRBASAEGyEFIAJBAWshBCADQcwAaigCACEHIwBBEGsiAiQAIAJBCGogAxCFAQJAAkAgAigCDCIIIAdLBEAgAigCCCAHQQR0aiIHKAIIIgggBE0NASAHKAIAIAJBEGokACAEQQR0aiECDAILIAcgCEHYisAAEFgACyAEIAhB2IrAABBYAAsgAigCACECA0AgAyACEBggBUEBayIFDQALCwwMCyADQQA6ALkBIAMgAygCSCICIAMoApQBQQFrIgQgAiAESRs2AkggA0HMAGogAygCoAFBACADLQC2ASIEGyICIAYoAgBBxJjAACAGKAIIGy8BACIFQQEgBRtqQQFrIgUgAiACIAVJGyICIAMoAqQBIAMoApgBQQFrIAQbIgQgAiAESRs2AgAMCwsgAyAGEFYMCgsgA0EAOgC5ASADQcwAaiADKAKgAUEAIAMtALYBIgQbIgIgBigCACIFQcSYwAAgBigCCCIHGy8BACIIQQEgCBtqQQFrIgggAiACIAhJGyICIAMoAqQBIAMoApgBQQFrIAQbIgQgAiAESRs2AgAgAyAFQQJqQcSYwAAgB0EBSxsvAQAiAkEBIAIbQQFrIgQgAygClAEiBUEBayICIAQgBUkbIgQgAiACIARLGzYCSAwJCwJAAkACQCAGKAIAQcSYwAAgBigCCBsvAQAOBAACAgECCyADQfwAaiADKAJIEIcBDAELIANBhAFqQQA2AgALDAgLIAYoAggiAkUNByAGKAIAIQQgAkEBdCECA0ACQAJAIAQvAQAiBUEERwRAIAVBFEYNAQwCCyADQQE6ALUBDAELIANBAToAuAELIARBAmohBCACQQJrIgINAAsMBwsgA0EAOgC5ASADIAMpAlQ3AkggAyADQdwAaikBADcBqgEgA0GyAWogA0HkAGovAQA7AQAgAyADQeYAai8BADsBtgEMBgsCQCADLQC6AUUNACAGKAIAIgJBxJjAACAGKAIIIgQbLwEAQQhHDQAgAkECakHEmMAAIARBAUsbLwEAIgUgAygCmAEiByAFGyEJIAJBBGpBxJjAACAEQQJLGy8BACICIAMoApQBIgUgAhshCAJAAkACQAJAQX8gBSAIRyAFIAhLG0H/AXEOAgMBAAsCQCADQYQBaigCACICRQRAQQAhBQwBCyADKAJ8IQtBACEFIAIhBANAIAsgAkEBdiAFaiICQQJ0aigCACAISSEKIAQgAiAKGyIEIAJBAWogBSAKGyIFayECIAQgBUsNAAsLIAMgBTYChAEMAQsgA0H8AGohBEEAIQIgBUF4cUEI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QQhqKAIANgIAIAYgASkCADcDICAEKAIAIQUgBCgCBCELA0ACQAJAIAUgC0cEQCAEIAVBAWoiBzYCACAFLQAAIAQgBCgCCCIQQQFqNgIIIAchBUUNAyACKAIIIgcgAigCBEcNASACIAcQdQwBCwwBCyACIAdBAWo2AgggAigCACAHQQJ0aiAQNgIADAELCyANQQhqIAooAgA2AgAgDSAGKQMQNwIADAELIA1BADYCCCANQgQ3AgALIAZBMGokACANIAMtALsBOgAMIAgEQCAJQQAgCBDoAQsgA0EAOgC7ASABQRBqJAAjAEFAaiIEJAAgBEEAOwEYIARBADoAGiAEQTBqIARBGGoQtwECfwJAAkACfwJAIAQoAjAEQCAEQSBqIgVBCGogBEE4aigCADYCACAEIAQpAzA3AyAgBEEQaiEJIwBBEGsiByQAIAUoAgghECAHQQhqIQogBSgCACEDIwBBMGsiASQAIA0oAgAhAiABQSBqIAMgDSgCCCIDELYBAn8CQAJAIAEoAiAEQCABQRhqIAFBKGooAgA2AgAgASABKQMgNwMQIANBAnQhCANAIAhFDQMgCEEEayEIIAEgAjYCICACQQRqIQIgAUEIaiELIwBBEGsiAyQAIAFBEGoiBigCCCERIANBCGogBigCACABQSBqKAIANQIAEEYgAygCDCEMIAMoAggiE0UEQCAGQQRqIBEgDBDQASAGIAYoAghBAWo2AggLIAsgEzYCACALIAw2AgQgA0EQaiQAIAEoAghFDQALIAEoAgwhAiABKAIUIgNBhAFJDQEgAxAADAELIAEoAiQhAgtBAQwBCyABQSBqIgJBCGogAUEYaigCADYCACABIAEpAxA3AyAgASACKAIENgIEIAFBADYCACABKAIEIQIgASgCAAshAyAKIAI2AgQgCiADNgIAIAFBMGokACAHKAIMIQEgBygCCCICRQRAIAVBBGogECABENABIAUgBSgCCEEBajYCCAsgCSACNgIAIAkgATYCBCAHQRBqJAAgBCgCEEUNASAEKAIUDAILIAQoAjQhAQwDCyAEQQhqIQUjAEEQayIBJAAgBEEgaiICKAIIIQMgAigCABogAUEIaiIHQYIBQYMBIA1BDGotAAAbNgIEIAdBADYCACABKAIMIQcgASgCCCINRQRAIAJBBGogAyAHENABIAIgAigCCEEB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akEKNgIAIARBOGoiCEEMakEKNgIAIARBBDYCJCAEQcyEwAA2AiAgBCADQQNqNgJIIAQgA0ECajYCQCAEQQo2AjwgBCADQQFqNgI4IAQgCDYCKCAEQRBqIgggChAaIARBCGogByAEKAIQIAQoAhgQvQEgBCgCDCEDIAQoAgghByAIELABCyAJIAc2AgAgCSADNgIEIARB0ABqJAAgBSgCDCEDAkACQCAFKAIIRQRAIAUgAzYCGCACKAIARQRAIAJBBGogBUEUaiAFQRhqEMUBIgJBhAFPBEAgAhAACyAFKAIYIgJBhAFPBEAgAhAACyAFKAIUIgJBhAFJDQMgAhAADAMLIAUgATYCHCAFQRxqENEBIQEgBSgCHCEEIAENARA+IQEgBEGEAU8EQCAEEAALIANBhAFJDQUgAxAADAULIAFBhAFJDQMgARAADAMLIAJBBGogBCADEM8BC0EADAMLQfiCwABBFRDjAQALIAMhAQtBAQshAiAGIAE2AgQgBiACNgIAIAVBIGokACAGKAIAIQIgBigCBAshASAAIAI2AgAgACABNgIEIAZBEGokAAuWAwEDfyMAQRBrIgQkACAEQQhqIAEgAiADEFUgACIGAn8gBCgCCARAIAQoAgwhA0EBDAELIwBBIGsiAyQAIAEoAgghACABQQA2AggCfwJAAkAgAARAIAMgAUEMaigCACIANgIUIAEoAhAaIANBCGoiAkGCAUGDAUGZhMAALQAAGzYCBCACQQA2AgAgAygCDCECAkACQCADKAIIRQRAIAMgAjYCGCABKAIARQRAIAFBBGogA0EUaiADQRhqEMUBIgFBhAFPBEAgARAACyADKAIYIgFBhAFPBEAgARAACyADKAIUIgFBhAFJDQMgARAADAMLIAMgADYCHCADQRxqENEBIQAgAygCHCEFIAANARA+IQAgBUGEAU8EQCAFEAALIAJBhAFJDQUgAhAADAULIABBhAFJDQMgABAADAMLIAFBBGogBSACEM8BC0EADAMLQfiCwABBFRDjAQALIAIhAAtBAQshASAEIAA2AgQgBCABNgIAIANBIGokACAEKAIEIQMgBCgCAAs2AgAgBiADNgIEIARBEGokAAtbAQJ/AkAgAUUEQEEBIQIMAQsgAUEATiIDBEBBtcTAAC0AABogASADEMcBIgINASADIAFB2MTAACgCACIA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EDcAC0HwpMAAQStBvKbAABCJAQALQfCkwABBK0GspsAAEIkBAAszAQF/IwBBEGsiAiQAIAIgACgCADYCDCABQciawABBDSACQQxqQdiawAAQMSACQRBqJAALMAEBfyMAQRBrIgIkACACIAA2AgwgAUGohcAAQQUgAkEMakGwhcAAEDEgAkEQaiQACzABAX8jAEEQayICJAAgAiAANgIMIAFBjJLAAEEKIAJBDGpBmJLAABAxIAJBEGokAAswAQF/IwBBEGsiAiQAIAIgADYCDCABQa+awABBBiACQQxqQbiawAAQMSACQRBqJAALMAEBfyMAQRBrIgIkACACIAA2AgwgAUGwocAAQQQgAkEMakG0ocAAEDEgAkEQaiQACzwAIAAoAgAhACABLQAcQRBxQQR2RQRAIAEtABxBIHFBBXZFBEAgACABENQBDwsgACABEEUPCyAAIAEQRAvTAgEDfyAAKAIAIQAgAS0AHEEQcUEEdkUEQCABLQAcQSBxQQV2RQRAIAAzAQAgARAgDwsjAEGAAWsiAyQAIAAvAQAhAkEAIQADQCAAIANqQf8AakEwQTcgAkEPcSIEQQpJGyAEajoAACAAQQFrIQAgAkH//wNxIgRBBHYhAiAEQQ9LDQALIABBgAFqIgJBgQFPBEAgAkGAAUGsrcAAEFkACyABQbytwABBAiAAIANqQYABakEAIABrEBUgA0GAAWokAA8LIwBBgAFrIgMkACAALwEAIQJBACEAA0AgACADakH/AGpBMEHXACACQQ9xIgRBCkkbIARqOgAAIABBAWshACACQf//A3EiBEEEdiECIARBD0sNAAsgAEGAAWoiAkGBAU8EQCACQYABQaytwAAQWQALIAFBvK3AAEECIAAgA2pBgAFqQQAgAGsQFSADQYABaiQACzwAIAAoAgAhACABLQAcQRBxQQR2RQRAIAEtABxBIHFBBXZFBEAgACABENUBDwsgACABEEIPCyAAIAEQQwssACABIAJPBEAgAiAAIAJBBHRqIAEgAmsQEg8LQdibwABBI0HInMAAEIkBAAssACABIAJPBEAgAiAAIAJBBHRqIAEgAmsQEg8LQfyewABBI0Hsn8AAEIkBAAsfAQF/IABBCGoiARB9IABBDGooAgAEQCABKAIAEA8LCy8BAn8gACAAKAKgASICIAAoAqQBQQFqIgMgASAAQaoBahAcIABBiAFqIAIgAxBvCy8BAn8gACAAKAKgASICIAAoAqQBQQFqIgMgASAAQaoBahBQIABBiAFqIAIgAxBvCzUBAX8gASgCFEHrqsAAQQEgAUEYaigCACgCDBEBACECIABBADoABSAAIAI6AAQgACABNgIACzYAAkAgAS0AHEEQcUEEdkUEQCABLQAcQSBxQQV2DQEgACABENUBDwsgACABEEMPCyAAIAEQQgs2AAJAIAEtABxBEHFBBHZFBEAgAS0AHEEgcUEFdg0BIAAgARDUAQ8LIAAgARBEDwsgACABEEULHgACQCAALQAMQQJGDQAgACgCBEUNACAAKAIAEA8LCyABAX8CQCAAKAIEIgFFDQAgAEEIaigCAEUNACABEA8LCyMAAkAgAUH8////B00EQCAAIAFBBCACELwBIgANAQsACyAACyUAIABFBEBByIbAAEEyEOMBAAsgACACIAMgBCAFIAEoAhARCAALFQAgABB9IAAoAgQEQCAAKAIAEA8LCyMAIABFBEBByIbAAEEyEOMBAAsgACACIAMgBCABKAIQEQUACyMAIABFBEBByIbAAEEyEOMBAAsgACACIAMgBCABKAIQEQsACyMAIABFBEBByIbAAEEyEOMBAAsgACACIAMgBCABKAIQERgACyMAIABFBEBByIbAAEEyEOMBAAsgACACIAMgBCABKAIQERoACyMAIABFBEBByIbAAEEyEOMBAAsgACACIAMgBCABKAIQERwACzMAIAEoAhQgAC0AAEECdCIAQfCHwABqKAIAIABB5IfAAGooAgAgAUEYaigCACgCDBEBAAszACABKAIUIAAtAABBAnQiAEGgm8AAaigCACAAQeiawABqKAIAIAFBGGooAgAoAgwRAQALIQAgAEUEQEHIhsAAQTIQ4wEACyAAIAIgAyABKAIQEQMACxEAIAAoAgQEQCAAKAIAEA8LCzEAIAEoAhRBwKLAAEHHosAAIAAoAgAtAAAiABtBB0EFIAAbIAFBGGooAgAoAgwRAQALFAAgAEEEaigCAARAIAAoAgAQDwsLIgAgAC0AAEUEQCABQcSvwABBBRAQDwsgAUHAr8AAQQQQEAsfACAARQRAQciGwABBMhDjAQALIAAgAiABKAIQEQAACy4AIAEoAhRB2I/AAEHhj8AAIAAtAAAiABtBCUEHIAAbIAFB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AEEQaiQAC40BAQJ/IAAoAgAiACgCACECIAAoAgghAyMAQRBrIgAkACAAIAEQoAEgAwRAIANBAXQhAQNAIAAgAjYCDCAAIABBDGpBrIjAABDWASACQQJqIQIgAUECayIBDQALCyAALQAEBH9BAQUgACgCACIBKAIUQY6twABBASABQRhqKAIAKAIMEQEACyAAQRBqJAALCwAgAQRAIAAQDwsLEwAgACgCACABIAEgAmoQgAFBAAsTACABKAIUIAFBGGooAgAgABAWCxMAIAAoAgAgASgCACACKAIAEAsLFAAgACgCACABIAAoAgQoAgwRAAALGQACfyABQQlPBEAgASAAEBsMAQsgABAOCwuIAQECfyAAKAIAIQIgACgCCCEDIwBBEGsiACQAIAAgARCgASADBEAgA0EEdCEBA0AgACACNgIMIAAgAEEMakHciMAAENYBIAJBEGohAiABQRBrIgENAAsLIAAtAAQEf0EBBSAAKAIAIgEoAhRBjq3AAEEBIAFBGGooAgAoAgwRAQALIABBEGokAAuIAQECfyAAKAIAIQIgACgCCCEDIwBBEGsiACQAIAAgARCgASADBEAgA0EEdCEBA0AgACACNgIMIAAgAEEMakGMiMAAENYBIAJBEGohAiABQRBrIgENAAsLIAAtAAQEf0EBBSAAKAIAIgEoAhRBjq3AAEEBIAFBGGooAgAoAgwRAQALIABBEGokAAsRACAAKAIAIAAoAgggARDmAQsOACAAIAEgASACahCAAQsTACAAQdymwAA2AgQgACABNgIACxAAIAEgACgCACAAKAIEEBALDQAgACABIAIQywFBAAsNACAAKAIAIAEgAhAFCw0AIAAoAgAgASACEAoLDAAgACgCABAJQQFGC6EEAQV/IAAoAgAhAyMAQRBrIgQkAAJAIAFB/wBNBEAgAygCCCICIAMoAgRGBEAjAEEgayIAJAACQAJAIAJBAWoiAkUNACADQQRqKAIAIgZBAXQiBSACIAIgBUkbIgJBCCACQQhLGyIFQX9zQR92IQICQCAGBEAgACAGNgIYIABBATYCFCAAIAMoAgA2AhAMAQsgAEEANgIUCyAAIAIgBSAAQRBqEDQgACgCBCECIAAoAgBFBEAgAyACNgIAIANBBGogBTYCAAwCCyACQYGAgIB4Rg0BIAJFDQAgAiAAQQhqKAIAQdjE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JAAgA0EXNgIAIANBFzYCBCABKAIUQdCPwABBCCABQRhqKAIAKAIMEQEAIQUgA0EAOgANIAMgBToADCADIAE2AggCfwNAIANBCGogBCgCACAEQQRqKAIAIAJBsK/AABAeIQUgAkEIaiECIARBCGohBCAGQQFrIgYNAAsgAy0ADCICQQBHIAMtAA1FDQAaQQEgAg0AGiAFKAIAIgEtABxBBHFFBEAgASgCFEGHrcAAQQIgAUEYaigCACgCDBEBAAwBCyABKAIUQYatwABBASABQRhqKAIAKAIMEQEACyADQSBqJAAgAEHAAWokAAtyAQJ/QQIhAyMAQRBrIgIkACACIAEQoAEDQCACIAA2AgwgAiACQQxqQcyIwAAQ1gEgAEEBaiEAIANBAWsiAw0ACyACLQAEBH9BAQUgAigCACIAKAIUQY6twABBASAAQRhqKAIAKAIMEQEACyACQRBqJAALDQBBzKLAAEEbEOMBAAsOAEHnosAAQc8AEOMBAAsJACAAIAEQDQALDAAgACgCACABELMBCwsAIAAoAgAgARAkCwoAIAIgACABEBALwAIBA38gACgCACEAIwBBgAFrIgQkAAJAAkACQAJAIAEoAhwiAkEQcUUEQCACQSBxDQEgADUCACABECAhAAwECyAAKAIAIQBBACECA0AgAiAEakH/AGpBMEHXACAAQQ9xIgNBCkkbIANqOgAAIAJBAWshAiAAQQ9LIABBBHYhAA0ACyACQYABaiIAQYEBTw0BIAFBvK3AAEECIAIgBGpBgAFqQQAgAmsQFSEADAMLIAAoAgAhAEEAIQIDQCACIARqQf8AakEwQTcgAEEPcSIDQQpJGyADajoAACACQQFrIQIgAEEPSyAAQQR2IQANAAsgAkGAAWoiAEGBAU8NASABQbytwABBAiACIARqQYABakEAIAJrEBUhAAwCCyAAQYABQaytwAAQWQALIABBgAFBrK3AABBZAAsgBEGAAWokACAAC5wBAQJ/IAJBD0sEQEEAIABrQQNxIgMgAGohBCADBEADQCAAIAE6AAAgBCAAQQFqIgBLDQALCyACIANrIgJBfHEiAyAEaiEAIANBAEoEQCABQf8BcUGBgoQIbCEDA0AgBCADNgIAIARBBGoiBCAASQ0ACwsgAkEDcSECCyACBEAgACACaiECA0AgACABOgAAIAIgAEEBaiIA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AAAAL3J1c3RjL2ViMjYyOTZiNTU2Y2VmMTBmYjcxM2EzOGYzZDE2Yjk4ODYwODBmMjYvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5yc+wCEABMAAAArgEAAAkAAABjbG9zdXJlIGludm9rZWQgcmVjdXJzaXZlbHkgb3IgYWZ0ZXIgYmVpbmcgZHJvcHBlZFBlbmZvcmVncm91bmQAGgAAAAQAAAABAAAAGwAAAGJhY2tncm91bmRpbnRlbnNpdHkAGgAAAAEAAAABAAAAHAAAAGF0dHJzAAAAHQAAAAQAAAAEAAAAHgAAAEZhaW50Qm9sZE5vcm1hbAAGAAAABAAAAAUAAADdAxAA2QMQANQDEAAfAAAABAAAAAQAAAAgAAAAHwAAAAQAAAAEAAAAIQAAAB8AAAAEAAAABAAAACIAAAAfAAAABAAAAAQAAAAjAAAAHwAAAAQAAAAEAAAAJAAAAB8AAAAEAAAABAAAACUAAAAfAAAABAAAAAQAAAAmAAAAUkdCcicAAAABAAAAAQAAACgAAABnYgAAHwAAAAQAAAAEAAAAHgAAAEN1cnNvcmNvbAAAAB8AAAAEAAAABAAAACkAAAByb3d2aXNpYmxlUkdCAAAAKgAAAAQAAAAEAAAAKwAAAEluZGV4ZWQAKgAAAAQAAAAEAAAAHgAAAC9ob21lL21hcmNpbi8uY2FyZ28vZ2l0L2NoZWNrb3V0cy9hdnQtNjgzMzk3ODhiYTdkNjczZS8yOGFlZDJiL3NyYy90ZXJtaW5hbC5ycwAA6AQQAE4AAABoAQAACgAAAOgEEABOAAAAnwEAABEAAADoBBAATgAAAN4CAAAYAAAAY29sc3Jvd3NidWZmZXJvdGhlcl9idWZmZXJhY3RpdmVfYnVmZmVyX3R5cGVzY3JvbGxiYWNrX2xpbWl0Y3Vyc29ycGVuY2hhcnNldHNhY3RpdmVfY2hhcnNldHRhYnNpbnNlcnRfbW9kZW9yaWdpbl9tb2RlYXV0b193cmFwX21vZGVuZXdfbGluZV9tb2RlbmV4dF9wcmludF93cmFwc3RvcF9tYXJnaW5ib3R0b21fbWFyZ2luc2F2ZWRfY3R4YWx0ZXJuYXRlX3NhdmVkX2N0eGRpcnR5X2xpbmVzcmVzaXphYmxlcmVzaXplZAAAaAUQAAQAAABsBRAABAAAAHAFEAAG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");function SA(A){return"number"==typeof A?A:"string"==typeof A?A.split(":").reverse().map(parseFloat).reduce(((A,g,I)=>A+g*Math.pow(60,I))):void 0}class LA{constructor(){let A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.speed=A,this.startTime=performance.now()}getTime(){return this.speed*(performance.now()-this.startTime)/1e3}setTime(A){this.startTime=performance.now()-A/this.speed*1e3}}class UA{constructor(){}getTime(A){}setTime(A){}}const HA=(async()=>(await fA(pA),YA))();class KA{constructor(A){this.core=A,this.driver=A.driver}onEnter(A){}init(){}play(){}pause(){}togglePlay(){}seek(A){return!1}step(){}stop(){this.driver.stop()}}class mA extends KA{async init(){try{return await this.core.initializeDriver(),this.core.setState("stopped")}catch(A){throw this.core.setState("errored"),A}}async play(){this.core.dispatchEvent("play");const A=await this.init();return await A.doPlay()}togglePlay(){return this.play()}async seek(A){const g=await this.init();return await g.seek(A)}async step(){const A=await this.init();return await A.step()}stop(){}}class qA extends KA{onEnter(A){this.core.dispatchEvent("stopped"),"paused"===A.reason?this.core.dispatchEvent("pause"):"ended"===A.reason&&this.core.dispatchEvent("ended")}play(){return this.core.dispatchEvent("play"),this.doPlay()}async doPlay(){const A=await this.driver.play();!0===A?this.core.setState("playing"):"function"==typeof A&&(this.core.setState("playing"),this.driver.stop=A)}togglePlay(){return this.play()}seek(A){return this.driver.seek(A)}step(){this.driver.step()}}class bA extends KA{onEnter(){this.core.dispatchEvent("playing")}pause(){!0===this.driver.pause()&&this.core.setState("stopped",{reason:"paused"})}togglePlay(){return this.pause()}seek(A){return this.driver.seek(A)}}class vA extends KA{onEnter(){this.core.dispatchEvent("loading")}}class xA extends KA{onEnter(){this.core.dispatchEvent("offline")}}class jA extends KA{onEnter(){this.core.dispatchEvent("errored")}}class TA{constructor(A,g){this.logger=g.logger,this.state=new mA(this),this.stateName="uninitialized",this.driver=null,this.driverFn=A,this.changedLines=new Set,this.cursor=void 0,this.duration=void 0,this.cols=g.cols,this.rows=g.rows,this.speed=g.speed??1,this.loop=g.loop,this.idleTimeLimit=g.idleTimeLimit,this.preload=g.preload,this.startAt=SA(g.startAt),this.poster=this.parsePoster(g.poster),this.markers=this.normalizeMarkers(g.markers),this.pauseOnMarkers=g.pauseOnMarkers,this.commandQueue=Promise.resolve(),this.eventHandlers=new Map([["marker",[]],["ended",[]],["errored",[]],["init",[]],["input",[]],["loading",[]],["offline",[]],["pause",[]],["play",[]],["playing",[]],["reset",[]],["resize",[]],["seeked",[]],["stopped",[]],["terminalUpdate",[]]])}addEventListener(A,g){this.eventHandlers.get(A).push(g)}dispatchEvent(A){let g=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const I of this.eventHandlers.get(A))I(g)}async init(){this.wasm=await HA;const A=this.feed.bind(this),g=this.now.bind(this),I=this.resetVt.bind(this),B=this.setState.bind(this),Q="npt"===this.poster.type?this.poster.value:void 0;this.driver=this.driverFn({feed:A,onInput:A=>{this.dispatchEvent("input",{data:A})},onMarker:A=>{let{index:g,time:I,label:B}=A;this.dispatchEvent("marker",{index:g,time:I,label:B})},reset:I,now:g,setTimeout:(A,g)=>window.setTimeout(A,g/this.speed),setInterval:(A,g)=>window.setInterval(A,g/this.speed),setState:B,logger:this.logger},{cols:this.cols,rows:this.rows,idleTimeLimit:this.idleTimeLimit,startAt:this.startAt,loop:this.loop,posterTime:Q,markers:this.markers,pauseOnMarkers:this.pauseOnMarkers}),"function"==typeof this.driver&&(this.driver={play:this.driver}),(this.preload||void 0!==Q)&&this.withState((A=>A.init()));const C="text"===this.poster.type?this.renderPoster(this.poster.value):void 0,E={isPausable:!!this.driver.pause,isSeekable:!!this.driver.seek,poster:C};if(void 0===this.driver.init&&(this.driver.init=()=>({})),void 0===this.driver.pause&&(this.driver.pause=()=>{}),void 0===this.driver.seek&&(this.driver.seek=A=>!1),void 0===this.driver.step&&(this.driver.step=()=>{}),void 0===this.driver.stop&&(this.driver.stop=()=>{}),void 0===this.driver.getCurrentTime){const A=this.driver.play;let g=new UA;this.driver.play=()=>(g=new LA(this.speed),A()),this.driver.getCurrentTime=()=>g.getTime()}return E}play(){return this.withState((A=>A.play()))}pause(){return this.withState((A=>A.pause()))}togglePlay(){return this.withState((A=>A.togglePlay()))}seek(A){return this.withState((async g=>{await g.seek(A)&&this.dispatchEvent("seeked")}))}step(){return this.withState((A=>A.step()))}stop(){return this.withState((A=>A.stop()))}withState(A){return this.enqueueCommand((()=>A(this.state)))}enqueueCommand(A){return this.commandQueue=this.commandQueue.then(A),this.commandQueue}getChangedLines(){if(this.changedLines.size>0){const A=new Map,g=this.vt.rows;for(const I of this.changedLines)I1&&void 0!==arguments[1]?arguments[1]:{};if(this.stateName===A)return this.state;if(this.stateName=A,"playing"===A)this.state=new bA(this);else if("stopped"===A)this.state=new qA(this);else if("loading"===A)this.state=new vA(this);else if("offline"===A)this.state=new xA(this);else{if("errored"!==A)throw`invalid state: ${A}`;this.state=new jA(this)}return this.state.onEnter(g),this.state}feed(A){this.doFeed(A),this.dispatchEvent("terminalUpdate")}doFeed(A){const[g,I]=this.vt.feed(A);if(g.forEach((A=>this.changedLines.add(A))),this.cursor=void 0,I){const[A,g]=this.vt.get_size();this.vt.cols=A,this.vt.rows=g,this.logger.debug(`core: vt resize (${A}x${g})`),this.dispatchEvent("resize",{cols:A,rows:g})}}now(){return performance.now()*this.speed}async initializeDriver(){const A=await this.driver.init();this.cols=this.cols??A.cols??80,this.rows=this.rows??A.rows??24,this.duration=this.duration??A.duration,this.markers=this.normalizeMarkers(A.markers)??this.markers??[],this.initializeVt(this.cols,this.rows);const g=void 0!==A.poster?this.renderPoster(A.poster):void 0;this.dispatchEvent("init",{cols:this.cols,rows:this.rows,duration:this.duration,markers:this.markers,poster:g})}resetVt(A,g){let I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.cols=A,this.rows=g,this.cursor=void 0,this.initializeVt(A,g),void 0!==I&&""!==I&&this.doFeed(I),this.dispatchEvent("reset",{cols:A,rows:g})}initializeVt(A,g){this.logger.debug(`core: vt init (${A}x${g})`),this.vt=this.wasm.create(A,g,!0,100),this.vt.cols=A,this.vt.rows=g,this.changedLines.clear();for(let A=0;AB.feed(A)));const Q=B.get_cursor()??!1,C=[];for(let A=0;A"number"==typeof A?[A,""]:A))}}const ZA=Symbol("store-raw"),WA=Symbol("store-node"),OA=Symbol("store-name");function XA(A,g){let B=A[I];if(!B&&(Object.defineProperty(A,I,{value:B=new Proxy(A,gg)}),!Array.isArray(A))){const g=Object.keys(A),I=Object.getOwnPropertyDescriptors(A);for(let Q=0,C=g.length;Q!0,deleteProperty:()=>!0,ownKeys:function(A){return $A(A),Reflect.ownKeys(A)},getOwnPropertyDescriptor:function(A,g){const B=Reflect.getOwnPropertyDescriptor(A,g);return B&&!B.get&&B.configurable&&g!==I&&g!==WA&&g!==OA?(delete B.value,delete B.writable,B.get=()=>A[I][g],B):B}};function Ig(A,g,I,B=!1){if(!B&&A[g]===I)return;const Q=A[g],C=A.length;void 0===I?delete A[g]:A[g]=I;let E,e=PA(A);(E=_A(e,g,Q))&&E.$((()=>I)),Array.isArray(A)&&A.length!==C&&(E=_A(e,"length",C))&&E.$(A.length),(E=e._)&&E.$()}function Bg(A,g){const I=Object.keys(g);for(let B=0;B1){B=g.shift();const C=typeof B,E=Array.isArray(A);if(Array.isArray(B)){for(let Q=0;Q1)return void Qg(A[B],g,[B].concat(I));Q=A[B],I=[B].concat(I)}let C=g[0];"function"==typeof C&&(C=C(Q,I),C===Q)||void 0===B&&null==C||(C=VA(C),void 0===B||zA(Q)&&zA(C)&&!Array.isArray(C)?Bg(Q,C):Ig(A,B,C))}function Cg(...[A,g]){const I=VA(A||{}),B=Array.isArray(I);return[XA(I),function(...A){l((()=>{B&&1===A.length?function(A,g){if("function"==typeof g&&(g=g(A)),g=VA(g),Array.isArray(g)){if(A===g)return;let I=0,B=g.length;for(;I=E&&i>=E&&(C[e]===A[i]||Q&&C[E]&&A[E]&&C[e][Q]===A[i][Q]);e--,i--)n[i]=C[e];if(E>i||E>e){for(I=E;I<=i;I++)Ig(C,I,A[I]);for(;IA.length&&Ig(C,"length",A.length))}for(o=new Array(i+1),I=i;I>=E;I--)t=A[I],s=Q&&t?t[Q]:t,g=r.get(s),o[I]=void 0===g?-1:g,r.set(s,I);for(g=E;g<=e;g++)t=C[g],s=Q&&t?t[Q]:t,I=r.get(s),void 0!==I&&-1!==I&&(n[I]=C[g],I=o[I],r.set(s,I));for(I=E;IA.length&&Ig(C,"length",A.length))}const E=Object.keys(A);for(let g=0,I=E.length;g{if(!zA(A)||!zA(Q))return Q;const g=eg(Q,{[Eg]:A},Eg,I,B);return void 0===g?A:g}}const tg=X("");var og=A=>(()=>{const g=tg.cloneNode(!0);return AA(g,(()=>A.text)),w((I=>{const B=function(A,g){const I=A.get("inverse")?A.has("bg")?A.get("bg"):"bg":A.get("fg"),B=A.get("inverse")?A.has("fg")?A.get("fg"):"fg":A.get("bg"),Q=sg(I,A.get("bold"),"fg-"),C=sg(B,A.get("blink"),"bg-");let E=g??"";Q&&(E+=" "+Q);C&&(E+=" "+C);A.has("bold")&&(E+=" ap-bright");A.has("faint")&&(E+=" ap-faint");A.has("italic")&&(E+=" ap-italic");A.has("underline")&&(E+=" ap-underline");A.has("blink")&&(E+=" ap-blink");return E}(A.attrs,A.extraClass),Q=function(A){const g=A.get("inverse")?A.get("bg"):A.get("fg"),I=A.get("inverse")?A.get("fg"):A.get("bg");let B={};"string"==typeof g&&(B.color=g);"string"==typeof I&&(B["background-color"]=I);return B}(A.attrs);return B!==I._v$&&V(g,I._v$=B),I._v$2=_(g,Q,I._v$2),I}),{_v$:void 0,_v$2:void 0}),g})();function sg(A,g,I){return"number"==typeof A?(g&&A<8&&(A+=8),`${I}${A}`):"fg"==A||"bg"==A?`${I}${A}`:void 0}const ng=X('');var rg=A=>(()=>{const g=ng.cloneNode(!0);return AA(g,b(x,{get each(){return(()=>{if("number"==typeof A.cursor){const g=[];let I=0,B=0;for(;B0&&g.push([Q[0].substring(0,e),Q[1]]),g.push([Q[0][e],C," ap-cursor-a"]),g.push([Q[0][e],E," ap-cursor-b"]),eb(og,{get text(){return A()[0]},get attrs(){return A()[1]},get extraClass(){return A()[2]}})})),w((()=>g.style.setProperty("height",A.height))),g})();const ag=X('
');var cg=A=>{const g=()=>A.lineHeight??1.3333333333,I=h((()=>({width:`${A.cols}ch`,height:g()*A.rows+"em","font-size":100*(A.scale||1)+"%","font-family":A.fontFamily,"line-height":`${g()}em`})));return(()=>{const B=ag.cloneNode(!0),Q=A.ref;return"function"==typeof Q?$(Q,B):A.ref=B,AA(B,b(v,{get each(){return A.lines},children:(I,B)=>b(rg,{get segments(){return I.segments},get cursor(){return h((()=>B()===A.cursor?.[1]))()?A.cursor?.[0]:null},get height(){return`${g()}em`}})})),w((g=>{const Q=!(!A.blink&&!A.cursorHold),C=!!A.blink,E=I();return Q!==g._v$&&B.classList.toggle("ap-cursor",g._v$=Q),C!==g._v$2&&B.classList.toggle("ap-blink",g._v$2=C),g._v$3=_(B,E,g._v$3),g}),{_v$:void 0,_v$2:void 0,_v$3:void 0}),B})()};const Dg=X(''),wg=X(''),hg=X(''),lg=X(''),yg=X('
'),Gg=X('');function Mg(A){let g=Math.floor(A);const I=Math.floor(g/86400);g%=86400;const B=Math.floor(g/3600);g%=3600;const Q=Math.floor(g/60);return g%=60,I>0?`${kg(I)}:${kg(B)}:${kg(Q)}:${kg(g)}`:B>0?`${kg(B)}:${kg(Q)}:${kg(g)}`:`${kg(Q)}:${kg(g)}`}function kg(A){return A<10?`0${A}`:A.toString()}var Ng=A=>{const g=A=>g=>{g.preventDefault(),A(g)},I=()=>"number"==typeof A.currentTime?Mg(A.currentTime):"--:--",B=()=>"number"==typeof A.remainingTime?"-"+Mg(A.remainingTime):I(),Q=h((()=>"number"==typeof A.duration?A.markers.filter((g=>g[0]{const g=A.currentTarget.offsetWidth,I=A.currentTarget.getBoundingClientRect(),B=A.clientX-I.left;return 100*Math.max(0,B/g)+"%"},[E,e]=D(!1),i=function(A,g){let I=!0;return function(){if(I){I=!1;for(var B=arguments.length,Q=new Array(B),C=0;CI=!0),g)}}}(A.onSeekClick,50),t=g=>{g.altKey||g.shiftKey||g.metaKey||g.ctrlKey||0!==g.button||(e(!0),A.onSeekClick(C(g)))},o=A=>{A.altKey||A.shiftKey||A.metaKey||A.ctrlKey||E()&&i(C(A))},s=()=>{e(!1)},n=g((A=>{A.stopPropagation()}));return document.addEventListener("mouseup",s),M((()=>{document.removeEventListener("mouseup",s)})),(()=>{const C=yg.cloneNode(!0),E=C.firstChild,e=E.firstChild,i=e.nextSibling,s=E.nextSibling,r=A.ref;return"function"==typeof r?$(r,C):A.ref=C,AA(C,b(j,{get when(){return A.isPausable},get children(){const I=hg.cloneNode(!0);return P(I,"click",g(A.onPlayClick),!0),AA(I,b(T,{get children(){return[b(Z,{get when(){return A.isPlaying},get children(){return Dg.cloneNode(!0)}}),b(Z,{get when(){return!A.isPlaying},get children(){return wg.cloneNode(!0)}})]}})),I}}),E),AA(e,I),AA(i,B),AA(C,b(j,{get when(){return"number"==typeof A.progress||A.isSeekable},get children(){const I=lg.cloneNode(!0),B=I.firstChild,C=B.firstChild.firstChild;return B.$$mousemove=o,B.$$mousedown=t,AA(B,b(v,{get each(){return Q()},children:(I,B)=>(()=>{const Q=Gg.cloneNode(!0),C=Q.firstChild,E=C.nextSibling;var e;return P(Q,"mousedown",n,!0),P(Q,"click",(e=B(),g((()=>{A.onSeekClick({marker:e})}))),!0),AA(E,(()=>(A=>""===A[1]?Mg(A[0]):`${Mg(A[0])} - ${A[1]}`)(I))),w((g=>{const B=(g=>g[0]/A.duration*100+"%")(I),E=!!(g=>"number"==typeof A.currentTime&&g[0]<=A.currentTime)(I);return B!==g._v$&&Q.style.setProperty("left",g._v$=B),E!==g._v$2&&C.classList.toggle("ap-marker-past",g._v$2=E),g}),{_v$:void 0,_v$2:void 0}),Q})()}),null),w((g=>_(C,{width:"100%",transform:`scaleX(${A.progress||0}`,"transform-origin":"left center"},g))),I}}),s),P(s,"click",g(A.onFullscreenClick),!0),w((()=>C.classList.toggle("ap-seekable",!!A.isSeekable))),C})()};z(["click","mousedown","mousemove"]);const ug=X('
💥
');var Fg=A=>ug.cloneNode(!0);const dg=X('
');var fg=A=>dg.cloneNode(!0);const Yg=X('
Stream offline
');var Rg=A=>(()=>{const g=Yg.cloneNode(!0),I=g.firstChild;return w((g=>_(I,{"font-family":A.fontFamily},g))),g})();const Jg=X('
');var pg=A=>(()=>{const g=Jg.cloneNode(!0);var I;return P(g,"click",(I=A.onClick,A=>{A.preventDefault(),I(A)}),!0),g})();z(["click"]);const Sg=X('
');var Lg=A=>{const g=A.logger,I=A.core,B=A.autoPlay,[Q,C]=Cg({coreState:"stopped",lines:[],cursor:void 0,charW:A.charW,charH:A.charH,bordersW:A.bordersW,bordersH:A.bordersH,containerW:0,containerH:0,showStartOverlay:!B,isPausable:!0,isSeekable:!0,isFullscreen:!1,currentTime:null,remainingTime:null,progress:null,blink:!0,cursorHold:!1}),[E,e]=D({cols:A.cols,rows:A.rows}),[i,t]=D(void 0),[o,s]=Cg([]),[n,r]=D(!1),a=()=>E().cols||80,c=()=>E().rows||24,y=()=>!1===A.controls?0:32;let k,N,u,F,d,f,Y,R,J;function p(){gA(),X(),z()}function S(A){A.rows{let{cols:g,rows:I,duration:B,poster:Q,markers:C}=A;S({cols:g,rows:I}),t(B),s(C),L(Q)})),I.addEventListener("play",(()=>{C("showStartOverlay",!1)})),I.addEventListener("playing",(()=>{C("coreState","playing"),H(),P(),O()})),I.addEventListener("stopped",(()=>{C("coreState","stopped"),p()})),I.addEventListener("loading",(()=>{C("coreState","loading"),p()})),I.addEventListener("offline",(()=>{C("coreState","offline"),p()})),I.addEventListener("errored",(()=>{C({coreState:"errored",showStartOverlay:!1})})),I.addEventListener("resize",S),I.addEventListener("reset",(A=>{S(A),H()})),I.addEventListener("seeked",(()=>{z()})),I.addEventListener("terminalUpdate",(()=>{void 0===k&&(k=requestAnimationFrame(H))}));const U=()=>{J=new ResizeObserver(function(A,g){let I;return function(){for(var B=arguments.length,Q=new Array(B),C=0;CA.apply(this,Q)),g)}}((A=>{C({containerW:d.offsetWidth,containerH:d.offsetHeight}),d.dispatchEvent(new CustomEvent("resize",{detail:{el:f}}))}),10)),J.observe(d)};G((async()=>{g.info("player mounted"),g.debug("font measurements",{charW:Q.charW,charH:Q.charH}),U();const{isPausable:A,isSeekable:E,poster:e}=await I.init();C({isPausable:A,isSeekable:E,containerW:d.offsetWidth,containerH:d.offsetHeight}),L(e),B&&I.play()})),M((()=>{I.stop(),gA(),X(),J.disconnect()}));const H=()=>{const A=I.getChangedLines();A&&l((()=>{A.forEach(((A,g)=>{C("lines",g,ig(A))}))})),C("cursor",ig(I.getCursor())),C("cursorHold",!0),k=void 0},K=h((()=>{g.debug(`containerW = ${Q.containerW}`);const I=Q.charW*a()+Q.bordersW,B=Q.charH*c()+Q.bordersH;let C=A.fit??"width";if("both"===C||Q.isFullscreen){C=Q.containerW/(Q.containerH-y())>I/B?"height":"width"}if(!1===C||"none"===C)return{};if("width"===C){const A=Q.containerW/I;return{scale:A,width:Q.containerW,height:B*A+y()}}if("height"===C){const A=(Q.containerH-y())/B;return{scale:A,width:I*A,height:Q.containerH}}throw`unsupported fit mode: ${C}`})),m=()=>{C("isFullscreen",document.fullscreenElement??document.webkitFullscreenElement)},q=()=>{Q.isFullscreen?(document.exitFullscreen??document.webkitExitFullscreen??(()=>{})).apply(document):(d.requestFullscreen??d.webkitRequestFullscreen??(()=>{})).apply(d)},v=A=>{if(!(A.altKey||A.metaKey||A.ctrlKey))if(A.shiftKey){if("ArrowLeft"==A.key)I.seek("<<<");else{if("ArrowRight"!=A.key)return;I.seek(">>>")}A.preventDefault()}else{if(" "==A.key)I.togglePlay();else if("."==A.key)I.step(),z();else if("f"==A.key)q();else if("ArrowLeft"==A.key)I.seek("<<");else if("ArrowRight"==A.key)I.seek(">>");else if("["==A.key)I.seek({marker:"prev"});else if("]"==A.key)I.seek({marker:"next"});else{if(!(A.key.charCodeAt(0)>=48&&A.key.charCodeAt(0)<=57))return;{const g=(A.key.charCodeAt(0)-48)/10;I.seek(100*g+"%")}}A.preventDefault()}},x=()=>{Q.isFullscreen&&IA(!0)},W=()=>{Q.isFullscreen||IA(!1)},O=()=>{u=setInterval(z,100)},X=()=>{clearInterval(u)},z=()=>{const A=I.getCurrentTime(),g=I.getRemainingTime(),B=I.getProgress();C({currentTime:A,remainingTime:g,progress:B})},P=()=>{F=setInterval((()=>{C((A=>{const g={blink:!A.blink};return g.blink&&(g.cursorHold=!1),g}))}),500)},gA=()=>{clearInterval(F),C("blink",!0)},IA=A=>{clearTimeout(N),A&&(N=setTimeout((()=>IA(!1)),2e3)),r(A)},BA=(()=>{const g=Sg.cloneNode(!0),B=g.firstChild;"function"==typeof d?$(d,g):d=g,g.addEventListener("webkitfullscreenchange",m),g.addEventListener("fullscreenchange",m),g.$$mousemove=x,g.$$keydown=v,g.addEventListener("keypress",v);return"function"==typeof f?$(f,B):f=B,B.$$mousemove=()=>IA(!0),B.addEventListener("mouseleave",W),AA(B,b(cg,{get cols(){return a()},get rows(){return c()},get scale(){return K()?.scale},get blink(){return Q.blink},get lines(){return Q.lines},get cursor(){return Q.cursor},get cursorHold(){return Q.cursorHold},get fontFamily(){return A.terminalFontFamily},get lineHeight(){return A.terminalLineHeight},ref(A){"function"==typeof Y?Y(A):Y=A}}),null),AA(B,b(j,{get when(){return!1!==A.controls},get children(){return b(Ng,{get duration(){return i()},get currentTime(){return Q.currentTime},get remainingTime(){return Q.remainingTime},get progress(){return Q.progress},markers:o,get isPlaying(){return"playing"==Q.coreState},get isPausable(){return Q.isPausable},get isSeekable(){return Q.isSeekable},onPlayClick:()=>I.togglePlay(),onFullscreenClick:q,onSeekClick:A=>I.seek(A),ref(A){"function"==typeof R?R(A):R=A}})}}),null),AA(B,b(T,{get children(){return[b(Z,{get when(){return Q.showStartOverlay},get children(){return b(pg,{onClick:()=>I.play()})}}),b(Z,{get when(){return"loading"==Q.coreState},get children(){return b(fg,{})}}),b(Z,{get when(){return"offline"==Q.coreState},get children(){return b(Rg,{get fontFamily(){return A.terminalFontFamily}})}}),b(Z,{get when(){return"errored"==Q.coreState},get children(){return b(Fg,{})}})]}}),null),w((I=>{const Q=!!(!0===A.controls||"auto"===A.controls&&n()),C=`ap-player asciinema-theme-${A.theme??"asciinema"}`,E=(()=>{const g={};!1!==A.fit&&"none"!==A.fit||void 0===A.terminalFontSize||("small"===A.terminalFontSize?g["font-size"]="12px":"medium"===A.terminalFontSize?g["font-size"]="18px":"big"===A.terminalFontSize?g["font-size"]="24px":g["font-size"]=A.terminalFontSize);const I=K();return void 0!==I.width&&(g.width=`${I.width}px`,g.height=`${I.height}px`),g})();return Q!==I._v$&&g.classList.toggle("ap-hud",I._v$=Q),C!==I._v$2&&V(B,I._v$2=C),I._v$3=_(B,E,I._v$3),I}),{_v$:void 0,_v$2:void 0,_v$3:void 0}),g})();return BA};z(["keydown","mousemove"]);class Ug{log(){}debug(){}info(){}warn(){}error(){}}class Hg{constructor(A,g){this.logger=A,this.prefix=g}log(A){for(var g=arguments.length,I=new Array(g>1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;BI=>{g(A(I))}}(A))}flatMap(A){return this.transform(function(A){return g=>I=>{A(I).forEach(g)}}(A))}filter(A){return this.transform(function(A){return g=>I=>{A(I)&&g(I)}}(A))}take(A){return this.transform(function(A){let g=0;return I=>B=>{gB=>{g+=1,g>A&&I(B)}}(A))}transform(A){return new Kg(this.input,this.xfs.concat([A]))}multiplex(A,g){return new Kg(new qg(this[Symbol.iterator](),A[Symbol.iterator](),g))}toArray(){return Array.from(this)}[Symbol.iterator](){let A=0,g=[],I=!1;const B=(Q=this.xfs,C=A=>g.push(A),Q.reverse().reduce(((A,g)=>{const I=mg(g(A.step));return{step:I.step,flush:()=>{I.flush(),A.flush()}}}),mg(C)));var Q,C;return{next:()=>{for(A===g.length&&(g=[],A=0);0===g.length;){const A=this.input.next();if(A.done)break;B.step(A.value)}return 0!==g.length||I||(B.flush(),I=!0),g.length>0?{done:!1,value:g[A++]}:{done:!0}}}}}function mg(A){return"function"==typeof A?{step:A,flush:()=>{}}:A}class qg{constructor(A,g,I){this.left=A,this.right=g,this.comparator=I}[Symbol.iterator](){let A,g;return{next:()=>{if(void 0===A&&void 0!==this.left){const g=this.left.next();g.done?this.left=void 0:A=g.value}if(void 0===g&&void 0!==this.right){const A=this.right.next();A.done?this.right=void 0:g=A.value}if(void 0===A&&void 0===g)return{done:!0};if(void 0===A){const A=g;return g=void 0,{done:!1,value:A}}if(void 0===g){const g=A;return A=void 0,{done:!1,value:g}}if(this.comparator(A,g)){const g=A;return A=void 0,{done:!1,value:g}}{const A=g;return g=void 0,{done:!1,value:A}}}}}}async function bg(A){let g,I;if(A instanceof Response){const B=await A.text(),Q=function(A){const g=A.split("\n");let I;try{I=JSON.parse(g[0])}catch(A){return}const B=new Kg(g).drop(1).filter((A=>"["===A[0])).map(JSON.parse).toArray();return{header:I,events:B}}(B);void 0!==Q?(g=Q.header,I=Q.events):g=JSON.parse(B)}else if("object"==typeof A&&"number"==typeof A.version)g=A;else{if(!Array.isArray(A))throw"invalid data";g=A[0],I=A.slice(1,A.length)}if(1===g.version)return function(A){let g=0;const I=new Kg(A.stdout).map((A=>(g+=A[0],[g,"o",A[1]])));return{cols:A.width,rows:A.height,events:I}}(g);if(2===g.version)return function(A,g){return{cols:A.width,rows:A.height,events:g,idleTimeLimit:A.idle_time_limit}}(g,I);throw`asciicast v${g.version} format not supported`}function vg(A){if("r"===A[1]){const[g,I]=A[2].split("x");return[A[0],"o",`[8;${I};${g};t`]}return A}function xg(A){return"number"==typeof A?[A,"m",""]:[A[0],"m",A[1]]}function jg(){let A=0;return function(g){return"m"===g[1]?[g[0],g[1],{index:A++,time:g[0],label:g[2]}]:g}}class Tg{constructor(){this.items=[],this.onPush=void 0}push(A){this.items.push(A),void 0!==this.onPush&&(this.onPush(this.popAll()),this.onPush=void 0)}popAll(){if(this.items.length>0){const A=this.items;return this.items=[],A}{const A=this;return new Promise((g=>{A.onPush=g}))}}}function Zg(A,g,I,B,Q){return I>0?function(A,g,I,B){let Q=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1/60;const C=new Tg,E=Wg();let e=!1,i=-Q;return setTimeout((async()=>{for(;!e;){const t=await C.popAll();if(e)return;for(const C of t){const t=C[0]-B+I;if(t-i0&&(await Og(o),e))return;g(C[0]),A(C[2]),i=t}}}),0),{pushEvent(A){if("o"===A[1])C.push(A);else if("r"===A[1]){const[g,I]=A[2].split("x");C.push([A[0],"o",`[8;${I};${g};t`])}},pushText(A){const g=(Wg()-E)/1e3;C.push([g,"o",A])},stop(){e=!0,C.push(void 0)}}}(A,g,I,B??0,Q):function(A){return{pushEvent(g){"o"===g[1]&&A(g[2])},pushText(g){A(g)},stop(){}}}(A)}function Wg(){return(new Date).getTime()}function Og(A){return new Promise((g=>{setTimeout(g,1e3*A)}))}function Xg(A){return Math.min(500*Math.pow(2,A),5e3)}function zg(A){if(A.length<13)return;const g=function(A){const g=Vg(A.subarray(0,4)),I=Vg(A.subarray(4,8));return g+I/1e6}(A.subarray(0,8)),I=Vg(A.subarray(8,12));return{time:g,data:A.subarray(12,12+I),len:I+12}}function Vg(A){return A[0]+256*A[1]+256*A[2]*256+256*A[3]*256*256}const Pg=new Map([["benchmark",function(A,g){let I,{url:B,iterations:Q=10}=A,{feed:C,now:E}=g,e=0;return{async init(){const A=await bg(await fetch(B)),{cols:g,rows:Q,events:C}=A;I=Array.from(C).filter((A=>{let[g,I,B]=A;return"o"===I})).map((A=>{let[g,I,B]=A;return[g,B]}));const E=I[I.length-1][0];for(const[A,g]of I)e+=new Blob([g]).size;return{cols:g,rows:Q,duration:E}},play(){const A=E();for(let A=0;A{const A=new Date,g=A.getHours(),I=A.getMinutes(),E=[];E.push("\r");for(let A=0;A{r().forEach(E)};return{init:()=>{const A=[s].concat(r());return{cols:e,rows:i,duration:1440,poster:A}},play:()=>(E(s),a(),n=setInterval(a,1e3),!0),stop:()=>{clearInterval(n)},getCurrentTime:()=>{const A=new Date;return 60*A.getHours()+A.getMinutes()}}}],["eventsource",function(A,g){let I,B,{url:Q,bufferTime:C=.1,minFrameTime:E}=A,{feed:e,reset:i,setState:t,logger:o}=g;o=new Hg(o,"eventsource: ");let s=new UA;function n(A){void 0!==B&&B.stop(),B=Zg(e,(A=>s.setTime(A)),C,A,E)}return{play:()=>{I=new EventSource(Q),I.addEventListener("open",(()=>{o.info("opened"),n()})),I.addEventListener("error",(A=>{o.info("errored"),o.debug({e:A}),t("loading")})),I.addEventListener("message",(A=>{const g=JSON.parse(A.data);if(Array.isArray(g))B.pushEvent(g);else if(void 0!==g.cols||void 0!==g.width){const A=g.cols??g.width,I=g.rows??g.height;o.debug(`vt reset (${A}x${I})`),t("playing"),n(g.time),i(A,I,g.init??void 0),s=new LA,"number"==typeof g.time&&s.setTime(g.time)}else"offline"===g.state&&(o.info("stream offline"),t("offline"),s=new UA)})),I.addEventListener("done",(()=>{o.info("closed"),I.close(),t("stopped",{reason:"ended"})}))},stop:()=>{void 0!==B&&B.stop(),void 0!==I&&I.close()},getCurrentTime:()=>s.getTime()}}],["random",function(A,g){let{feed:I,setTimeout:B}=g;const Q=" ".charCodeAt(0),C="~".charCodeAt(0)-Q;let E;const e=()=>{const A=Math.pow(5,4*Math.random());E=B(i,A)},i=()=>{e();const A=String.fromCharCode(Q+Math.floor(Math.random()*C));I(A)};return()=>(e(),()=>clearInterval(E))}],["recording",function(A,g,I){let B,Q,C,E,e,i,t,o,s,{feed:n,onInput:r,onMarker:a,now:c,setTimeout:D,setState:w,logger:h}=g,{idleTimeLimit:l,startAt:y,loop:G,posterTime:M,markers:k,pauseOnMarkers:N,cols:u,rows:F}=I,d=0,f=0,Y=0;async function R(A,g){const I=await fetch(A,g);if(!I.ok)throw`failed fetching recording from ${A}: ${I.status} ${I.statusText}`;return I}function J(){const A=C[d];A?t=D(p,function(A){let g=1e3*A-(c()-o);return g<0&&(g=0),g}(A[0])):(S(),Y++,!0===G||"number"==typeof G&&Y1e3*g[0]);J()}function S(){clearTimeout(t),t=null}function L(A){const[g,I,B]=A;if("o"===I)n(B);else if("i"===I)r(B);else if("m"===I&&(a(B),N))return U(),s=1e3*g,w("stopped",{reason:"paused"}),!0;return!1}function U(){return!t||(S(),s=c()-o,!0)}function H(){o=c()-s,s=null,J()}function K(A){const g=!!t;U();const I=(s??0)/1e3;if("string"==typeof A)"<<"===A?A=I-5:">>"===A?A=I+5:"<<<"===A?A=I-.1*e:">>>"===A?A=I+.1*e:"%"===A[A.length-1]&&(A=parseFloat(A.substring(0,A.length-1))/100*e);else if("object"==typeof A)if("prev"===A.marker)A=m(I)??0,g&&I-A<1&&(A=m(A)??0);else if("next"===A.marker)A=function(A){if(0==E.length)return;let g,I=E.length-1,B=E[I];for(;B&&B[0]>A;)g=B[0],B=E[--I];return g}(I)??e;else if("number"==typeof A.marker){const g=E[A.marker];if(void 0===g)throw`invalid marker index: ${A.marker}`;A=g[0]}const B=Math.min(Math.max(A,0),e);B[A[0],"o",A[1]])),C=new Kg(I).map((A=>[A[0],"i",A[1]])),E=new Kg(B).map(xg);return Q.multiplex(C,((A,g)=>A[0]A[0]1&&void 0!==arguments[1]?arguments[1]:1/60;return B=>{let Q=0,C=0;return{step:A=>{Q++,void 0!==g?A[1]===g[1]&&A[0]-g[0]{void 0!==g&&(B(g),C++),A.debug(`batched ${Q} frames to ${C} frames`)}}}}(g,C)).map(function(A,g,I){let B=0,Q=0;return function(C){const E=C[0]-B-A;return B=C[0],E>0&&(Q+=E,C[0]"m"!==A[1])).multiplex(e,((A,g)=>A[0]"i"===A[1]?[A[0]+E,A[1],A[2]]:A)),i.sort(((A,g)=>A[0]-g[0])));const o=i[i.length-1][0],s=B-t.offset;return{...A,events:i,duration:o,effectiveStartAt:s}}(await g(await function(A){let{url:g,data:I,fetchOpts:B={}}=A;if("string"==typeof g)return R(g,B);if(Array.isArray(g))return Promise.all(g.map((A=>R(A,B))));if(void 0!==I)return"function"==typeof I&&(I=I()),I instanceof Promise||(I=Promise.resolve(I)),I.then((A=>"string"==typeof A||A instanceof ArrayBuffer?new Response(A):A));throw"failed fetching recording file: url/data missing in src"}(A),{encoding:s}),h,{idleTimeLimit:l,startAt:y,minFrameTime:I,inputOffset:t,markers_:k});if(({cols:B,rows:Q,events:C,duration:e,effectiveStartAt:i}=n),u=u??B,F=F??Q,0===C.length)throw"recording is missing events";void 0!==o&&function(A,g){const I=document.createElement("a"),B=A.events.map((A=>"m"===A[1]?[A[0],A[1],A[2].label]:A)),Q=function(A){return`${JSON.stringify({version:2,width:A.cols,height:A.rows})}\n${A.events.map(JSON.stringify).join("\n")}\n`}({...A,events:B});I.href=URL.createObjectURL(new Blob([Q],{type:"text/plain"})),I.download=g,I.click()}(n,o);const r=void 0!==M?(a=M,C.filter((A=>A[0]A[2]))):void 0;var a;return E=C.filter((A=>"m"===A[1])).map((A=>[A[0],A[2].label])),{cols:B,rows:Q,duration:e,poster:r,markers:E}},play:function(){return t||(void 0===C[d]&&(i=0),null!==i&&K(i),H()),!0},pause:U,seek:K,step:function(){let A=C[d++];for(;void 0!==A&&"o"!==A[1];)A=C[d++];if(void 0===A)return;n(A[2]);const g=A[0];f=g,s=1e3*g,i=null},stop:U,getCurrentTime:function(){return t?(c()-o)/1e3:(s??0)/1e3}}}],["websocket",function(A,g){let{url:I,bufferTime:B=.1,reconnectDelay:Q=Xg,minFrameTime:C}=A,{feed:E,reset:e,setState:i,logger:t}=g;t=new Hg(t,"websocket: ");const o=new TextDecoder;let s,n,r,a=new UA,c=0,D=!1;function w(A){void 0!==n&&n.stop(),n=Zg(E,(A=>a.setTime(A)),B,A,C)}function h(A){if("string"==typeof A.data)t.info("activating asciicast-compatible handler"),s.onmessage=l,l(A);else{const g=new Uint8Array(A.data);if(65==g[0]&&76==g[1]&&105==g[2]&&83==g[3])if(1==g[4]){t.info("activating ALiS v1 handler");const A=g[5];0==A?t.debug("text compression: none"):(t.error(`unsupported compression algorithm (${A})`),s.close()),s.onmessage=y}else t.warn(`unsupported ALiS version (${g[4]})`),s.close();else{t.info("activating raw text handler");const I=o.decode(g),B=function(A){const g=A.match(/\x1b\[8;(\d+);(\d+)t/);if(null!==g)return[parseInt(g[2],10),parseInt(g[1],10)]}(I)??function(A){const g=A.match(/\[.*COLUMNS="(\d{1,3})" LINES="(\d{1,3})".*\]/);if(null!==g)return[parseInt(g[1],10),parseInt(g[2],10)]}(I);if(void 0!==B){const[A,g]=B;M(A,g,0,void 0)}s.onmessage=G,G(A)}}}function l(A){const g=JSON.parse(A.data);Array.isArray(g)?n.pushEvent(g):void 0!==g.cols||void 0!==g.width?M(g.cols??g.width,g.rows??g.height,g.time,g.init??void 0):"offline"===g.status&&k()}function y(A){const g=A.data,I=new DataView(g),B=I.getUint8(0);if(1===B){const A=I.getUint16(1,!0),B=I.getUint16(3,!0),Q=I.getFloat32(5,!0),C=I.getUint32(9,!0);M(A,B,Q,C>0?o.decode(new Uint8Array(g,13,C)):void 0)}else if(111===B){const A=I.getFloat32(1,!0),B=I.getUint32(5,!0),Q=o.decode(new Uint8Array(g,9,B));n.pushEvent([A,"o",Q])}else if(114===B){const A=I.getFloat32(1,!0),g=I.getUint16(5,!0),B=I.getUint16(7,!0);n.pushEvent([A,"r",`${g}x${B}`])}else 4===B?k():t.debug(`unknown frame type: ${B}`)}function G(A){n.pushText(o.decode(A.data))}function M(A,g,I,B){t.debug(`stream reset (${A}x${g} @${I})`),i("playing"),w(I),e(A,g,B),a=new LA,"number"==typeof I&&a.setTime(I)}function k(){t.info("stream offline"),i("offline"),a=new UA}function N(){s=new WebSocket(I),s.binaryType="arraybuffer",s.onopen=()=>{t.info("opened"),w(),r=setTimeout((()=>{c=0}),1e3)},s.onmessage=h,s.onclose=A=>{if(D||1e3===A.code||1005===A.code)t.info("closed"),i("stopped",{reason:"ended"});else{clearTimeout(r);const A=Q(c++);t.info(`unclean close, reconnecting in ${A}...`),i("loading"),setTimeout(N,A)}}}return{play:()=>{N()},stop:()=>{D=!0,void 0!==n&&n.stop(),void 0!==s&&s.close()},getCurrentTime:()=>a.getTime()}}]]),_g=new Map([["asciicast",bg],["typescript",async function(A,g){let{encoding:I}=g;const B=new TextDecoder(I);let Q,C,E=(await A[0].text()).split("\n").filter((A=>A.length>0)).map((A=>A.split(" ")));E[0].length<3&&(E=E.map((A=>["O",A[0],A[1]])));const e=await A[1].arrayBuffer(),i=new Uint8Array(e),t=i.findIndex((A=>10==A))+1,o=B.decode(i.subarray(0,t)).match(/COLUMNS="(\d+)" LINES="(\d+)"/);null!==o&&(Q=parseInt(o[1],10),C=parseInt(o[2],10));const s={array:i,cursor:t};let n=s;if(void 0!==A[2]){const g=await A[2].arrayBuffer();n={array:new Uint8Array(g),cursor:t}}const r=[];let a=0;for(const A of E)if(a+=parseFloat(A[1]),"O"===A[0]){const g=parseInt(A[2],10),I=s.array.subarray(s.cursor,s.cursor+g),Q=B.decode(I);r.push([a,"o",Q]),s.cursor+=g}else if("I"===A[0]){const g=parseInt(A[2],10),I=n.array.subarray(n.cursor,n.cursor+g),Q=B.decode(I);r.push([a,"i",Q]),n.cursor+=g}else if("S"===A[0]&&"SIGWINCH"===A[2]){const g=parseInt(A[4].slice(5),10),I=parseInt(A[3].slice(5),10);r.push([a,"r",`${g}x${I}`])}else"H"===A[0]&&"COLUMNS"===A[2]?Q=parseInt(A[3],10):"H"===A[0]&&"LINES"===A[2]&&(C=parseInt(A[3],10));return Q=Q??80,C=C??24,{cols:Q,rows:C,events:r}}],["ttyrec",async function(A,g){let{encoding:I}=g;const B=new TextDecoder(I),Q=await A.arrayBuffer(),C=new Uint8Array(Q),E=zg(C),e=E.time,i=B.decode(E.data).match(/\x1b\[8;(\d+);(\d+)t/),t=[];let o=80,s=24;null!==i&&(o=parseInt(i[2],10),s=parseInt(i[1],10));let n=0,r=zg(C);for(;void 0!==r;){const A=r.time-e,g=B.decode(r.data);t.push([A,"o",g]),n+=r.len,r=zg(C.subarray(n))}return{cols:o,rows:s,events:t}}]]);return A.create=function(A,g){let I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const B=I.logger??new Ug,Q=new TA(function(A){if("function"==typeof A)return A;"string"==typeof A&&(A="ws://"==A.substring(0,5)||"wss://"==A.substring(0,6)?{driver:"websocket",url:A}:"clock:"==A.substring(0,6)?{driver:"clock"}:"random:"==A.substring(0,7)?{driver:"random"}:"benchmark:"==A.substring(0,10)?{driver:"benchmark",url:A.substring(10)}:{driver:"recording",url:A});void 0===A.driver&&(A.driver="recording");if("recording"==A.driver&&(void 0===A.parser&&(A.parser="asciicast"),"string"==typeof A.parser)){if(!_g.has(A.parser))throw`unknown parser: ${A.parser}`;A.parser=_g.get(A.parser)}if(Pg.has(A.driver)){const g=Pg.get(A.driver);return(I,B)=>g(A,I,B)}throw`unsupported driver: ${JSON.stringify(A)}`}(A),{logger:B,cols:I.cols,rows:I.rows,loop:I.loop,speed:I.speed,preload:I.preload,startAt:I.startAt,poster:I.poster,markers:I.markers,pauseOnMarkers:I.pauseOnMarkers,idleTimeLimit:I.idleTimeLimit}),C=function(A,g){const I=80,B=24,Q=document.createElement("div");let C;Q.style.height="0px",Q.style.overflow="hidden",Q.style.fontSize="15px",document.body.appendChild(Q);const E=O((()=>(C=b(cg,{cols:I,rows:B,lineHeight:g,fontFamily:A,lines:[]}),C)),Q),e={charW:C.clientWidth/I,charH:C.clientHeight/B,bordersW:C.offsetWidth-C.clientWidth,bordersH:C.offsetHeight-C.clientHeight};return E(),document.body.removeChild(Q),e}(I.terminalFontFamily,I.terminalLineHeight),E={logger:B,core:Q,cols:I.cols,rows:I.rows,fit:I.fit,controls:I.controls??"auto",autoPlay:I.autoPlay??I.autoplay,terminalFontSize:I.terminalFontSize,terminalFontFamily:I.terminalFontFamily,terminalLineHeight:I.terminalLineHeight,theme:I.theme,...C};let e;const i=O((()=>(e=b(Lg,E),e)),g),t={el:e,dispose:i,getCurrentTime:()=>Q.getCurrentTime(),getDuration:()=>Q.getDuration(),play:()=>Q.play(),pause:()=>Q.pause(),seek:A=>Q.seek(A),addEventListener:(A,g)=>Q.addEventListener(A,g.bind(t))};return t},A}({}); diff --git a/docs/quickstart.md b/docs/quickstart.md new file mode 100644 index 0000000..6cb1d9d --- /dev/null +++ b/docs/quickstart.md @@ -0,0 +1,101 @@ +# Quickstart + +Depending on your development workflow, Code Limit can run as: + +- [Pre-commit hook](#pre-commit-hook) +- [GitHub Action](#github-action) +- Standalone + - [Homebrew](#homebrew-install) + - [Pipx](#pipx-install) + - [Pypi](#pypi-install) + - [Platform binary](#platform-binaries) + +## Pre-commit hook + +Code Limit can be installed as a [pre-commit](https://pre-commit.com/) hook so +it alarms you during development when it's time to refactor: + +```yaml +- repo: https://github.com/getcodelimit/codelimit + rev: 0.6.2 + hooks: + - id: codelimit +``` + +Code Limit is intended to be used alongside formatting, linters and other hooks +that improve the consistency and quality of your code (such as +[Black](https://github.com/psf/black), +[Ruff](https://github.com/astral-sh/ruff) and +[MyPy](https://github.com/python/mypy).) As an example pre-commit configuration +see the +[`pre-commit-config.yaml`](https://github.com/getcodelimit/codelimit/blob/main/.pre-commit-config.yaml) +from Code Limit itself. + +When running as a hook, Code Limit *warns* about functions that *should* be +refactored and *fails* for functions that *need* to be refactord. + +## GitHub Action + +Code Limit is available as a GitHub Action + +When running as a GitHub Action, Code Limit only checks modified files and +*warns* about functions that *should* be refactored and *fails* for functions +that *need* to be refactored. + +To run Code Limit on every push and before every merge to `main`, append it to +your GH Action workflow: + +```yaml +name: 'main' +on: + push: + branches: main + pull_request: + branches: main +jobs: + ci: + runs-on: ubuntu-latest + steps: + - name: 'Checkout' + uses: actions/checkout@v2 + - name: 'Run Code Limit' + uses: getcodelimit/codelimit-action@main +``` + +## Standalone + +Code Limit can also run as a standalone program. + +### Homebrew install + +Code Limit is available on +[Homebrew](https://formulae.brew.sh/formula/codelimit): + +```shell +brew install codelimit +``` + +### Pipx install + +To install the standalone version of Code Limit in an isolated Python +environment using [pipx](https://pypa.github.io/pipx) run: + +``` +pipx install codelimit +``` + +### PyPi install + +To install the standalone version of Code Limit for your default Python +installation run: + +```shell +python -m pip install codelimit +``` + +### Platform binaries + +Binaries for different platforms (macOS, Linux, Windows) are available on the +[latest release +page](https://github.com/getcodelimit/codelimit/releases/latest). + diff --git a/docs/stylesheets/asciinema-player.css b/docs/stylesheets/asciinema-player.css new file mode 100644 index 0000000..e7b48cb --- /dev/null +++ b/docs/stylesheets/asciinema-player.css @@ -0,0 +1,2835 @@ +div.ap-wrapper { + outline: none; + height: 100%; + display: flex; + justify-content: center; +} +div.ap-wrapper .title-bar { + display: none; + top: -78px; + transition: top 0.15s linear; + position: absolute; + left: 0; + right: 0; + box-sizing: content-box; + font-size: 20px; + line-height: 1em; + padding: 15px; + font-family: sans-serif; + color: white; + background-color: rgba(0, 0, 0, 0.8); +} +div.ap-wrapper .title-bar img { + vertical-align: middle; + height: 48px; + margin-right: 16px; +} +div.ap-wrapper .title-bar a { + color: white; + text-decoration: underline; +} +div.ap-wrapper .title-bar a:hover { + text-decoration: none; +} +div.ap-wrapper:fullscreen { + background-color: #000; + width: 100%; + align-items: center; +} +div.ap-wrapper:fullscreen div.ap-player { + position: static; +} +div.ap-wrapper:fullscreen .title-bar { + display: initial; +} +div.ap-wrapper:fullscreen.hud .title-bar { + top: 0; +} +div.ap-wrapper div.ap-player { + text-align: left; + display: inline-block; + padding: 0px; + position: relative; + box-sizing: content-box; + overflow: hidden; + max-width: 100%; + border-radius: 4px; + font-size: 15px; +} +pre.ap-terminal { + box-sizing: content-box; + overflow: hidden; + padding: 0; + margin: 0px; + display: block; + white-space: pre; + word-wrap: normal; + word-break: normal; + border-radius: 0; + border-style: solid; + cursor: text; + border-width: 0.75em; + font-family: Consolas, Menlo, 'Bitstream Vera Sans Mono', monospace, 'Powerline Symbols'; + font-variant-ligatures: none; +} +pre.ap-terminal .ap-line { + letter-spacing: normal; + overflow: hidden; +} +pre.ap-terminal .ap-line span { + padding: 0; + display: inline-block; + height: 100%; +} +pre.ap-terminal .ap-line { + display: block; + width: 200%; +} +pre.ap-terminal .ap-line .ap-cursor-a { + display: inline-block; +} +pre.ap-terminal .ap-line .ap-cursor-b { + display: none; + border-radius: 0.05em; +} +pre.ap-terminal .ap-line .ap-blink { + visibility: hidden; +} +pre.ap-terminal.ap-cursor .ap-line .ap-cursor-a { + display: none; +} +pre.ap-terminal.ap-cursor .ap-line .ap-cursor-b { + display: inline-block; +} +pre.ap-terminal.ap-blink .ap-line .ap-blink { + visibility: visible; +} +pre.ap-terminal .ap-bright { + font-weight: bold; +} +pre.ap-terminal .ap-faint { + opacity: 0.5; +} +pre.ap-terminal .ap-underline { + text-decoration: underline; +} +pre.ap-terminal .ap-italic { + font-style: italic; +} +pre.ap-terminal .ap-strikethrough { + text-decoration: line-through; +} +div.ap-player div.ap-control-bar { + width: 100%; + height: 32px; + display: flex; + justify-content: space-between; + align-items: stretch; + background: linear-gradient(to bottom, rgba(0, 0, 0, 0.5) 0%, #000000 25%, #000000 100%); + color: #bbb; + box-sizing: content-box; + line-height: 1; + position: absolute; + bottom: 0; + left: 0; + opacity: 0; + transition: opacity 0.15s linear; + user-select: none; + z-index: 30; +} +div.ap-player div.ap-control-bar * { + box-sizing: inherit; + font-size: 0; + font-family: Helvetica, Arial, sans-serif; + font-weight: bold; +} +div.ap-control-bar svg.ap-icon path { + fill: #bbb; +} +div.ap-control-bar span.ap-playback-button { + display: block; + flex: 0 0 auto; + cursor: pointer; + height: 12px; + width: 12px; + padding: 10px; +} +div.ap-control-bar span.ap-playback-button svg { + height: 12px; + width: 12px; +} +div.ap-control-bar span.ap-timer { + display: block; + flex: 0 0 auto; + min-width: 50px; + margin: 0 10px; + height: 100%; + text-align: center; + font-size: 11px; + line-height: 34px; + cursor: default; +} +div.ap-control-bar span.ap-timer span { + display: inline-block; + font-size: inherit; +} +div.ap-control-bar span.ap-timer .ap-time-remaining { + display: none; +} +div.ap-control-bar span.ap-timer:hover .ap-time-elapsed { + display: none; +} +div.ap-control-bar span.ap-timer:hover .ap-time-remaining { + display: inline; +} +div.ap-control-bar .ap-progressbar { + display: block; + flex: 1 1 auto; + height: 100%; + padding: 0 10px; +} +div.ap-control-bar .ap-progressbar .ap-bar { + display: block; + position: relative; + cursor: default; + height: 100%; + font-size: 0; +} +div.ap-control-bar .ap-progressbar .ap-bar .ap-gutter { + display: block; + position: absolute; + top: 15px; + left: 0; + right: 0; + height: 3px; + background-color: #333; +} +div.ap-control-bar .ap-progressbar .ap-bar .ap-gutter .ap-gutter-fill { + display: inline-block; + height: 100%; + background-color: #bbb; + border-radius: 3px; + z-index: 10; +} +div.ap-control-bar.ap-seekable .ap-progressbar .ap-bar { + cursor: pointer; +} +div.ap-control-bar .ap-fullscreen-button { + display: block; + flex: 0 0 auto; + width: 14px; + height: 14px; + padding: 9px; + cursor: pointer; +} +div.ap-control-bar .ap-fullscreen-button svg { + width: 14px; + height: 14px; +} +div.ap-control-bar .ap-fullscreen-button svg:first-child { + display: inline; +} +div.ap-control-bar .ap-fullscreen-button svg:last-child { + display: none; +} +div.ap-wrapper.ap-hud .ap-control-bar { + opacity: 1; +} +div.ap-wrapper:fullscreen .ap-fullscreen-button svg:first-child { + display: none; +} +div.ap-wrapper:fullscreen .ap-fullscreen-button svg:last-child { + display: inline; +} +span.ap-progressbar span.ap-marker-container { + display: block; + top: 0; + bottom: 0; + width: 21px; + position: absolute; + margin-left: -10px; + z-index: 9; +} +span.ap-marker-container span.ap-marker { + display: block; + top: 13px; + bottom: 12px; + left: 7px; + right: 7px; + background-color: #555; + position: absolute; + transition: top 0.1s, bottom 0.1s, left 0.1s, right 0.1s, background-color 0.1s; + border-radius: 50%; +} +span.ap-marker-container span.ap-marker.ap-marker-past { + background-color: #bbb; +} +span.ap-marker-container span.ap-marker:hover, +span.ap-marker-container:hover span.ap-marker { + background-color: #bbb; + top: 11px; + bottom: 10px; + left: 5px; + right: 5px; +} +span.ap-marker-container span.ap-marker-tooltip { + visibility: hidden; + background-color: #333; + color: #bbb; + text-align: center; + padding: 2px 8px 0px 8px; + border-radius: 4px; + position: absolute; + z-index: 1; + white-space: nowrap; + /* Prevents the text from wrapping and makes sure the tooltip width adapts to the text length */ + font-size: 11px; + line-height: 2em; + bottom: 100%; + left: 50%; + transform: translateX(-50%); +} +span.ap-marker-container:hover span.ap-marker-tooltip { + visibility: visible; +} +.ap-player .ap-overlay { + z-index: 10; + background-repeat: no-repeat; + background-position: center; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + justify-content: center; + align-items: center; +} +.ap-player .ap-overlay-start { + cursor: pointer; +} +.ap-player .ap-overlay-start .ap-play-button { + font-size: 0px; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + text-align: center; + color: white; + height: 80px; + max-height: 66%; + margin: auto; +} +.ap-player .ap-overlay-start .ap-play-button div { + height: 100%; +} +.ap-player .ap-overlay-start .ap-play-button div span { + height: 100%; + display: block; +} +.ap-player .ap-overlay-start .ap-play-button div span svg { + height: 100%; +} +.ap-player .ap-overlay-loading .ap-loader { + width: 48px; + height: 48px; + border-radius: 50%; + display: inline-block; + position: relative; + border: 10px solid; + border-color: rgba(255, 255, 255, 0.15) rgba(255, 255, 255, 0.25) rgba(255, 255, 255, 0.35) rgba(255, 255, 255, 0.5); + box-sizing: border-box; + animation: ap-loader-rotation 1s linear infinite; +} +.ap-player .ap-overlay-offline span { + font-family: Consolas, Menlo, 'Bitstream Vera Sans Mono', monospace, 'Powerline Symbols'; + font-variant-ligatures: none; + font-size: 2em; +} +.ap-player .ap-overlay-offline span .ap-line { + letter-spacing: normal; + overflow: hidden; +} +.ap-player .ap-overlay-offline span .ap-line span { + padding: 0; + display: inline-block; + height: 100%; +} +.ap-player .ap-overlay-error span { + font-size: 8em; +} +@keyframes ap-loader-rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.ap-terminal .fg-16 { + color: #000000; +} +.ap-terminal .bg-16 { + background-color: #000000; +} +.ap-terminal .fg-17 { + color: #00005f; +} +.ap-terminal .bg-17 { + background-color: #00005f; +} +.ap-terminal .fg-18 { + color: #000087; +} +.ap-terminal .bg-18 { + background-color: #000087; +} +.ap-terminal .fg-19 { + color: #0000af; +} +.ap-terminal .bg-19 { + background-color: #0000af; +} +.ap-terminal .fg-20 { + color: #0000d7; +} +.ap-terminal .bg-20 { + background-color: #0000d7; +} +.ap-terminal .fg-21 { + color: #0000ff; +} +.ap-terminal .bg-21 { + background-color: #0000ff; +} +.ap-terminal .fg-22 { + color: #005f00; +} +.ap-terminal .bg-22 { + background-color: #005f00; +} +.ap-terminal .fg-23 { + color: #005f5f; +} +.ap-terminal .bg-23 { + background-color: #005f5f; +} +.ap-terminal .fg-24 { + color: #005f87; +} +.ap-terminal .bg-24 { + background-color: #005f87; +} +.ap-terminal .fg-25 { + color: #005faf; +} +.ap-terminal .bg-25 { + background-color: #005faf; +} +.ap-terminal .fg-26 { + color: #005fd7; +} +.ap-terminal .bg-26 { + background-color: #005fd7; +} +.ap-terminal .fg-27 { + color: #005fff; +} +.ap-terminal .bg-27 { + background-color: #005fff; +} +.ap-terminal .fg-28 { + color: #008700; +} +.ap-terminal .bg-28 { + background-color: #008700; +} +.ap-terminal .fg-29 { + color: #00875f; +} +.ap-terminal .bg-29 { + background-color: #00875f; +} +.ap-terminal .fg-30 { + color: #008787; +} +.ap-terminal .bg-30 { + background-color: #008787; +} +.ap-terminal .fg-31 { + color: #0087af; +} +.ap-terminal .bg-31 { + background-color: #0087af; +} +.ap-terminal .fg-32 { + color: #0087d7; +} +.ap-terminal .bg-32 { + background-color: #0087d7; +} +.ap-terminal .fg-33 { + color: #0087ff; +} +.ap-terminal .bg-33 { + background-color: #0087ff; +} +.ap-terminal .fg-34 { + color: #00af00; +} +.ap-terminal .bg-34 { + background-color: #00af00; +} +.ap-terminal .fg-35 { + color: #00af5f; +} +.ap-terminal .bg-35 { + background-color: #00af5f; +} +.ap-terminal .fg-36 { + color: #00af87; +} +.ap-terminal .bg-36 { + background-color: #00af87; +} +.ap-terminal .fg-37 { + color: #00afaf; +} +.ap-terminal .bg-37 { + background-color: #00afaf; +} +.ap-terminal .fg-38 { + color: #00afd7; +} +.ap-terminal .bg-38 { + background-color: #00afd7; +} +.ap-terminal .fg-39 { + color: #00afff; +} +.ap-terminal .bg-39 { + background-color: #00afff; +} +.ap-terminal .fg-40 { + color: #00d700; +} +.ap-terminal .bg-40 { + background-color: #00d700; +} +.ap-terminal .fg-41 { + color: #00d75f; +} +.ap-terminal .bg-41 { + background-color: #00d75f; +} +.ap-terminal .fg-42 { + color: #00d787; +} +.ap-terminal .bg-42 { + background-color: #00d787; +} +.ap-terminal .fg-43 { + color: #00d7af; +} +.ap-terminal .bg-43 { + background-color: #00d7af; +} +.ap-terminal .fg-44 { + color: #00d7d7; +} +.ap-terminal .bg-44 { + background-color: #00d7d7; +} +.ap-terminal .fg-45 { + color: #00d7ff; +} +.ap-terminal .bg-45 { + background-color: #00d7ff; +} +.ap-terminal .fg-46 { + color: #00ff00; +} +.ap-terminal .bg-46 { + background-color: #00ff00; +} +.ap-terminal .fg-47 { + color: #00ff5f; +} +.ap-terminal .bg-47 { + background-color: #00ff5f; +} +.ap-terminal .fg-48 { + color: #00ff87; +} +.ap-terminal .bg-48 { + background-color: #00ff87; +} +.ap-terminal .fg-49 { + color: #00ffaf; +} +.ap-terminal .bg-49 { + background-color: #00ffaf; +} +.ap-terminal .fg-50 { + color: #00ffd7; +} +.ap-terminal .bg-50 { + background-color: #00ffd7; +} +.ap-terminal .fg-51 { + color: #00ffff; +} +.ap-terminal .bg-51 { + background-color: #00ffff; +} +.ap-terminal .fg-52 { + color: #5f0000; +} +.ap-terminal .bg-52 { + background-color: #5f0000; +} +.ap-terminal .fg-53 { + color: #5f005f; +} +.ap-terminal .bg-53 { + background-color: #5f005f; +} +.ap-terminal .fg-54 { + color: #5f0087; +} +.ap-terminal .bg-54 { + background-color: #5f0087; +} +.ap-terminal .fg-55 { + color: #5f00af; +} +.ap-terminal .bg-55 { + background-color: #5f00af; +} +.ap-terminal .fg-56 { + color: #5f00d7; +} +.ap-terminal .bg-56 { + background-color: #5f00d7; +} +.ap-terminal .fg-57 { + color: #5f00ff; +} +.ap-terminal .bg-57 { + background-color: #5f00ff; +} +.ap-terminal .fg-58 { + color: #5f5f00; +} +.ap-terminal .bg-58 { + background-color: #5f5f00; +} +.ap-terminal .fg-59 { + color: #5f5f5f; +} +.ap-terminal .bg-59 { + background-color: #5f5f5f; +} +.ap-terminal .fg-60 { + color: #5f5f87; +} +.ap-terminal .bg-60 { + background-color: #5f5f87; +} +.ap-terminal .fg-61 { + color: #5f5faf; +} +.ap-terminal .bg-61 { + background-color: #5f5faf; +} +.ap-terminal .fg-62 { + color: #5f5fd7; +} +.ap-terminal .bg-62 { + background-color: #5f5fd7; +} +.ap-terminal .fg-63 { + color: #5f5fff; +} +.ap-terminal .bg-63 { + background-color: #5f5fff; +} +.ap-terminal .fg-64 { + color: #5f8700; +} +.ap-terminal .bg-64 { + background-color: #5f8700; +} +.ap-terminal .fg-65 { + color: #5f875f; +} +.ap-terminal .bg-65 { + background-color: #5f875f; +} +.ap-terminal .fg-66 { + color: #5f8787; +} +.ap-terminal .bg-66 { + background-color: #5f8787; +} +.ap-terminal .fg-67 { + color: #5f87af; +} +.ap-terminal .bg-67 { + background-color: #5f87af; +} +.ap-terminal .fg-68 { + color: #5f87d7; +} +.ap-terminal .bg-68 { + background-color: #5f87d7; +} +.ap-terminal .fg-69 { + color: #5f87ff; +} +.ap-terminal .bg-69 { + background-color: #5f87ff; +} +.ap-terminal .fg-70 { + color: #5faf00; +} +.ap-terminal .bg-70 { + background-color: #5faf00; +} +.ap-terminal .fg-71 { + color: #5faf5f; +} +.ap-terminal .bg-71 { + background-color: #5faf5f; +} +.ap-terminal .fg-72 { + color: #5faf87; +} +.ap-terminal .bg-72 { + background-color: #5faf87; +} +.ap-terminal .fg-73 { + color: #5fafaf; +} +.ap-terminal .bg-73 { + background-color: #5fafaf; +} +.ap-terminal .fg-74 { + color: #5fafd7; +} +.ap-terminal .bg-74 { + background-color: #5fafd7; +} +.ap-terminal .fg-75 { + color: #5fafff; +} +.ap-terminal .bg-75 { + background-color: #5fafff; +} +.ap-terminal .fg-76 { + color: #5fd700; +} +.ap-terminal .bg-76 { + background-color: #5fd700; +} +.ap-terminal .fg-77 { + color: #5fd75f; +} +.ap-terminal .bg-77 { + background-color: #5fd75f; +} +.ap-terminal .fg-78 { + color: #5fd787; +} +.ap-terminal .bg-78 { + background-color: #5fd787; +} +.ap-terminal .fg-79 { + color: #5fd7af; +} +.ap-terminal .bg-79 { + background-color: #5fd7af; +} +.ap-terminal .fg-80 { + color: #5fd7d7; +} +.ap-terminal .bg-80 { + background-color: #5fd7d7; +} +.ap-terminal .fg-81 { + color: #5fd7ff; +} +.ap-terminal .bg-81 { + background-color: #5fd7ff; +} +.ap-terminal .fg-82 { + color: #5fff00; +} +.ap-terminal .bg-82 { + background-color: #5fff00; +} +.ap-terminal .fg-83 { + color: #5fff5f; +} +.ap-terminal .bg-83 { + background-color: #5fff5f; +} +.ap-terminal .fg-84 { + color: #5fff87; +} +.ap-terminal .bg-84 { + background-color: #5fff87; +} +.ap-terminal .fg-85 { + color: #5fffaf; +} +.ap-terminal .bg-85 { + background-color: #5fffaf; +} +.ap-terminal .fg-86 { + color: #5fffd7; +} +.ap-terminal .bg-86 { + background-color: #5fffd7; +} +.ap-terminal .fg-87 { + color: #5fffff; +} +.ap-terminal .bg-87 { + background-color: #5fffff; +} +.ap-terminal .fg-88 { + color: #870000; +} +.ap-terminal .bg-88 { + background-color: #870000; +} +.ap-terminal .fg-89 { + color: #87005f; +} +.ap-terminal .bg-89 { + background-color: #87005f; +} +.ap-terminal .fg-90 { + color: #870087; +} +.ap-terminal .bg-90 { + background-color: #870087; +} +.ap-terminal .fg-91 { + color: #8700af; +} +.ap-terminal .bg-91 { + background-color: #8700af; +} +.ap-terminal .fg-92 { + color: #8700d7; +} +.ap-terminal .bg-92 { + background-color: #8700d7; +} +.ap-terminal .fg-93 { + color: #8700ff; +} +.ap-terminal .bg-93 { + background-color: #8700ff; +} +.ap-terminal .fg-94 { + color: #875f00; +} +.ap-terminal .bg-94 { + background-color: #875f00; +} +.ap-terminal .fg-95 { + color: #875f5f; +} +.ap-terminal .bg-95 { + background-color: #875f5f; +} +.ap-terminal .fg-96 { + color: #875f87; +} +.ap-terminal .bg-96 { + background-color: #875f87; +} +.ap-terminal .fg-97 { + color: #875faf; +} +.ap-terminal .bg-97 { + background-color: #875faf; +} +.ap-terminal .fg-98 { + color: #875fd7; +} +.ap-terminal .bg-98 { + background-color: #875fd7; +} +.ap-terminal .fg-99 { + color: #875fff; +} +.ap-terminal .bg-99 { + background-color: #875fff; +} +.ap-terminal .fg-100 { + color: #878700; +} +.ap-terminal .bg-100 { + background-color: #878700; +} +.ap-terminal .fg-101 { + color: #87875f; +} +.ap-terminal .bg-101 { + background-color: #87875f; +} +.ap-terminal .fg-102 { + color: #878787; +} +.ap-terminal .bg-102 { + background-color: #878787; +} +.ap-terminal .fg-103 { + color: #8787af; +} +.ap-terminal .bg-103 { + background-color: #8787af; +} +.ap-terminal .fg-104 { + color: #8787d7; +} +.ap-terminal .bg-104 { + background-color: #8787d7; +} +.ap-terminal .fg-105 { + color: #8787ff; +} +.ap-terminal .bg-105 { + background-color: #8787ff; +} +.ap-terminal .fg-106 { + color: #87af00; +} +.ap-terminal .bg-106 { + background-color: #87af00; +} +.ap-terminal .fg-107 { + color: #87af5f; +} +.ap-terminal .bg-107 { + background-color: #87af5f; +} +.ap-terminal .fg-108 { + color: #87af87; +} +.ap-terminal .bg-108 { + background-color: #87af87; +} +.ap-terminal .fg-109 { + color: #87afaf; +} +.ap-terminal .bg-109 { + background-color: #87afaf; +} +.ap-terminal .fg-110 { + color: #87afd7; +} +.ap-terminal .bg-110 { + background-color: #87afd7; +} +.ap-terminal .fg-111 { + color: #87afff; +} +.ap-terminal .bg-111 { + background-color: #87afff; +} +.ap-terminal .fg-112 { + color: #87d700; +} +.ap-terminal .bg-112 { + background-color: #87d700; +} +.ap-terminal .fg-113 { + color: #87d75f; +} +.ap-terminal .bg-113 { + background-color: #87d75f; +} +.ap-terminal .fg-114 { + color: #87d787; +} +.ap-terminal .bg-114 { + background-color: #87d787; +} +.ap-terminal .fg-115 { + color: #87d7af; +} +.ap-terminal .bg-115 { + background-color: #87d7af; +} +.ap-terminal .fg-116 { + color: #87d7d7; +} +.ap-terminal .bg-116 { + background-color: #87d7d7; +} +.ap-terminal .fg-117 { + color: #87d7ff; +} +.ap-terminal .bg-117 { + background-color: #87d7ff; +} +.ap-terminal .fg-118 { + color: #87ff00; +} +.ap-terminal .bg-118 { + background-color: #87ff00; +} +.ap-terminal .fg-119 { + color: #87ff5f; +} +.ap-terminal .bg-119 { + background-color: #87ff5f; +} +.ap-terminal .fg-120 { + color: #87ff87; +} +.ap-terminal .bg-120 { + background-color: #87ff87; +} +.ap-terminal .fg-121 { + color: #87ffaf; +} +.ap-terminal .bg-121 { + background-color: #87ffaf; +} +.ap-terminal .fg-122 { + color: #87ffd7; +} +.ap-terminal .bg-122 { + background-color: #87ffd7; +} +.ap-terminal .fg-123 { + color: #87ffff; +} +.ap-terminal .bg-123 { + background-color: #87ffff; +} +.ap-terminal .fg-124 { + color: #af0000; +} +.ap-terminal .bg-124 { + background-color: #af0000; +} +.ap-terminal .fg-125 { + color: #af005f; +} +.ap-terminal .bg-125 { + background-color: #af005f; +} +.ap-terminal .fg-126 { + color: #af0087; +} +.ap-terminal .bg-126 { + background-color: #af0087; +} +.ap-terminal .fg-127 { + color: #af00af; +} +.ap-terminal .bg-127 { + background-color: #af00af; +} +.ap-terminal .fg-128 { + color: #af00d7; +} +.ap-terminal .bg-128 { + background-color: #af00d7; +} +.ap-terminal .fg-129 { + color: #af00ff; +} +.ap-terminal .bg-129 { + background-color: #af00ff; +} +.ap-terminal .fg-130 { + color: #af5f00; +} +.ap-terminal .bg-130 { + background-color: #af5f00; +} +.ap-terminal .fg-131 { + color: #af5f5f; +} +.ap-terminal .bg-131 { + background-color: #af5f5f; +} +.ap-terminal .fg-132 { + color: #af5f87; +} +.ap-terminal .bg-132 { + background-color: #af5f87; +} +.ap-terminal .fg-133 { + color: #af5faf; +} +.ap-terminal .bg-133 { + background-color: #af5faf; +} +.ap-terminal .fg-134 { + color: #af5fd7; +} +.ap-terminal .bg-134 { + background-color: #af5fd7; +} +.ap-terminal .fg-135 { + color: #af5fff; +} +.ap-terminal .bg-135 { + background-color: #af5fff; +} +.ap-terminal .fg-136 { + color: #af8700; +} +.ap-terminal .bg-136 { + background-color: #af8700; +} +.ap-terminal .fg-137 { + color: #af875f; +} +.ap-terminal .bg-137 { + background-color: #af875f; +} +.ap-terminal .fg-138 { + color: #af8787; +} +.ap-terminal .bg-138 { + background-color: #af8787; +} +.ap-terminal .fg-139 { + color: #af87af; +} +.ap-terminal .bg-139 { + background-color: #af87af; +} +.ap-terminal .fg-140 { + color: #af87d7; +} +.ap-terminal .bg-140 { + background-color: #af87d7; +} +.ap-terminal .fg-141 { + color: #af87ff; +} +.ap-terminal .bg-141 { + background-color: #af87ff; +} +.ap-terminal .fg-142 { + color: #afaf00; +} +.ap-terminal .bg-142 { + background-color: #afaf00; +} +.ap-terminal .fg-143 { + color: #afaf5f; +} +.ap-terminal .bg-143 { + background-color: #afaf5f; +} +.ap-terminal .fg-144 { + color: #afaf87; +} +.ap-terminal .bg-144 { + background-color: #afaf87; +} +.ap-terminal .fg-145 { + color: #afafaf; +} +.ap-terminal .bg-145 { + background-color: #afafaf; +} +.ap-terminal .fg-146 { + color: #afafd7; +} +.ap-terminal .bg-146 { + background-color: #afafd7; +} +.ap-terminal .fg-147 { + color: #afafff; +} +.ap-terminal .bg-147 { + background-color: #afafff; +} +.ap-terminal .fg-148 { + color: #afd700; +} +.ap-terminal .bg-148 { + background-color: #afd700; +} +.ap-terminal .fg-149 { + color: #afd75f; +} +.ap-terminal .bg-149 { + background-color: #afd75f; +} +.ap-terminal .fg-150 { + color: #afd787; +} +.ap-terminal .bg-150 { + background-color: #afd787; +} +.ap-terminal .fg-151 { + color: #afd7af; +} +.ap-terminal .bg-151 { + background-color: #afd7af; +} +.ap-terminal .fg-152 { + color: #afd7d7; +} +.ap-terminal .bg-152 { + background-color: #afd7d7; +} +.ap-terminal .fg-153 { + color: #afd7ff; +} +.ap-terminal .bg-153 { + background-color: #afd7ff; +} +.ap-terminal .fg-154 { + color: #afff00; +} +.ap-terminal .bg-154 { + background-color: #afff00; +} +.ap-terminal .fg-155 { + color: #afff5f; +} +.ap-terminal .bg-155 { + background-color: #afff5f; +} +.ap-terminal .fg-156 { + color: #afff87; +} +.ap-terminal .bg-156 { + background-color: #afff87; +} +.ap-terminal .fg-157 { + color: #afffaf; +} +.ap-terminal .bg-157 { + background-color: #afffaf; +} +.ap-terminal .fg-158 { + color: #afffd7; +} +.ap-terminal .bg-158 { + background-color: #afffd7; +} +.ap-terminal .fg-159 { + color: #afffff; +} +.ap-terminal .bg-159 { + background-color: #afffff; +} +.ap-terminal .fg-160 { + color: #d70000; +} +.ap-terminal .bg-160 { + background-color: #d70000; +} +.ap-terminal .fg-161 { + color: #d7005f; +} +.ap-terminal .bg-161 { + background-color: #d7005f; +} +.ap-terminal .fg-162 { + color: #d70087; +} +.ap-terminal .bg-162 { + background-color: #d70087; +} +.ap-terminal .fg-163 { + color: #d700af; +} +.ap-terminal .bg-163 { + background-color: #d700af; +} +.ap-terminal .fg-164 { + color: #d700d7; +} +.ap-terminal .bg-164 { + background-color: #d700d7; +} +.ap-terminal .fg-165 { + color: #d700ff; +} +.ap-terminal .bg-165 { + background-color: #d700ff; +} +.ap-terminal .fg-166 { + color: #d75f00; +} +.ap-terminal .bg-166 { + background-color: #d75f00; +} +.ap-terminal .fg-167 { + color: #d75f5f; +} +.ap-terminal .bg-167 { + background-color: #d75f5f; +} +.ap-terminal .fg-168 { + color: #d75f87; +} +.ap-terminal .bg-168 { + background-color: #d75f87; +} +.ap-terminal .fg-169 { + color: #d75faf; +} +.ap-terminal .bg-169 { + background-color: #d75faf; +} +.ap-terminal .fg-170 { + color: #d75fd7; +} +.ap-terminal .bg-170 { + background-color: #d75fd7; +} +.ap-terminal .fg-171 { + color: #d75fff; +} +.ap-terminal .bg-171 { + background-color: #d75fff; +} +.ap-terminal .fg-172 { + color: #d78700; +} +.ap-terminal .bg-172 { + background-color: #d78700; +} +.ap-terminal .fg-173 { + color: #d7875f; +} +.ap-terminal .bg-173 { + background-color: #d7875f; +} +.ap-terminal .fg-174 { + color: #d78787; +} +.ap-terminal .bg-174 { + background-color: #d78787; +} +.ap-terminal .fg-175 { + color: #d787af; +} +.ap-terminal .bg-175 { + background-color: #d787af; +} +.ap-terminal .fg-176 { + color: #d787d7; +} +.ap-terminal .bg-176 { + background-color: #d787d7; +} +.ap-terminal .fg-177 { + color: #d787ff; +} +.ap-terminal .bg-177 { + background-color: #d787ff; +} +.ap-terminal .fg-178 { + color: #d7af00; +} +.ap-terminal .bg-178 { + background-color: #d7af00; +} +.ap-terminal .fg-179 { + color: #d7af5f; +} +.ap-terminal .bg-179 { + background-color: #d7af5f; +} +.ap-terminal .fg-180 { + color: #d7af87; +} +.ap-terminal .bg-180 { + background-color: #d7af87; +} +.ap-terminal .fg-181 { + color: #d7afaf; +} +.ap-terminal .bg-181 { + background-color: #d7afaf; +} +.ap-terminal .fg-182 { + color: #d7afd7; +} +.ap-terminal .bg-182 { + background-color: #d7afd7; +} +.ap-terminal .fg-183 { + color: #d7afff; +} +.ap-terminal .bg-183 { + background-color: #d7afff; +} +.ap-terminal .fg-184 { + color: #d7d700; +} +.ap-terminal .bg-184 { + background-color: #d7d700; +} +.ap-terminal .fg-185 { + color: #d7d75f; +} +.ap-terminal .bg-185 { + background-color: #d7d75f; +} +.ap-terminal .fg-186 { + color: #d7d787; +} +.ap-terminal .bg-186 { + background-color: #d7d787; +} +.ap-terminal .fg-187 { + color: #d7d7af; +} +.ap-terminal .bg-187 { + background-color: #d7d7af; +} +.ap-terminal .fg-188 { + color: #d7d7d7; +} +.ap-terminal .bg-188 { + background-color: #d7d7d7; +} +.ap-terminal .fg-189 { + color: #d7d7ff; +} +.ap-terminal .bg-189 { + background-color: #d7d7ff; +} +.ap-terminal .fg-190 { + color: #d7ff00; +} +.ap-terminal .bg-190 { + background-color: #d7ff00; +} +.ap-terminal .fg-191 { + color: #d7ff5f; +} +.ap-terminal .bg-191 { + background-color: #d7ff5f; +} +.ap-terminal .fg-192 { + color: #d7ff87; +} +.ap-terminal .bg-192 { + background-color: #d7ff87; +} +.ap-terminal .fg-193 { + color: #d7ffaf; +} +.ap-terminal .bg-193 { + background-color: #d7ffaf; +} +.ap-terminal .fg-194 { + color: #d7ffd7; +} +.ap-terminal .bg-194 { + background-color: #d7ffd7; +} +.ap-terminal .fg-195 { + color: #d7ffff; +} +.ap-terminal .bg-195 { + background-color: #d7ffff; +} +.ap-terminal .fg-196 { + color: #ff0000; +} +.ap-terminal .bg-196 { + background-color: #ff0000; +} +.ap-terminal .fg-197 { + color: #ff005f; +} +.ap-terminal .bg-197 { + background-color: #ff005f; +} +.ap-terminal .fg-198 { + color: #ff0087; +} +.ap-terminal .bg-198 { + background-color: #ff0087; +} +.ap-terminal .fg-199 { + color: #ff00af; +} +.ap-terminal .bg-199 { + background-color: #ff00af; +} +.ap-terminal .fg-200 { + color: #ff00d7; +} +.ap-terminal .bg-200 { + background-color: #ff00d7; +} +.ap-terminal .fg-201 { + color: #ff00ff; +} +.ap-terminal .bg-201 { + background-color: #ff00ff; +} +.ap-terminal .fg-202 { + color: #ff5f00; +} +.ap-terminal .bg-202 { + background-color: #ff5f00; +} +.ap-terminal .fg-203 { + color: #ff5f5f; +} +.ap-terminal .bg-203 { + background-color: #ff5f5f; +} +.ap-terminal .fg-204 { + color: #ff5f87; +} +.ap-terminal .bg-204 { + background-color: #ff5f87; +} +.ap-terminal .fg-205 { + color: #ff5faf; +} +.ap-terminal .bg-205 { + background-color: #ff5faf; +} +.ap-terminal .fg-206 { + color: #ff5fd7; +} +.ap-terminal .bg-206 { + background-color: #ff5fd7; +} +.ap-terminal .fg-207 { + color: #ff5fff; +} +.ap-terminal .bg-207 { + background-color: #ff5fff; +} +.ap-terminal .fg-208 { + color: #ff8700; +} +.ap-terminal .bg-208 { + background-color: #ff8700; +} +.ap-terminal .fg-209 { + color: #ff875f; +} +.ap-terminal .bg-209 { + background-color: #ff875f; +} +.ap-terminal .fg-210 { + color: #ff8787; +} +.ap-terminal .bg-210 { + background-color: #ff8787; +} +.ap-terminal .fg-211 { + color: #ff87af; +} +.ap-terminal .bg-211 { + background-color: #ff87af; +} +.ap-terminal .fg-212 { + color: #ff87d7; +} +.ap-terminal .bg-212 { + background-color: #ff87d7; +} +.ap-terminal .fg-213 { + color: #ff87ff; +} +.ap-terminal .bg-213 { + background-color: #ff87ff; +} +.ap-terminal .fg-214 { + color: #ffaf00; +} +.ap-terminal .bg-214 { + background-color: #ffaf00; +} +.ap-terminal .fg-215 { + color: #ffaf5f; +} +.ap-terminal .bg-215 { + background-color: #ffaf5f; +} +.ap-terminal .fg-216 { + color: #ffaf87; +} +.ap-terminal .bg-216 { + background-color: #ffaf87; +} +.ap-terminal .fg-217 { + color: #ffafaf; +} +.ap-terminal .bg-217 { + background-color: #ffafaf; +} +.ap-terminal .fg-218 { + color: #ffafd7; +} +.ap-terminal .bg-218 { + background-color: #ffafd7; +} +.ap-terminal .fg-219 { + color: #ffafff; +} +.ap-terminal .bg-219 { + background-color: #ffafff; +} +.ap-terminal .fg-220 { + color: #ffd700; +} +.ap-terminal .bg-220 { + background-color: #ffd700; +} +.ap-terminal .fg-221 { + color: #ffd75f; +} +.ap-terminal .bg-221 { + background-color: #ffd75f; +} +.ap-terminal .fg-222 { + color: #ffd787; +} +.ap-terminal .bg-222 { + background-color: #ffd787; +} +.ap-terminal .fg-223 { + color: #ffd7af; +} +.ap-terminal .bg-223 { + background-color: #ffd7af; +} +.ap-terminal .fg-224 { + color: #ffd7d7; +} +.ap-terminal .bg-224 { + background-color: #ffd7d7; +} +.ap-terminal .fg-225 { + color: #ffd7ff; +} +.ap-terminal .bg-225 { + background-color: #ffd7ff; +} +.ap-terminal .fg-226 { + color: #ffff00; +} +.ap-terminal .bg-226 { + background-color: #ffff00; +} +.ap-terminal .fg-227 { + color: #ffff5f; +} +.ap-terminal .bg-227 { + background-color: #ffff5f; +} +.ap-terminal .fg-228 { + color: #ffff87; +} +.ap-terminal .bg-228 { + background-color: #ffff87; +} +.ap-terminal .fg-229 { + color: #ffffaf; +} +.ap-terminal .bg-229 { + background-color: #ffffaf; +} +.ap-terminal .fg-230 { + color: #ffffd7; +} +.ap-terminal .bg-230 { + background-color: #ffffd7; +} +.ap-terminal .fg-231 { + color: #ffffff; +} +.ap-terminal .bg-231 { + background-color: #ffffff; +} +.ap-terminal .fg-232 { + color: #080808; +} +.ap-terminal .bg-232 { + background-color: #080808; +} +.ap-terminal .fg-233 { + color: #121212; +} +.ap-terminal .bg-233 { + background-color: #121212; +} +.ap-terminal .fg-234 { + color: #1c1c1c; +} +.ap-terminal .bg-234 { + background-color: #1c1c1c; +} +.ap-terminal .fg-235 { + color: #262626; +} +.ap-terminal .bg-235 { + background-color: #262626; +} +.ap-terminal .fg-236 { + color: #303030; +} +.ap-terminal .bg-236 { + background-color: #303030; +} +.ap-terminal .fg-237 { + color: #3a3a3a; +} +.ap-terminal .bg-237 { + background-color: #3a3a3a; +} +.ap-terminal .fg-238 { + color: #444444; +} +.ap-terminal .bg-238 { + background-color: #444444; +} +.ap-terminal .fg-239 { + color: #4e4e4e; +} +.ap-terminal .bg-239 { + background-color: #4e4e4e; +} +.ap-terminal .fg-240 { + color: #585858; +} +.ap-terminal .bg-240 { + background-color: #585858; +} +.ap-terminal .fg-241 { + color: #626262; +} +.ap-terminal .bg-241 { + background-color: #626262; +} +.ap-terminal .fg-242 { + color: #6c6c6c; +} +.ap-terminal .bg-242 { + background-color: #6c6c6c; +} +.ap-terminal .fg-243 { + color: #767676; +} +.ap-terminal .bg-243 { + background-color: #767676; +} +.ap-terminal .fg-244 { + color: #808080; +} +.ap-terminal .bg-244 { + background-color: #808080; +} +.ap-terminal .fg-245 { + color: #8a8a8a; +} +.ap-terminal .bg-245 { + background-color: #8a8a8a; +} +.ap-terminal .fg-246 { + color: #949494; +} +.ap-terminal .bg-246 { + background-color: #949494; +} +.ap-terminal .fg-247 { + color: #9e9e9e; +} +.ap-terminal .bg-247 { + background-color: #9e9e9e; +} +.ap-terminal .fg-248 { + color: #a8a8a8; +} +.ap-terminal .bg-248 { + background-color: #a8a8a8; +} +.ap-terminal .fg-249 { + color: #b2b2b2; +} +.ap-terminal .bg-249 { + background-color: #b2b2b2; +} +.ap-terminal .fg-250 { + color: #bcbcbc; +} +.ap-terminal .bg-250 { + background-color: #bcbcbc; +} +.ap-terminal .fg-251 { + color: #c6c6c6; +} +.ap-terminal .bg-251 { + background-color: #c6c6c6; +} +.ap-terminal .fg-252 { + color: #d0d0d0; +} +.ap-terminal .bg-252 { + background-color: #d0d0d0; +} +.ap-terminal .fg-253 { + color: #dadada; +} +.ap-terminal .bg-253 { + background-color: #dadada; +} +.ap-terminal .fg-254 { + color: #e4e4e4; +} +.ap-terminal .bg-254 { + background-color: #e4e4e4; +} +.ap-terminal .fg-255 { + color: #eeeeee; +} +.ap-terminal .bg-255 { + background-color: #eeeeee; +} +.asciinema-theme-asciinema { + background-color: #121314; +} +.asciinema-theme-asciinema pre.ap-terminal { + color: #CCCCCC; + background-color: #121314; + border-color: #121314; +} +.asciinema-theme-asciinema .fg-default { + color: #CCCCCC; +} +.asciinema-theme-asciinema .fg-bg { + color: #121314; +} +.asciinema-theme-asciinema .bg-default { + background-color: #121314; +} +.asciinema-theme-asciinema .bg-fg { + background-color: #CCCCCC; +} +.asciinema-theme-asciinema .fg-0 { + color: hsl(0, 0%, 0%); +} +.asciinema-theme-asciinema .bg-0 { + background-color: hsl(0, 0%, 0%); +} +.asciinema-theme-asciinema .fg-1 { + color: hsl(343, 70%, 55%); +} +.asciinema-theme-asciinema .bg-1 { + background-color: hsl(343, 70%, 55%); +} +.asciinema-theme-asciinema .fg-2 { + color: hsl(103, 70%, 44%); +} +.asciinema-theme-asciinema .bg-2 { + background-color: hsl(103, 70%, 44%); +} +.asciinema-theme-asciinema .fg-3 { + color: hsl(43, 70%, 55%); +} +.asciinema-theme-asciinema .bg-3 { + background-color: hsl(43, 70%, 55%); +} +.asciinema-theme-asciinema .fg-4 { + color: hsl(193, 70%, 49.5%); +} +.asciinema-theme-asciinema .bg-4 { + background-color: hsl(193, 70%, 49.5%); +} +.asciinema-theme-asciinema .fg-5 { + color: hsl(283, 70%, 60.5%); +} +.asciinema-theme-asciinema .bg-5 { + background-color: hsl(283, 70%, 60.5%); +} +.asciinema-theme-asciinema .fg-6 { + color: hsl(163, 70%, 60.5%); +} +.asciinema-theme-asciinema .bg-6 { + background-color: hsl(163, 70%, 60.5%); +} +.asciinema-theme-asciinema .fg-7 { + color: hsl(0, 0%, 85%); +} +.asciinema-theme-asciinema .bg-7 { + background-color: hsl(0, 0%, 85%); +} +.asciinema-theme-asciinema .fg-8 { + color: hsl(0, 0%, 30%); +} +.asciinema-theme-asciinema .bg-8 { + background-color: hsl(0, 0%, 30%); +} +.asciinema-theme-asciinema .fg-9 { + color: hsl(343, 70%, 55%); +} +.asciinema-theme-asciinema .bg-9 { + background-color: hsl(343, 70%, 55%); +} +.asciinema-theme-asciinema .fg-10 { + color: hsl(103, 70%, 44%); +} +.asciinema-theme-asciinema .bg-10 { + background-color: hsl(103, 70%, 44%); +} +.asciinema-theme-asciinema .fg-11 { + color: hsl(43, 70%, 55%); +} +.asciinema-theme-asciinema .bg-11 { + background-color: hsl(43, 70%, 55%); +} +.asciinema-theme-asciinema .fg-12 { + color: hsl(193, 70%, 49.5%); +} +.asciinema-theme-asciinema .bg-12 { + background-color: hsl(193, 70%, 49.5%); +} +.asciinema-theme-asciinema .fg-13 { + color: hsl(283, 70%, 60.5%); +} +.asciinema-theme-asciinema .bg-13 { + background-color: hsl(283, 70%, 60.5%); +} +.asciinema-theme-asciinema .fg-14 { + color: hsl(163, 70%, 60.5%); +} +.asciinema-theme-asciinema .bg-14 { + background-color: hsl(163, 70%, 60.5%); +} +.asciinema-theme-asciinema .fg-15 { + color: hsl(0, 0%, 100%); +} +.asciinema-theme-asciinema .bg-15 { + background-color: hsl(0, 0%, 100%); +} +.asciinema-theme-asciinema .ap-overlay-loading .ap-loader { + border-color: rgba(204, 204, 204, 0.3) rgba(204, 204, 204, 0.5) rgba(204, 204, 204, 0.7) #cccccc; +} +.asciinema-theme-asciinema .fg-8, +.asciinema-theme-asciinema .fg-9, +.asciinema-theme-asciinema .fg-10, +.asciinema-theme-asciinema .fg-11, +.asciinema-theme-asciinema .fg-12, +.asciinema-theme-asciinema .fg-13, +.asciinema-theme-asciinema .fg-14, +.asciinema-theme-asciinema .fg-15 { + font-weight: bold; +} +/* + Based on Dracula: https://draculatheme.com + */ +.asciinema-theme-dracula { + background-color: #282a36; +} +.asciinema-theme-dracula pre.ap-terminal { + color: #f8f8f2; + background-color: #282a36; + border-color: #282a36; +} +.asciinema-theme-dracula .fg-default { + color: #f8f8f2; +} +.asciinema-theme-dracula .fg-bg { + color: #282a36; +} +.asciinema-theme-dracula .bg-default { + background-color: #282a36; +} +.asciinema-theme-dracula .bg-fg { + background-color: #f8f8f2; +} +.asciinema-theme-dracula .fg-0 { + color: #21222c; +} +.asciinema-theme-dracula .bg-0 { + background-color: #21222c; +} +.asciinema-theme-dracula .fg-1 { + color: #ff5555; +} +.asciinema-theme-dracula .bg-1 { + background-color: #ff5555; +} +.asciinema-theme-dracula .fg-2 { + color: #50fa7b; +} +.asciinema-theme-dracula .bg-2 { + background-color: #50fa7b; +} +.asciinema-theme-dracula .fg-3 { + color: #f1fa8c; +} +.asciinema-theme-dracula .bg-3 { + background-color: #f1fa8c; +} +.asciinema-theme-dracula .fg-4 { + color: #bd93f9; +} +.asciinema-theme-dracula .bg-4 { + background-color: #bd93f9; +} +.asciinema-theme-dracula .fg-5 { + color: #ff79c6; +} +.asciinema-theme-dracula .bg-5 { + background-color: #ff79c6; +} +.asciinema-theme-dracula .fg-6 { + color: #8be9fd; +} +.asciinema-theme-dracula .bg-6 { + background-color: #8be9fd; +} +.asciinema-theme-dracula .fg-7 { + color: #f8f8f2; +} +.asciinema-theme-dracula .bg-7 { + background-color: #f8f8f2; +} +.asciinema-theme-dracula .fg-8 { + color: #6272a4; +} +.asciinema-theme-dracula .bg-8 { + background-color: #6272a4; +} +.asciinema-theme-dracula .fg-9 { + color: #ff6e6e; +} +.asciinema-theme-dracula .bg-9 { + background-color: #ff6e6e; +} +.asciinema-theme-dracula .fg-10 { + color: #69ff94; +} +.asciinema-theme-dracula .bg-10 { + background-color: #69ff94; +} +.asciinema-theme-dracula .fg-11 { + color: #ffffa5; +} +.asciinema-theme-dracula .bg-11 { + background-color: #ffffa5; +} +.asciinema-theme-dracula .fg-12 { + color: #d6acff; +} +.asciinema-theme-dracula .bg-12 { + background-color: #d6acff; +} +.asciinema-theme-dracula .fg-13 { + color: #ff92df; +} +.asciinema-theme-dracula .bg-13 { + background-color: #ff92df; +} +.asciinema-theme-dracula .fg-14 { + color: #a4ffff; +} +.asciinema-theme-dracula .bg-14 { + background-color: #a4ffff; +} +.asciinema-theme-dracula .fg-15 { + color: #ffffff; +} +.asciinema-theme-dracula .bg-15 { + background-color: #ffffff; +} +.asciinema-theme-dracula .ap-overlay-loading .ap-loader { + border-color: rgba(248, 248, 242, 0.3) rgba(248, 248, 242, 0.5) rgba(248, 248, 242, 0.7) #f8f8f2; +} +.asciinema-theme-dracula .fg-8, +.asciinema-theme-dracula .fg-9, +.asciinema-theme-dracula .fg-10, +.asciinema-theme-dracula .fg-11, +.asciinema-theme-dracula .fg-12, +.asciinema-theme-dracula .fg-13, +.asciinema-theme-dracula .fg-14, +.asciinema-theme-dracula .fg-15 { + font-weight: bold; +} +/* Based on Monokai from base16 collection - https://github.com/chriskempson/base16 */ +.asciinema-theme-monokai { + background-color: #272822; +} +.asciinema-theme-monokai pre.ap-terminal { + color: #f8f8f2; + background-color: #272822; + border-color: #272822; +} +.asciinema-theme-monokai .fg-default { + color: #f8f8f2; +} +.asciinema-theme-monokai .fg-bg { + color: #272822; +} +.asciinema-theme-monokai .bg-default { + background-color: #272822; +} +.asciinema-theme-monokai .bg-fg { + background-color: #f8f8f2; +} +.asciinema-theme-monokai .fg-0 { + color: #272822; +} +.asciinema-theme-monokai .bg-0 { + background-color: #272822; +} +.asciinema-theme-monokai .fg-1 { + color: #f92672; +} +.asciinema-theme-monokai .bg-1 { + background-color: #f92672; +} +.asciinema-theme-monokai .fg-2 { + color: #a6e22e; +} +.asciinema-theme-monokai .bg-2 { + background-color: #a6e22e; +} +.asciinema-theme-monokai .fg-3 { + color: #f4bf75; +} +.asciinema-theme-monokai .bg-3 { + background-color: #f4bf75; +} +.asciinema-theme-monokai .fg-4 { + color: #66d9ef; +} +.asciinema-theme-monokai .bg-4 { + background-color: #66d9ef; +} +.asciinema-theme-monokai .fg-5 { + color: #ae81ff; +} +.asciinema-theme-monokai .bg-5 { + background-color: #ae81ff; +} +.asciinema-theme-monokai .fg-6 { + color: #a1efe4; +} +.asciinema-theme-monokai .bg-6 { + background-color: #a1efe4; +} +.asciinema-theme-monokai .fg-7 { + color: #f8f8f2; +} +.asciinema-theme-monokai .bg-7 { + background-color: #f8f8f2; +} +.asciinema-theme-monokai .fg-8 { + color: #75715e; +} +.asciinema-theme-monokai .bg-8 { + background-color: #75715e; +} +.asciinema-theme-monokai .fg-9 { + color: #f92672; +} +.asciinema-theme-monokai .bg-9 { + background-color: #f92672; +} +.asciinema-theme-monokai .fg-10 { + color: #a6e22e; +} +.asciinema-theme-monokai .bg-10 { + background-color: #a6e22e; +} +.asciinema-theme-monokai .fg-11 { + color: #f4bf75; +} +.asciinema-theme-monokai .bg-11 { + background-color: #f4bf75; +} +.asciinema-theme-monokai .fg-12 { + color: #66d9ef; +} +.asciinema-theme-monokai .bg-12 { + background-color: #66d9ef; +} +.asciinema-theme-monokai .fg-13 { + color: #ae81ff; +} +.asciinema-theme-monokai .bg-13 { + background-color: #ae81ff; +} +.asciinema-theme-monokai .fg-14 { + color: #a1efe4; +} +.asciinema-theme-monokai .bg-14 { + background-color: #a1efe4; +} +.asciinema-theme-monokai .fg-15 { + color: #f9f8f5; +} +.asciinema-theme-monokai .bg-15 { + background-color: #f9f8f5; +} +.asciinema-theme-monokai .ap-overlay-loading .ap-loader { + border-color: rgba(248, 248, 242, 0.3) rgba(248, 248, 242, 0.5) rgba(248, 248, 242, 0.7) #f8f8f2; +} +.asciinema-theme-monokai .fg-8, +.asciinema-theme-monokai .fg-9, +.asciinema-theme-monokai .fg-10, +.asciinema-theme-monokai .fg-11, +.asciinema-theme-monokai .fg-12, +.asciinema-theme-monokai .fg-13, +.asciinema-theme-monokai .fg-14, +.asciinema-theme-monokai .fg-15 { + font-weight: bold; +} +/* + Based on Nord: https://github.com/arcticicestudio/nord + Via: https://github.com/neilotoole/asciinema-theme-nord + */ +.asciinema-theme-nord { + background-color: #2E3440; +} +.asciinema-theme-nord pre.ap-terminal { + color: #ECEFF4; + background-color: #2E3440; + border-color: #2E3440; +} +.asciinema-theme-nord .fg-default { + color: #ECEFF4; +} +.asciinema-theme-nord .fg-bg { + color: #2E3440; +} +.asciinema-theme-nord .bg-default { + background-color: #2E3440; +} +.asciinema-theme-nord .bg-fg { + background-color: #ECEFF4; +} +.asciinema-theme-nord .fg-0 { + color: #3B4252; +} +.asciinema-theme-nord .bg-0 { + background-color: #3B4252; +} +.asciinema-theme-nord .fg-1 { + color: #BF616A; +} +.asciinema-theme-nord .bg-1 { + background-color: #BF616A; +} +.asciinema-theme-nord .fg-2 { + color: #A3BE8C; +} +.asciinema-theme-nord .bg-2 { + background-color: #A3BE8C; +} +.asciinema-theme-nord .fg-3 { + color: #EBCB8B; +} +.asciinema-theme-nord .bg-3 { + background-color: #EBCB8B; +} +.asciinema-theme-nord .fg-4 { + color: #81A1C1; +} +.asciinema-theme-nord .bg-4 { + background-color: #81A1C1; +} +.asciinema-theme-nord .fg-5 { + color: #B48EAD; +} +.asciinema-theme-nord .bg-5 { + background-color: #B48EAD; +} +.asciinema-theme-nord .fg-6 { + color: #88C0D0; +} +.asciinema-theme-nord .bg-6 { + background-color: #88C0D0; +} +.asciinema-theme-nord .fg-7 { + color: #ECEFF4; +} +.asciinema-theme-nord .bg-7 { + background-color: #ECEFF4; +} +.asciinema-theme-nord .fg-8 { + color: #3B4252; +} +.asciinema-theme-nord .bg-8 { + background-color: #3B4252; +} +.asciinema-theme-nord .fg-9 { + color: #BF616A; +} +.asciinema-theme-nord .bg-9 { + background-color: #BF616A; +} +.asciinema-theme-nord .fg-10 { + color: #A3BE8C; +} +.asciinema-theme-nord .bg-10 { + background-color: #A3BE8C; +} +.asciinema-theme-nord .fg-11 { + color: #EBCB8B; +} +.asciinema-theme-nord .bg-11 { + background-color: #EBCB8B; +} +.asciinema-theme-nord .fg-12 { + color: #81A1C1; +} +.asciinema-theme-nord .bg-12 { + background-color: #81A1C1; +} +.asciinema-theme-nord .fg-13 { + color: #B48EAD; +} +.asciinema-theme-nord .bg-13 { + background-color: #B48EAD; +} +.asciinema-theme-nord .fg-14 { + color: #88C0D0; +} +.asciinema-theme-nord .bg-14 { + background-color: #88C0D0; +} +.asciinema-theme-nord .fg-15 { + color: #ECEFF4; +} +.asciinema-theme-nord .bg-15 { + background-color: #ECEFF4; +} +.asciinema-theme-nord .ap-overlay-loading .ap-loader { + border-color: rgba(236, 239, 244, 0.3) rgba(236, 239, 244, 0.5) rgba(236, 239, 244, 0.7) #eceff4; +} +.asciinema-theme-nord .fg-8, +.asciinema-theme-nord .fg-9, +.asciinema-theme-nord .fg-10, +.asciinema-theme-nord .fg-11, +.asciinema-theme-nord .fg-12, +.asciinema-theme-nord .fg-13, +.asciinema-theme-nord .fg-14, +.asciinema-theme-nord .fg-15 { + font-weight: bold; +} +.asciinema-theme-seti { + background-color: #111213; +} +.asciinema-theme-seti pre.ap-terminal { + color: #cacecd; + background-color: #111213; + border-color: #111213; +} +.asciinema-theme-seti .fg-default { + color: #cacecd; +} +.asciinema-theme-seti .fg-bg { + color: #111213; +} +.asciinema-theme-seti .bg-default { + background-color: #111213; +} +.asciinema-theme-seti .bg-fg { + background-color: #cacecd; +} +.asciinema-theme-seti .fg-0 { + color: #323232; +} +.asciinema-theme-seti .bg-0 { + background-color: #323232; +} +.asciinema-theme-seti .fg-1 { + color: #c22832; +} +.asciinema-theme-seti .bg-1 { + background-color: #c22832; +} +.asciinema-theme-seti .fg-2 { + color: #8ec43d; +} +.asciinema-theme-seti .bg-2 { + background-color: #8ec43d; +} +.asciinema-theme-seti .fg-3 { + color: #e0c64f; +} +.asciinema-theme-seti .bg-3 { + background-color: #e0c64f; +} +.asciinema-theme-seti .fg-4 { + color: #43a5d5; +} +.asciinema-theme-seti .bg-4 { + background-color: #43a5d5; +} +.asciinema-theme-seti .fg-5 { + color: #8b57b5; +} +.asciinema-theme-seti .bg-5 { + background-color: #8b57b5; +} +.asciinema-theme-seti .fg-6 { + color: #8ec43d; +} +.asciinema-theme-seti .bg-6 { + background-color: #8ec43d; +} +.asciinema-theme-seti .fg-7 { + color: #eeeeee; +} +.asciinema-theme-seti .bg-7 { + background-color: #eeeeee; +} +.asciinema-theme-seti .fg-8 { + color: #323232; +} +.asciinema-theme-seti .bg-8 { + background-color: #323232; +} +.asciinema-theme-seti .fg-9 { + color: #c22832; +} +.asciinema-theme-seti .bg-9 { + background-color: #c22832; +} +.asciinema-theme-seti .fg-10 { + color: #8ec43d; +} +.asciinema-theme-seti .bg-10 { + background-color: #8ec43d; +} +.asciinema-theme-seti .fg-11 { + color: #e0c64f; +} +.asciinema-theme-seti .bg-11 { + background-color: #e0c64f; +} +.asciinema-theme-seti .fg-12 { + color: #43a5d5; +} +.asciinema-theme-seti .bg-12 { + background-color: #43a5d5; +} +.asciinema-theme-seti .fg-13 { + color: #8b57b5; +} +.asciinema-theme-seti .bg-13 { + background-color: #8b57b5; +} +.asciinema-theme-seti .fg-14 { + color: #8ec43d; +} +.asciinema-theme-seti .bg-14 { + background-color: #8ec43d; +} +.asciinema-theme-seti .fg-15 { + color: #ffffff; +} +.asciinema-theme-seti .bg-15 { + background-color: #ffffff; +} +.asciinema-theme-seti .ap-overlay-loading .ap-loader { + border-color: rgba(202, 206, 205, 0.3) rgba(202, 206, 205, 0.5) rgba(202, 206, 205, 0.7) #cacecd; +} +.asciinema-theme-seti .fg-8, +.asciinema-theme-seti .fg-9, +.asciinema-theme-seti .fg-10, +.asciinema-theme-seti .fg-11, +.asciinema-theme-seti .fg-12, +.asciinema-theme-seti .fg-13, +.asciinema-theme-seti .fg-14, +.asciinema-theme-seti .fg-15 { + font-weight: bold; +} +.asciinema-theme-solarized-dark { + background-color: #002b36; +} +.asciinema-theme-solarized-dark pre.ap-terminal { + color: #839496; + background-color: #002b36; + border-color: #002b36; +} +.asciinema-theme-solarized-dark .fg-default { + color: #839496; +} +.asciinema-theme-solarized-dark .fg-bg { + color: #002b36; +} +.asciinema-theme-solarized-dark .bg-default { + background-color: #002b36; +} +.asciinema-theme-solarized-dark .bg-fg { + background-color: #839496; +} +.asciinema-theme-solarized-dark .fg-0 { + color: #073642; +} +.asciinema-theme-solarized-dark .bg-0 { + background-color: #073642; +} +.asciinema-theme-solarized-dark .fg-1 { + color: #dc322f; +} +.asciinema-theme-solarized-dark .bg-1 { + background-color: #dc322f; +} +.asciinema-theme-solarized-dark .fg-2 { + color: #859900; +} +.asciinema-theme-solarized-dark .bg-2 { + background-color: #859900; +} +.asciinema-theme-solarized-dark .fg-3 { + color: #b58900; +} +.asciinema-theme-solarized-dark .bg-3 { + background-color: #b58900; +} +.asciinema-theme-solarized-dark .fg-4 { + color: #268bd2; +} +.asciinema-theme-solarized-dark .bg-4 { + background-color: #268bd2; +} +.asciinema-theme-solarized-dark .fg-5 { + color: #d33682; +} +.asciinema-theme-solarized-dark .bg-5 { + background-color: #d33682; +} +.asciinema-theme-solarized-dark .fg-6 { + color: #2aa198; +} +.asciinema-theme-solarized-dark .bg-6 { + background-color: #2aa198; +} +.asciinema-theme-solarized-dark .fg-7 { + color: #eee8d5; +} +.asciinema-theme-solarized-dark .bg-7 { + background-color: #eee8d5; +} +.asciinema-theme-solarized-dark .fg-8 { + color: #002b36; +} +.asciinema-theme-solarized-dark .bg-8 { + background-color: #002b36; +} +.asciinema-theme-solarized-dark .fg-9 { + color: #cb4b16; +} +.asciinema-theme-solarized-dark .bg-9 { + background-color: #cb4b16; +} +.asciinema-theme-solarized-dark .fg-10 { + color: #586e75; +} +.asciinema-theme-solarized-dark .bg-10 { + background-color: #586e75; +} +.asciinema-theme-solarized-dark .fg-11 { + color: #657b83; +} +.asciinema-theme-solarized-dark .bg-11 { + background-color: #657b83; +} +.asciinema-theme-solarized-dark .fg-12 { + color: #839496; +} +.asciinema-theme-solarized-dark .bg-12 { + background-color: #839496; +} +.asciinema-theme-solarized-dark .fg-13 { + color: #6c71c4; +} +.asciinema-theme-solarized-dark .bg-13 { + background-color: #6c71c4; +} +.asciinema-theme-solarized-dark .fg-14 { + color: #93a1a1; +} +.asciinema-theme-solarized-dark .bg-14 { + background-color: #93a1a1; +} +.asciinema-theme-solarized-dark .fg-15 { + color: #fdf6e3; +} +.asciinema-theme-solarized-dark .bg-15 { + background-color: #fdf6e3; +} +.asciinema-theme-solarized-dark .ap-overlay-loading .ap-loader { + border-color: rgba(131, 148, 150, 0.3) rgba(131, 148, 150, 0.5) rgba(131, 148, 150, 0.7) #839496; +} +.asciinema-theme-solarized-light { + background-color: #fdf6e3; +} +.asciinema-theme-solarized-light pre.ap-terminal { + color: #657b83; + background-color: #fdf6e3; + border-color: #fdf6e3; +} +.asciinema-theme-solarized-light .fg-default { + color: #657b83; +} +.asciinema-theme-solarized-light .fg-bg { + color: #fdf6e3; +} +.asciinema-theme-solarized-light .bg-default { + background-color: #fdf6e3; +} +.asciinema-theme-solarized-light .bg-fg { + background-color: #657b83; +} +.asciinema-theme-solarized-light .fg-0 { + color: #073642; +} +.asciinema-theme-solarized-light .bg-0 { + background-color: #073642; +} +.asciinema-theme-solarized-light .fg-1 { + color: #dc322f; +} +.asciinema-theme-solarized-light .bg-1 { + background-color: #dc322f; +} +.asciinema-theme-solarized-light .fg-2 { + color: #859900; +} +.asciinema-theme-solarized-light .bg-2 { + background-color: #859900; +} +.asciinema-theme-solarized-light .fg-3 { + color: #b58900; +} +.asciinema-theme-solarized-light .bg-3 { + background-color: #b58900; +} +.asciinema-theme-solarized-light .fg-4 { + color: #268bd2; +} +.asciinema-theme-solarized-light .bg-4 { + background-color: #268bd2; +} +.asciinema-theme-solarized-light .fg-5 { + color: #d33682; +} +.asciinema-theme-solarized-light .bg-5 { + background-color: #d33682; +} +.asciinema-theme-solarized-light .fg-6 { + color: #2aa198; +} +.asciinema-theme-solarized-light .bg-6 { + background-color: #2aa198; +} +.asciinema-theme-solarized-light .fg-7 { + color: #eee8d5; +} +.asciinema-theme-solarized-light .bg-7 { + background-color: #eee8d5; +} +.asciinema-theme-solarized-light .fg-8 { + color: #002b36; +} +.asciinema-theme-solarized-light .bg-8 { + background-color: #002b36; +} +.asciinema-theme-solarized-light .fg-9 { + color: #cb4b16; +} +.asciinema-theme-solarized-light .bg-9 { + background-color: #cb4b16; +} +.asciinema-theme-solarized-light .fg-10 { + color: #586e75; +} +.asciinema-theme-solarized-light .bg-10 { + background-color: #586e75; +} +.asciinema-theme-solarized-light .fg-11 { + color: #657c83; +} +.asciinema-theme-solarized-light .bg-11 { + background-color: #657c83; +} +.asciinema-theme-solarized-light .fg-12 { + color: #839496; +} +.asciinema-theme-solarized-light .bg-12 { + background-color: #839496; +} +.asciinema-theme-solarized-light .fg-13 { + color: #6c71c4; +} +.asciinema-theme-solarized-light .bg-13 { + background-color: #6c71c4; +} +.asciinema-theme-solarized-light .fg-14 { + color: #93a1a1; +} +.asciinema-theme-solarized-light .bg-14 { + background-color: #93a1a1; +} +.asciinema-theme-solarized-light .fg-15 { + color: #fdf6e3; +} +.asciinema-theme-solarized-light .bg-15 { + background-color: #fdf6e3; +} +.asciinema-theme-solarized-light .ap-overlay-loading .ap-loader { + border-color: rgba(101, 123, 131, 0.3) rgba(101, 123, 131, 0.5) rgba(101, 123, 131, 0.7) #657b83; +} +.asciinema-theme-solarized-light .ap-overlay-start .ap-play-button svg .ap-play-btn-fill { + fill: #dc322f; +} +.asciinema-theme-solarized-light .ap-overlay-start .ap-play-button svg .ap-play-btn-stroke { + stroke: #dc322f; +} +.asciinema-theme-tango { + background-color: #121314; +} +.asciinema-theme-tango pre.ap-terminal { + color: #CCCCCC; + background-color: #121314; + border-color: #121314; +} +.asciinema-theme-tango .fg-default { + color: #CCCCCC; +} +.asciinema-theme-tango .fg-bg { + color: #121314; +} +.asciinema-theme-tango .bg-default { + background-color: #121314; +} +.asciinema-theme-tango .bg-fg { + background-color: #CCCCCC; +} +.asciinema-theme-tango .fg-0 { + color: #000000; +} +.asciinema-theme-tango .bg-0 { + background-color: #000000; +} +.asciinema-theme-tango .fg-1 { + color: #CC0000; +} +.asciinema-theme-tango .bg-1 { + background-color: #CC0000; +} +.asciinema-theme-tango .fg-2 { + color: #4E9A06; +} +.asciinema-theme-tango .bg-2 { + background-color: #4E9A06; +} +.asciinema-theme-tango .fg-3 { + color: #C4A000; +} +.asciinema-theme-tango .bg-3 { + background-color: #C4A000; +} +.asciinema-theme-tango .fg-4 { + color: #3465A4; +} +.asciinema-theme-tango .bg-4 { + background-color: #3465A4; +} +.asciinema-theme-tango .fg-5 { + color: #75507B; +} +.asciinema-theme-tango .bg-5 { + background-color: #75507B; +} +.asciinema-theme-tango .fg-6 { + color: #06989A; +} +.asciinema-theme-tango .bg-6 { + background-color: #06989A; +} +.asciinema-theme-tango .fg-7 { + color: #D3D7CF; +} +.asciinema-theme-tango .bg-7 { + background-color: #D3D7CF; +} +.asciinema-theme-tango .fg-8 { + color: #555753; +} +.asciinema-theme-tango .bg-8 { + background-color: #555753; +} +.asciinema-theme-tango .fg-9 { + color: #EF2929; +} +.asciinema-theme-tango .bg-9 { + background-color: #EF2929; +} +.asciinema-theme-tango .fg-10 { + color: #8AE234; +} +.asciinema-theme-tango .bg-10 { + background-color: #8AE234; +} +.asciinema-theme-tango .fg-11 { + color: #FCE94F; +} +.asciinema-theme-tango .bg-11 { + background-color: #FCE94F; +} +.asciinema-theme-tango .fg-12 { + color: #729FCF; +} +.asciinema-theme-tango .bg-12 { + background-color: #729FCF; +} +.asciinema-theme-tango .fg-13 { + color: #AD7FA8; +} +.asciinema-theme-tango .bg-13 { + background-color: #AD7FA8; +} +.asciinema-theme-tango .fg-14 { + color: #34E2E2; +} +.asciinema-theme-tango .bg-14 { + background-color: #34E2E2; +} +.asciinema-theme-tango .fg-15 { + color: #EEEEEC; +} +.asciinema-theme-tango .bg-15 { + background-color: #EEEEEC; +} +.asciinema-theme-tango .ap-overlay-loading .ap-loader { + border-color: rgba(204, 204, 204, 0.3) rgba(204, 204, 204, 0.5) rgba(204, 204, 204, 0.7) #cccccc; +} +.asciinema-theme-tango .fg-8, +.asciinema-theme-tango .fg-9, +.asciinema-theme-tango .fg-10, +.asciinema-theme-tango .fg-11, +.asciinema-theme-tango .fg-12, +.asciinema-theme-tango .fg-13, +.asciinema-theme-tango .fg-14, +.asciinema-theme-tango .fg-15 { + font-weight: bold; +} diff --git a/docs/usage.md b/docs/usage.md new file mode 100644 index 0000000..6c0f1b4 --- /dev/null +++ b/docs/usage.md @@ -0,0 +1,57 @@ +# Standalone Usage + +Run Code Limit without arguments to see the usage page: + +```shell +$ codelimit + + Usage: codelimit [OPTIONS] COMMAND [ARGS]... + + CodeLimit: Your refactoring alarm. + +╭─ Options ────────────────────────────────────────────────────────────────────╮ +│ --verbose -v Verbose output │ +│ --exclude TEXT Glob patterns for exclusion [default: None] │ +│ --version -V Show version │ +│ --help Show this message and exit. │ +╰──────────────────────────────────────────────────────────────────────────────╯ +╭─ Commands ───────────────────────────────────────────────────────────────────╮ +│ check Check file(s) │ +│ scan Scan a codebase │ +│ report Show report for codebase │ +│ app Code Limit GitHub App commands │ +╰──────────────────────────────────────────────────────────────────────────────╯ +``` + +## Scanning a codebase + +To scan a complete codebase run: + +```shell +codelimit scan path/to/codebase +``` + +
+ +## Viewing a report + +To view the report with hard-to-maintain and unmaintainable functions of a +codebase that was scanned before run: + +
+ + + +## Checking files + +To check a single file or list of files for functions that need refactoring, +run: + +```shell +codelimit check a.py b.py c.py +``` diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..08b0b28 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,41 @@ +site_name: Code Limit Documentation +repo_url: https://github.com/getcodelimit/codelimit +theme: + name: material + palette: + - scheme: slate + primary: black + toggle: + icon: material/lightbulb + name: Switch to light mode + - scheme: default + primary: black + accent: indigo + toggle: + icon: material/lightbulb-outline + name: Switch to dark mode + logo: assets/logo.png + favicon: assets/favicon.png + features: + - toc.integrate + - navigation.footer + - content.code.copy +extra_css: + - stylesheets/asciinema-player.css +extra_javascript: + - javascripts/asciinema-player.min.js +plugins: + - glightbox: + draggable: false + background: none + shadow: false + - search +markdown_extensions: + - attr_list +nav: + - 'index.md' + - 'quickstart.md' + - 'usage.md' + - 'configuration.md' + - 'faq.md' + - 'development.md' diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..4554ec0 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,780 @@ +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. + +[[package]] +name = "babel" +version = "2.16.0" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.8" +files = [ + {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, + {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, +] + +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + +[[package]] +name = "certifi" +version = "2024.8.30" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." +optional = false +python-versions = "*" +files = [ + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, +] + +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["flake8", "markdown", "twine", "wheel"] + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "jinja2" +version = "3.1.4" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "markdown" +version = "3.7" +description = "Python implementation of John Gruber's Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"}, + {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, +] + +[package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +testing = ["coverage", "pyyaml"] + +[[package]] +name = "markupsafe" +version = "3.0.2" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.9" +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +] + +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +optional = false +python-versions = ">=3.6" +files = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] + +[[package]] +name = "mkdocs" +version = "1.6.1" +description = "Project documentation with Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"}, + {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} +ghp-import = ">=1.0" +jinja2 = ">=2.11.1" +markdown = ">=3.3.6" +markupsafe = ">=2.0.1" +mergedeep = ">=1.3.4" +mkdocs-get-deps = ">=0.2.0" +packaging = ">=20.5" +pathspec = ">=0.11.1" +pyyaml = ">=5.1" +pyyaml-env-tag = ">=0.1" +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, + {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, +] + +[package.dependencies] +mergedeep = ">=1.3.4" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" + +[[package]] +name = "mkdocs-glightbox" +version = "0.3.7" +description = "MkDocs plugin supports image lightbox with GLightbox." +optional = false +python-versions = "*" +files = [ + {file = "mkdocs-glightbox-0.3.7.tar.gz", hash = "sha256:4e890140a97dd4ad128cb92174384bd0ac33adec3304bbd2b7c48d0847685c4f"}, + {file = "mkdocs_glightbox-0.3.7-py3-none-any.whl", hash = "sha256:9659631a9829d93d8fb0ce3a20a10261c258605ba4dc87a3b7b5d847b93a276d"}, +] + +[[package]] +name = "mkdocs-material" +version = "9.5.47" +description = "Documentation that simply works" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_material-9.5.47-py3-none-any.whl", hash = "sha256:53fb9c9624e7865da6ec807d116cd7be24b3cb36ab31b1d1d1a9af58c56009a2"}, + {file = "mkdocs_material-9.5.47.tar.gz", hash = "sha256:fc3b7a8e00ad896660bd3a5cc12ca0cb28bdc2bcbe2a946b5714c23ac91b0ede"}, +] + +[package.dependencies] +babel = ">=2.10,<3.0" +colorama = ">=0.4,<1.0" +jinja2 = ">=3.0,<4.0" +markdown = ">=3.2,<4.0" +mkdocs = ">=1.6,<2.0" +mkdocs-material-extensions = ">=1.3,<2.0" +paginate = ">=0.5,<1.0" +pygments = ">=2.16,<3.0" +pymdown-extensions = ">=10.2,<11.0" +regex = ">=2022.4" +requests = ">=2.26,<3.0" + +[package.extras] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] +recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] + +[[package]] +name = "mkdocs-material-extensions" +version = "1.3.1" +description = "Extension pack for Python Markdown and MkDocs Material." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, + {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, +] + +[[package]] +name = "packaging" +version = "24.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, +] + +[[package]] +name = "paginate" +version = "0.5.7" +description = "Divides large result sets into pages for easier browsing" +optional = false +python-versions = "*" +files = [ + {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"}, + {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"}, +] + +[package.extras] +dev = ["pytest", "tox"] +lint = ["black"] + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "platformdirs" +version = "4.3.6" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] + +[[package]] +name = "pygments" +version = "2.18.0" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pymdown-extensions" +version = "10.12" +description = "Extension pack for Python Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pymdown_extensions-10.12-py3-none-any.whl", hash = "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77"}, + {file = "pymdown_extensions-10.12.tar.gz", hash = "sha256:b0ee1e0b2bef1071a47891ab17003bfe5bf824a398e13f49f8ed653b699369a7"}, +] + +[package.dependencies] +markdown = ">=3.6" +pyyaml = "*" + +[package.extras] +extra = ["pygments (>=2.12)"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] + +[[package]] +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] + +[package.dependencies] +pyyaml = "*" + +[[package]] +name = "regex" +version = "2024.11.6" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.8" +files = [ + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, + {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, + {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, + {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, + {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, + {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, + {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, + {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, + {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, + {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, + {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, + {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, + {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, + {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, +] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "urllib3" +version = "2.2.3" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "watchdog" +version = "6.0.0" +description = "Filesystem events monitoring" +optional = false +python-versions = ">=3.9" +files = [ + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2"}, + {file = "watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a"}, + {file = "watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680"}, + {file = "watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f"}, + {file = "watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + +[metadata] +lock-version = "2.0" +python-versions = ">=3.10,<3.14" +content-hash = "1c75ec97f541490c98698ae7377dada4b948f68af17d670719f66cf927bd0c3d" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..64c7819 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,19 @@ +[tool.poetry] +name = "getcodelimit" +version = "0.1.0" +description = "" +authors = ["Rob van der Leek "] +license = "GPL-3.0-or-later" +readme = "README.md" +package-mode = false + +[tool.poetry.dependencies] +python = ">=3.10,<3.14" + +[tool.poetry.group.dev.dependencies] +mkdocs-material = "^9.5.10" +mkdocs-glightbox = "^0.3.7" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..45a8ae7 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +mkdocs-material==9.5.10 +mkdocs-glightbox==0.3.7