From 6645ba8899c42fa3ea6d9b0397ccd5fcdd348e09 Mon Sep 17 00:00:00 2001 From: xavierxross Date: Fri, 5 Mar 2021 19:09:57 +0530 Subject: [PATCH] Boom --- Dockerfile | 6 + LICENSE | 661 ++++++++++++++++++ app.json | 40 ++ heroku.yml | 5 + lazyleech.session | Bin 0 -> 28672 bytes lazyleech/__main__.py | 48 ++ lazyleech/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 2528 bytes lazyleech/__pycache__/__main__.cpython-38.pyc | Bin 0 -> 1242 bytes lazyleech/_init_.py | 44 ++ .../__pycache__/autodetect.cpython-38.pyc | Bin 0 -> 3188 bytes .../plugins/__pycache__/help.cpython-38.pyc | Bin 0 -> 2858 bytes .../plugins/__pycache__/leech.cpython-38.pyc | Bin 0 -> 12777 bytes .../plugins/__pycache__/nyaa.cpython-38.pyc | Bin 0 -> 4692 bytes .../plugins/__pycache__/ping.cpython-38.pyc | Bin 0 -> 480 bytes .../plugins/__pycache__/pyexec.cpython-38.pyc | Bin 0 -> 3039 bytes .../__pycache__/thumbnail.cpython-38.pyc | Bin 0 -> 2375 bytes .../__pycache__/watermark.cpython-38.pyc | Bin 0 -> 2965 bytes lazyleech/plugins/autodetect.py | 98 +++ lazyleech/plugins/help.py | 108 +++ lazyleech/plugins/leech.py | 392 +++++++++++ lazyleech/plugins/nyaa.py | 156 +++++ lazyleech/plugins/ping.py | 22 + lazyleech/plugins/pyexec.py | 92 +++ lazyleech/plugins/thumbnail.py | 77 ++ lazyleech/plugins/watermark.py | 103 +++ lazyleech/utils/__init__.py | 57 ++ .../utils/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 2094 bytes .../utils/__pycache__/aria2.cpython-38.pyc | Bin 0 -> 4375 bytes .../__pycache__/custom_filters.cpython-38.pyc | Bin 0 -> 938 bytes .../utils/__pycache__/misc.cpython-38.pyc | Bin 0 -> 4782 bytes .../__pycache__/upload_worker.cpython-38.pyc | Bin 0 -> 7642 bytes lazyleech/utils/aria2.py | 132 ++++ lazyleech/utils/custom_filters.py | 39 ++ lazyleech/utils/misc.py | 144 ++++ lazyleech/utils/upload_worker.py | 264 +++++++ pre-commit | 46 ++ requirements.txt | 5 + run.sh | 6 + testwatermark.jpg | Bin 0 -> 260090 bytes 39 files changed, 2545 insertions(+) create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 app.json create mode 100644 heroku.yml create mode 100644 lazyleech.session create mode 100644 lazyleech/__main__.py create mode 100644 lazyleech/__pycache__/__init__.cpython-38.pyc create mode 100644 lazyleech/__pycache__/__main__.cpython-38.pyc create mode 100644 lazyleech/_init_.py create mode 100644 lazyleech/plugins/__pycache__/autodetect.cpython-38.pyc create mode 100644 lazyleech/plugins/__pycache__/help.cpython-38.pyc create mode 100644 lazyleech/plugins/__pycache__/leech.cpython-38.pyc create mode 100644 lazyleech/plugins/__pycache__/nyaa.cpython-38.pyc create mode 100644 lazyleech/plugins/__pycache__/ping.cpython-38.pyc create mode 100644 lazyleech/plugins/__pycache__/pyexec.cpython-38.pyc create mode 100644 lazyleech/plugins/__pycache__/thumbnail.cpython-38.pyc create mode 100644 lazyleech/plugins/__pycache__/watermark.cpython-38.pyc create mode 100644 lazyleech/plugins/autodetect.py create mode 100644 lazyleech/plugins/help.py create mode 100644 lazyleech/plugins/leech.py create mode 100644 lazyleech/plugins/nyaa.py create mode 100644 lazyleech/plugins/ping.py create mode 100644 lazyleech/plugins/pyexec.py create mode 100644 lazyleech/plugins/thumbnail.py create mode 100644 lazyleech/plugins/watermark.py create mode 100644 lazyleech/utils/__init__.py create mode 100644 lazyleech/utils/__pycache__/__init__.cpython-38.pyc create mode 100644 lazyleech/utils/__pycache__/aria2.cpython-38.pyc create mode 100644 lazyleech/utils/__pycache__/custom_filters.cpython-38.pyc create mode 100644 lazyleech/utils/__pycache__/misc.cpython-38.pyc create mode 100644 lazyleech/utils/__pycache__/upload_worker.cpython-38.pyc create mode 100644 lazyleech/utils/aria2.py create mode 100644 lazyleech/utils/custom_filters.py create mode 100644 lazyleech/utils/misc.py create mode 100644 lazyleech/utils/upload_worker.py create mode 100644 pre-commit create mode 100644 requirements.txt create mode 100644 run.sh create mode 100644 testwatermark.jpg diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e326d6c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM ubuntu:20.04 + +COPY run.sh requirements.txt testwatermark.jpg /app/ +COPY lazyleech /app/lazyleech/ +RUN apt update && apt install -y --no-install-recommends python3 python3-pip ffmpeg aria2 file && rm -rf /var/lib/apt/lists/* +RUN pip3 install -r /app/requirements.txt \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0ad25db --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 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 Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are 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. + + 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. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + 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 Affero 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. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + 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 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 work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero 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 Affero 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 Affero 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 Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/app.json b/app.json new file mode 100644 index 0000000..c65664a --- /dev/null +++ b/app.json @@ -0,0 +1,40 @@ +{ + "env": { + "API_ID": { + "description": "https://my.telegram.org" + }, + "API_HASH": { + "description": "https://my.telegram.org" + }, + "BOT_TOKEN": { + "description": "https://t.me/BotFather" + }, + "TESTMODE": { + "description": "Use Telegram's test servers", + "value": "0", + "required": false + }, + "EVERYONE_CHATS": { + "description": "Chats for everyone, space seperated, IDs only" + }, + "ADMIN_CHATS": { + "description": "Chats for admins, space seperated, IDs only" + }, + "PROGRESS_UPDATE_DELAY": { + "description": "Delay for progress and other things", + "value": "10", + "required": false + }, + "MAGNET_TIMEOUT": { + "description": "Timeout for magnets", + "value": "60", + "required": false + }, + "LEECH_TIMEOUT": { + "description": "Timeout for leeches", + "value": "300", + "required": false + } + }, + "stack": "container" +} \ No newline at end of file diff --git a/heroku.yml b/heroku.yml new file mode 100644 index 0000000..12a78fe --- /dev/null +++ b/heroku.yml @@ -0,0 +1,5 @@ +build: + docker: + worker: Dockerfile +run: + worker: sh /app/run.sh \ No newline at end of file diff --git a/lazyleech.session b/lazyleech.session new file mode 100644 index 0000000000000000000000000000000000000000..1a16450803e16d65346bb54bdcfc5700c44ce31b GIT binary patch literal 28672 zcmeI(Z)_7~90%~b_O_0~IQ|G7`x74}%UT$aNe~IypLV@%4PD2&4p<25+V$8DSg-4~ zFa*VoksyNc1&aDoP!fz1KrxGnOvQjph~Nt$k}R5$Ax4ZdD58Y<-1RQ&hD%J0FM#ip z-k(0t@A=*He6D@*tha`GuapqUMmgRQN|2?@42ETy3PKo$X{MWnZbr$XC!Fzy9@(_> z$xfS@#g(6D(^kvWOAKE;eOh*3wvwGU?KFLh0s#m>00Izz00bZa0SNq8f$p%yl2>ZW z>e-QqOKojpJP~gT#zZl$1h<5gL@*hPgc4#w z+U2Mij3zt6Vq6=VMW3L@=N8t{H2)MxjCl}ydVj~7j7(dJja4RGBdLh-XsAQf@@Gzx z-v~;}ZB#kjT&Ati#;%``SBhvEGbYJM3C6}LMI80!Oj}+ayCV?_ZxOfB+bhXY{lFP_ z)#>sIM6a~kHP4idVN6#0J+)4M6ImrRSsgtECX3BxV|(XmNwwi ztYN~ZZem*E7OI?$-T<-xyHBIT>gcX#Ew+LJwkN6iD0D^?T``WPaY{z54i#w)>Q=@; z(&%*uk$ycpLw|{u$)jk>eW_< zx;AI0-(=_u1p*L&00bZa0SG_<0uX=z1R(Hm2=vUz$YQd3r*Yhr(hISX&OpE~tTW%$D2f|~vfj(1}<$967# z|MJDQ-*(7mq$Mx$oepMv-@D-3l}f$o4e-r^L=|) zBwaVMOwyrcT;$ASCtulJ_NM%J`OIsLtNt9ku_yPymS*eHibf&sZz}le>ZZHveK{Y5 zf7(WJ+5S08hK@IFI@WzFbm`!(p>LOaR_?CukU5ZqaW9{9O3LwSK0S1KK|NZ`|q3cFWs5bnJ=8XUUt^k z;#yR(!F#GiUH_Z;UWPxxU!eyS2tWV=5P$##AOHafKmY;|fB*#kCxN0pKb{;eu`rpl zmoVHjRj(4T(a(ybNSESs#PDN=n8F>=w3~&#%aI* z^LH8gLV*ATAOHafKmY;|fB*y_009U<;2{(+nM{n8&dbbSVfbtOEqXwK00bZa0SG_< z0uX=z1Rwwb2teQg5}0b{IQ98{b>qz$8KZN*F77N(?bSB-y6{zXORfJ07=DPq$qzh0 z6U0y<009U<00Izz00bZa0SG_<0*|CXj(G`p-+v6K%l|26MqmEVGSBDIp8p?P{|__# w&-@?!@FNL_Nkaev5P$##AOHafKmY;|fB*y@5&?^u(Vhkv`%{2gqptt|23yQAn*aa+ literal 0 HcmV?d00001 diff --git a/lazyleech/__main__.py b/lazyleech/__main__.py new file mode 100644 index 0000000..b150c43 --- /dev/null +++ b/lazyleech/__main__.py @@ -0,0 +1,48 @@ +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import asyncio +import logging +import traceback +from pyrogram import idle +from . import app, ADMIN_CHATS, preserved_logs +from .utils.upload_worker import upload_worker + +logging.basicConfig(level=logging.INFO) +logging.getLogger('pyrogram.syncer').setLevel(logging.WARNING) + +async def main(): + async def _autorestart_worker(): + while True: + try: + await upload_worker() + except Exception as ex: + preserved_logs.append(ex) + logging.exception('upload worker commited suicide') + tb = traceback.format_exc() + for i in ADMIN_CHATS: + try: + await app.send_message(i, 'upload worker commited suicide') + await app.send_message(i, tb, parse_mode=None) + except Exception: + logging.exception('failed %s', i) + tb = traceback.format_exc() + asyncio.create_task(_autorestart_worker()) + await app.start() + await idle() + await app.stop() + +app.loop.run_until_complete(main()) diff --git a/lazyleech/__pycache__/__init__.cpython-38.pyc b/lazyleech/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24d253f71a83f4914d0f25af3c736977c7859cab GIT binary patch literal 2528 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 literal 0 HcmV?d00001 diff --git a/lazyleech/plugins/__pycache__/help.cpython-38.pyc b/lazyleech/plugins/__pycache__/help.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94a36df3f3cc9d434a995ef8ead64606eaaa10c3 GIT binary patch literal 2858 zcmcJROK%*-7RRfq-#rgI!2}xu^bIc!Tt>VfA%c+jA_BS51qT8nUk&Z4vfZA3jH_!% z#_CxamPjmEfskf|gcLplySqoMYs=mED|kUTr+fTJ011ScR-LXoU45#$&i_|6?=>1e zf#3Ttp8qJki;$nNar|dP<2;o7doY}E8j}v*SxghwVTsW(D7KB*OstNT*c}_%CbwcI zaXW6}b-c1|$9_`l)F=^bQWwUg!JR3EdsDbmdY()vce(co*`=L1K_>H4(m5ec?vl=3 z(0@VHCU4*S=*U-rMJ>|sn6dHs$a4c;t!EOEL*T625w1>{PLY5QUviBxH4 zJ&Ki(Ik*-srE!#sx5a2J3nl+|DEq^~o!$#WrLuI7K^S<&d;Rj|?!`A>zq+EmO%V^e zJnE?y)y>{8S6R}X1=l7%?BPoXKU{Ga%KxC`PfaB@=T>#_SqN7fqt9zAu+4!Ha|ULz1!&h_aW-f8Q7z$}ZrYRW>%qR$(5#YZk^~ z-6&XL6y`eX+wv{tV7_+Q2Hl`z$lmt;_FEX0+hc2kjBO}R8GHG**lyuWT;;$BFf;BH z##iKPw##td$}5~*$Y|e`-xl@+dZHKOY=2uga{tH&U+x!{suec$_da8n;CtRAV-NiG ztwzDtnQ9i^)*RHmt@(9!4xU3U{VV%4*n^cL5{))5guVVO4Qo){d3Z&{qNf72DS{;9 z!&n5PY#3Y*Qx#x7g6omm)OMM-M54%VQeBr~5RbY^nf%rXZ7Oj?X)7PZk8)z%e zt_uk+C8L4%FQr`E_?MKKl$cLx;au!+Fc2x%Ml4e8S0OQwH1VmoEqak( zW1Mj}O4l=O_BKPM{Y2z>xFNa`Z~5Bp&D1*cYPt*%)&IzBLxxEJq80h-#W+jFDjz0mtFaKh&0sB4 zt8ut9DqFu<8^ptnD9u-KMcadscFU#hCHx*3B7X@CVNL2&Mi(gFU0Sa$=HD_6o0+t_ z(0?x!pW5K@=^~X+z`L>u<~E4x;6RW{h=7F>B7|p)ZlN{S+1MxyW%eEU0?5fiytu*5 z&x}fBh|UT?^Bk$#U;ZD2YfhZw5vFu(7ABx%jqSpMDDD>P8}f@Xo(0kD1IbcyjXY1@ znZ?wH{RuwoNyI-7B|8m-!u{j*m$ zqr8G-rnmswD$9Z_<^WWvf=dC<(#L?L@M966aDyxjBGtaSHxGHb$+VwuX4ku6EF`G8 z7xp$qS4D}~x7zJ?n%$)GDa`2{8f0(hkw1cKTh2q@*1Y@&zV`r{(`X(J;5W@J;bzCmjSw)hj?xeg&dV5>yt-#!YLB1 zM=+vU;_D#SK&^IR+)zbXDj&fi9!2vInupOmh6d5A%;Q)?eV>JrKLds^8z6D%DL|kJ zz#tS0aQP)9zeeOV-Kls>+E3gD34ZS(BnKzWUxMVvzX1}u<#C6TPuUVcQaH*7WPd<$ za*+E0tiOquQ`mh2@M?nmYsxR2CBgwKRaXt}^ICPL0YLTRKoriO0HSe4{u37Qs(ccx zY@>M^4W?ta~2AEFsz}Hrzfyj@htBG{57m83@Llwoj^sw${Y4_kTb9z~l zgek9h#;snPmjT*xQD7Ho|0$Mrl47dh()!8ET0~d}VxZk%(e*tVZvI+nI literal 0 HcmV?d00001 diff --git a/lazyleech/plugins/__pycache__/leech.cpython-38.pyc b/lazyleech/plugins/__pycache__/leech.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c32b9e7680b7ef219f392586bf4c5443ec74cc24 GIT binary patch literal 12777 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 literal 0 HcmV?d00001 diff --git a/lazyleech/plugins/__pycache__/ping.cpython-38.pyc b/lazyleech/plugins/__pycache__/ping.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..df92662d11cdcec0b424f343e558dde595149648 GIT binary patch literal 480 zcmZvZPfNov6u^_LYrDCDf`=V<-NmaQBAfFtVT{4lLn+j*iCrOSO45N9Z~8&Dqo2cX zk*lYD1y8=z2|M`U{SEKE-y`?kZX1C-oDUy+4nkixITRO?A*j9vLlMOs2^?TS0)i1G zw80y~2^@?V-ZUB6xYXHV@E!v{L|aUo)O|;9IPj^rKm&gVbI^bocg!=Em&SX_c*&IB z5nIQmHJVPN@nm$jFiw%>X=3YtV&ewrC#XIJ^NKgXw8gi;HbFpyUw4lVRqQJIzvq5?Q9sIJc-stfUK&@z5e{Vr7YLD{1WQcdgHGLQCv#!I9S jaZZhstm3lnu8|K+$M*P_Lee#7S0|8Z`)S9xLwfiJ;Rtw< literal 0 HcmV?d00001 diff --git a/lazyleech/plugins/__pycache__/pyexec.cpython-38.pyc b/lazyleech/plugins/__pycache__/pyexec.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dac9963e48595fd277906d5209d520af27c9d8ac GIT binary patch literal 3039 zcma)8PjlPG72gFw5CkcTq$pc<)P%hxW&gNtn>d+_sB4sp7^)Pz4qj<&{N-An35AEof5Ne-|oKMegA%Md4Fxq zCGh+0+c$p~Gzs}P4qpD*Ft`aVje#)2XhgiSrykW~!!vYmdZz9z&w}2FDr4KT$5pRN z2{V}$IpdmF8@rxM3Ac+nuNDnfSyJfNcx_2E&exRdPn4Q1bs zLLN(19fpzQB7JVa0?gNM-TCFcegF2}tq%@Veay#+nEN2ZmBnX#FhH@@Zxa}_^`Fqv zFJR?oU=1^#g081VZe;Wr^(22bu8@K*Np5Cl`c6g*gIP;@4{Y8eUzRwUmOAGR**b3LYd|}BQ*JPq)jy^Ay4*M=*}C67n`!Bpmfy|RWy^18Eufu6ws=o& z7MHU6l72?T&sl@5JtbNF#}K6#=eOhStX}dXnzyrdW{l{G0n)<}$=hJ(n_%bV6BlOw zM!|=afUga?Ra{wuWvuzBvGVRi@*(-Vi#~n;+*>3AtwEC}YVrWIEv~Y4^k&vNOGy}TUlF2xvjm^xdYzGJFHc_$~xyWkTD(DrSF{lk!`@JQM|^w7_Y2@nX>W& zdZ53#KUk&is;9u*gqAjdaDo5?@F7%;#rMTD_6G^$*LI?05Jc(jwfk}SWXkUX5Prku zRK)ifU??1hTn?}eteE-Qbh{}~`MAYFXP5yKL&bx=d7Rg8i z;~qjRJ-i(yF+XI}@zG(#`QUNyD3OOzu$b%7*K(6+Itt_Ta56`HUYpF-)o<2v8%;$B zJ5;Pe_q+mR;h>SdA6>t$D*lvD>aFe55-(NKelgMql-S31+z;7X1(A z6aLX;{>a_IeB1pb-}#|t+yfa%{t=>TD#6M}@As*y9L*(9F9h5Ht^S4jtpdJi{R9HN z2gNOipkugiK)#4J$dtBq&o~V{jI+25 zlCcK@IvKahWR#Har?h~l5Fe2;CHqwLL9A~n>#-b1$_8VD30Gz+g{lAvC*qq_e+V1T za`S>32x$%0t(6+B9MF)_zrySM`3poqd9%wfEUGWU@W0*Vy?m!vo5qX}! zIeX;(YAPpF**kPU$@@KJNj{U}2XL%%1)oH7Ur!()#H&a!TgA6=-3}%b9y8A_i>|Wv zp~@=j7fHZW{a_x;V0KrCL_k)jBk^6__dUIDn22!zm`~@avQx>Dsnk6eLg3#pWgkt4 zLoQSmD(Hj{q;kVl=PjhIs@~uY+Kl+~Og@{57IKX;Gnjsg zyqZ?ePmYdNMY~PBjR(GilFg3=dW!j_sb3m{$(~aJl`}yW3;H&_F zKuaSa#Aq5FYS9)nm)cMjwy9GyXai!GtjxO*eb!ihuO)B=_zW%x{kKzXKWmMlq?x#SM19eV6oC2Q#VIslDO?3B;;E~a6M?sq`f@@s+STlByG%JzEz literal 0 HcmV?d00001 diff --git a/lazyleech/plugins/__pycache__/thumbnail.cpython-38.pyc b/lazyleech/plugins/__pycache__/thumbnail.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a508aef79b4375e210f72c76b7aced5e3b325679 GIT binary patch literal 2375 zcmbVNTZDyd(cC(uchz=4XgSrEP3T6pOHiR{V5Y0wIv(k2^DziP?m$9lg z$qqeF<7+UFf(SFg7k`I;z~_4PDc~;<5l_|3^v(pqOE-PGzEh{F&b{u}>pp_#^N+56 z^+yAtUlmw>JOEeW<39o+h~NYTvp)_nU?VY7GcZ#turMMfv64z^2X^WNj>eV5O})TN z{lHJFK@}rvPHNPe)QL?T;`Yob2GpST6kkPCOg!RzgT^>mE9HDrB{fnfjb7yy*)>wt zvQ5&Y4zYJYyL+g;{t`4rciM)ucaxZALOPG)L{P?G8ZZHT@7nF#;qKnG{d>|oq{$#8 zaaXiW+34okW6DG*@~}VX$@Lx;A*`ig8mCm845(at62VSs#E!zjVJ>p%iNoXcVHU-S ztn=tGEn!gORFtTzj$S-97%0E~3?JWsnF9CG$N-8*CQxH!5j?8E$n0AqTU7e?#1U>` zk1;W(#>fGVH^<=dX9h-v$!`@FlZC~L!tDE`a)g-FE31HO;92_ua9~_#N}@h#5NC=( zX06|x@8v$j-|mgv0#DWpx4$vPpFpJd5JuvR!s9s}d4)G${fpRCGlerY7P7<~RlYzU zpij|f=m8R2g#j@&$L4d)UlbKh4Q;2P>?{=DF0AL6y-<{2Uuds5uj;R*KzH~nxw#Em za@C4kV1@B-t$_94{gWL^bN1&-Bz%a3zrv{kr>Z$;3xA4X#c$$V;S_#R9h(dPfOpRm zh{pnFP0gvFatMMfZrr&!te5Gt4e7Yw#?qxvV=lt{C`M?4USdd~p&h4Dk9J_zBr%f} znhwOtuwEvrT06W@LQ2AwZHM*!MFzJZV~1P2QI_SR^(f9rtCVbCkWEGh$%(3slyVM7 zN|)r_<5X2xWnK)ASe}N*oHA*|L>f7l)*upx((31NCQUAwbkpdFf}&h{y0myagq`>x zi3NQs=FBWgsq|FUg}Ur~E+QuQlNk1L1z4z-%8ff9M)m>bEMg}&6%TZJk|lXWq@^}t zF1Uy}K%@iJ90}0Cj=5USR0&FdZWWx}u1UK)?-&acD|(u(t6esL1g>@oI7&Lo&M+oH zqx4d!j14@cpyq+G^TrW)WdP(>Ib4p#Pl&w>2mJov#>WSDS>9t&3Nc71KiEz3j2;kZ zGY1K!-NV+yTpT3P@I<4(9SxG>UYzlRQnT&B39G{P=iuYlfgr=i>b0Hc|o8uZxQ*qiYSNfv~ z>e=w={&*J#1m8ekemF7&>f?zaRFAa!l`$@i@8JgeLG{GhoLv~u(=34|jv8U~wFTAX z61Zg+^`@)Kg6n~)i;uknWN7IcS>Ion($bbu()QSv5<07haveLb$Qea86}bpR+B4(W zTL9W7yQC)GRzxpTLDi9E@2Sx?kRABAzIF{4zlLk@s#~c%K60V3JEiwpJMooEiMSl` zmd?hO$XmMRTRCe1Gir6Cfr#_$Qcqmo>BLw3&hpjsf0i#_WdD7=-&xHJzq6DX09JFs z?<}W^M$4JeUZ2I_4RD%tA&qruFm<0Yl_(OiiW;kg3H)ObCwx1Nc~=+xto&z%o@Zs_ za=Lk%Mj7;o?qMW!Vd%ij;F%UCIZo&m)daX|0xncb6W&eZb?je!6Z_6zkU5~! literal 0 HcmV?d00001 diff --git a/lazyleech/plugins/__pycache__/watermark.cpython-38.pyc b/lazyleech/plugins/__pycache__/watermark.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9e3bfa39f3697e37b2abbdd9d326a926e4b6d6ea GIT binary patch literal 2965 zcmbVO&2Jk;6rb5$@0UN~q)nQ%6|xG7uz*CWLWim${Vz0s4AE4@)*ANHVtQykZh(g*C(%A_kK^cE-KnK{p zn|JTlH}2eg_&|Cs8g=U=YzVN=HmRtCFRjO6OvQee%9*_YM#cf#t#@0ANTin;WRVA7 z(oC%tI2D=JP@g)vO3+Xk{0I+!3_U4sqrL$W_f3#S-y*o5gO=I0`nJfm?SUiQ)IP+- z7#e*CEZ#_m{69A^N=^Q8YO$l#;%REOeUjTn>`0HygI<7K+e=`9c9AKM;-EyFAqJnB zc6l_H`y9V$_1zQ?W>dF4H^d(S?spJI;*8P{M|$5&z0v4Dh}qAHv#CS8L*vDzzMr~- zdEyUoKcD8geDZth4;Iq=5M%V@=SS#$^a;9;9;0zfoJ$Qr+&na2V*V=4X=&&@7%C5` zvM;CBOUzy=$+u6UQCbJTy-b0gTR*(iovmSzBht z7J^{!mp5-86|+sa((X1NRtUXz4O8hhKX)fSaG z8h6G1K~c1N@pdN&BQ?p!4&8wa}-R?MZR zE0u=_Fca@ap`cI2$k+*DDm_)ibzQ|i7XcG|FNC>V0THU9a&8mc$U{&Q7O?%>$_8uN z>qJRFq@^Zdj>?IZbZJLgjDk70$KXrS0jdZDtj7+ynvA*1(I3SKE2);G-5Al&Nx(VX z&E~~jGWJ=nFQ=R z#IC}3j~?H;wsnssO%}ueR7CmKMwE2u76Ht+B1#*r%61~QqTpa(Yk%A7M!ja(;al04 zR=WF4?V)q<@cST;VPkb$*u`^jyZEwxm$47Ff}x~=EBLJTD&VzIZ(-D{MqYwGHMXRr zQ7bhf8nEn>GSA{nsTBx~#@Y;{aWYBJGtf=Nn6alg+JxoW@Mw;{2MvO6q0g`M4T0Kt zUbFiT4p zs0Xyy>ndJ3hD8IUu~~z8HsRrl5RkC|xRhbrFTjR}649kmHELeAO@c+B@6~LVSJuKC z%aOPq@QPkbMI;r??3IL7z!+2-L05!HXSpe^udRkR{ME_dl>ak)@~7v&kM~!nE7)J1 zs9;d0Yt~<#ENQJxRs>9i!oE#5X-5y+TAt3C&GxY#365J znjcYk(#Z}er;)^Q(1Ej{(F%m-HeE|hfi?kThNg7a;)L`fdSezmG^8%DURmA78`xjD Lgnefb`^7&289Og+ literal 0 HcmV?d00001 diff --git a/lazyleech/plugins/autodetect.py b/lazyleech/plugins/autodetect.py new file mode 100644 index 0000000..9b07fcf --- /dev/null +++ b/lazyleech/plugins/autodetect.py @@ -0,0 +1,98 @@ +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import os +import re +import time +import asyncio +import tempfile +from urllib.parse import urlsplit +from pyrogram import Client, filters +from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton +from .. import ALL_CHATS, SendAsZipFlag, ForceDocumentFlag +from ..utils.misc import get_file_mimetype +from ..utils import custom_filters +from .leech import initiate_torrent, initiate_magnet + +NYAA_REGEX = re.compile(r'^(?:https?://)?(?P(?:www\.|sukebei\.)?nyaa\.si|nyaa\.squid\.workers\.dev)/(?:view|download)/(?P\d+)(?:[\./]torrent)?$') +auto_detects = dict() +@Client.on_message(filters.chat(ALL_CHATS), group=1) +async def autodetect(client, message): + text = message.text + document = message.document + link = None + is_torrent = False + if document: + if document.file_size < 1048576 and document.file_name.endswith('.torrent') and (not document.mime_type or document.mime_type == 'application/x-bittorrent'): + os.makedirs(str(message.from_user.id), exist_ok=True) + fd, link = tempfile.mkstemp(dir=str(message.from_user.id), suffix='.torrent') + os.fdopen(fd).close() + await message.download(link) + mimetype = await get_file_mimetype(link) + is_torrent = True + if mimetype != 'application/x-bittorrent': + os.remove(link) + link = None + is_torrent = False + if not link and text: + match = NYAA_REGEX.match(text) + if match: + link = f'https://{match.group("base")}/download/{match.group("sauce")}.torrent' + is_torrent = True + else: + splitted = urlsplit(text) + if splitted.scheme == 'magnet' and splitted.query: + link = text + if link: + reply = await message.reply_text(f'{"Torrent" if is_torrent else "Magnet"} detected. Select upload method', reply_markup=InlineKeyboardMarkup([ + [InlineKeyboardButton('Individual Files', 'autodetect_individual'), InlineKeyboardButton('Zip', 'autodetect_zip'), InlineKeyboardButton('Force Document', 'autodetect_file')], + [InlineKeyboardButton('Delete', 'autodetect_delete')] + ])) + auto_detects[(reply.chat.id, reply.message_id)] = link, message.from_user.id, (initiate_torrent if is_torrent else initiate_magnet) + +answered = set() +answer_lock = asyncio.Lock() +@Client.on_callback_query(custom_filters.callback_data(['autodetect_individual', 'autodetect_zip', 'autodetect_file', 'autodetect_delete']) & custom_filters.callback_chat(ALL_CHATS)) +async def autodetect_callback(client, callback_query): + message = callback_query.message + identifier = (message.chat.id, message.message_id) + result = auto_detects.get(identifier) + if not result: + await callback_query.answer('I can\'t get your message, please try again.', show_alert=True, cache_time=3600) + return + link, user_id, init_func = result + if callback_query.from_user.id != user_id: + await callback_query.answer('...no', cache_time=3600) + return + async with answer_lock: + if identifier in answered: + await callback_query.answer('...no') + return + answered.add(identifier) + asyncio.create_task(message.delete()) + data = callback_query.data + start_leech = data in ('autodetect_individual', 'autodetect_zip', 'autodetect_file') + if start_leech: + if getattr(message.reply_to_message, 'empty', True): + await callback_query.answer('Don\'t delete your message!', show_alert=True) + return + if data == 'autodetect_zip': + flags = (SendAsZipFlag,) + elif data == 'autodetect_file': + flags = (ForceDocumentFlag,) + else: + flags = () + await asyncio.gather(callback_query.answer(), init_func(client, message.reply_to_message, link, flags)) diff --git a/lazyleech/plugins/help.py b/lazyleech/plugins/help.py new file mode 100644 index 0000000..f42c15c --- /dev/null +++ b/lazyleech/plugins/help.py @@ -0,0 +1,108 @@ +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import asyncio +from pyrogram import Client, filters +from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton +from .. import ALL_CHATS, help_dict +from ..utils import custom_filters + +@Client.on_message(filters.command('help') & filters.chat(ALL_CHATS)) +async def help_cmd(client, message): + module = message.text.split(' ', 1) + module.pop(0) + try: + module = module[0].lower().strip() + except IndexError: + module = None + for internal_name in help_dict: + external_name, text = help_dict[internal_name] + external_name = external_name.lower().strip() + internal_name = internal_name.lower().strip() + if module in (internal_name, external_name): + buttons = [ + [InlineKeyboardButton('Back', 'help_back')] + ] + break + else: + module = None + text = 'Select the module you want help with' + buttons = [] + to_append = [] + for internal_name in help_dict: + external_name, _ = help_dict[internal_name] + to_append.append(InlineKeyboardButton(external_name.strip(), f'help_m{internal_name}')) + if len(to_append) > 2: + buttons.append(to_append) + to_append = [] + if to_append: + buttons.append(to_append) + reply = await message.reply_text(text, reply_markup=InlineKeyboardMarkup(buttons)) + callback_info[(reply.chat.id, reply.message_id)] = message.from_user.id, module + +callback_lock = asyncio.Lock() +callback_info = dict() +@Client.on_callback_query(custom_filters.callback_data('help_back') & custom_filters.callback_chat(ALL_CHATS)) +async def help_back(client, callback_query): + message = callback_query.message + message_identifier = (message.chat.id, message.message_id) + if message_identifier not in callback_info: + await callback_query.answer('This help message is too old that I don\'t have info on it.', show_alert=True, cache_time=3600) + return + async with callback_lock: + info = callback_info.get((message.chat.id, message.message_id)) + user_id, location = info + if user_id != callback_query.from_user.id: + await callback_query.answer('...no', cache_time=3600) + return + if location is not None: + buttons = [] + to_append = [] + for internal_name in help_dict: + external_name, _ = help_dict[internal_name] + to_append.append(InlineKeyboardButton(external_name.strip(), f'help_m{internal_name}')) + if len(to_append) > 2: + buttons.append(to_append) + to_append = [] + if to_append: + buttons.append(to_append) + await message.edit_text('Select the module you want help with.', reply_markup=InlineKeyboardMarkup(buttons)) + callback_info[message_identifier] = user_id, None + await callback_query.answer() + +@Client.on_callback_query(filters.regex('help_m.+') & custom_filters.callback_chat(ALL_CHATS)) +async def help_m(client, callback_query): + message = callback_query.message + message_identifier = (message.chat.id, message.message_id) + if message_identifier not in callback_info: + await callback_query.answer('This help message is too old that I don\'t have info on it.', show_alert=True, cache_time=3600) + return + async with callback_lock: + info = callback_info.get((message.chat.id, message.message_id)) + user_id, location = info + if user_id != callback_query.from_user.id: + await callback_query.answer('...no', cache_time=3600) + return + module = callback_query.data[6:] + if module not in help_dict: + await callback_query.answer('What module?') + return + if module != location: + await message.edit_text(help_dict[module][1], reply_markup=InlineKeyboardMarkup([ + [InlineKeyboardButton('Back', 'help_back')] + ])) + callback_info[message_identifier] = user_id, module + await callback_query.answer() diff --git a/lazyleech/plugins/leech.py b/lazyleech/plugins/leech.py new file mode 100644 index 0000000..7ddba9a --- /dev/null +++ b/lazyleech/plugins/leech.py @@ -0,0 +1,392 @@ +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import os +import time +import html +import asyncio +import tempfile +from urllib.parse import urlparse, urlunparse, unquote as urldecode +from pyrogram import Client, filters +from pyrogram.parser import html as pyrogram_html +from .. import ADMIN_CHATS, ALL_CHATS, PROGRESS_UPDATE_DELAY, session, help_dict, LEECH_TIMEOUT, MAGNET_TIMEOUT, SendAsZipFlag, ForceDocumentFlag +from ..utils.aria2 import aria2_add_torrent, aria2_tell_status, aria2_remove, aria2_add_magnet, Aria2Error, aria2_tell_active, is_gid_owner, aria2_add_directdl +from ..utils.misc import format_bytes, get_file_mimetype, return_progress_string, calculate_eta, allow_admin_cancel +from ..utils.upload_worker import upload_queue, upload_statuses, progress_callback_data, upload_waits, stop_uploads + +@Client.on_message(filters.command(['torrent', 'ziptorrent', 'filetorrent']) & filters.chat(ALL_CHATS)) +async def torrent_cmd(client, message): + text = (message.text or message.caption).split(None, 1) + command = text.pop(0).lower() + if 'zip' in command: + flags = (SendAsZipFlag,) + elif 'file' in command: + flags = (ForceDocumentFlag,) + else: + flags = () + link = None + reply = message.reply_to_message + document = message.document + if document: + if document.file_size < 1048576 and document.file_name.endswith('.torrent') and (not document.mime_type or document.mime_type == 'application/x-bittorrent'): + os.makedirs(str(message.from_user.id), exist_ok=True) + fd, link = tempfile.mkstemp(dir=str(message.from_user.id), suffix='.torrent') + os.fdopen(fd).close() + await message.download(link) + mimetype = await get_file_mimetype(link) + if mimetype != 'application/x-bittorrent': + os.remove(link) + link = None + if not link: + if text: + link = text[0].strip() + elif not getattr(reply, 'empty', True): + document = reply.document + link = reply.text + if document: + if document.file_size < 1048576 and document.file_name.endswith('.torrent') and (not document.mime_type or document.mime_type == 'application/x-bittorrent'): + os.makedirs(str(message.from_user.id), exist_ok=True) + fd, link = tempfile.mkstemp(dir=str(message.from_user.id), suffix='.torrent') + os.fdopen(fd).close() + await reply.download(link) + mimetype = await get_file_mimetype(link) + if mimetype != 'application/x-bittorrent': + os.remove(link) + link = reply.text or reply.caption + if not link: + await message.reply_text('''Usage: +- /torrent <Torrent URL or File> +- /torrent (as reply to a Torrent URL or file) + +- /ziptorrent <Torrent URL or File> +- /ziptorrent (as reply to a Torrent URL or File) + +- /filetorrent <Torrent URL or File> - Sends videos as files +- /filetorrent (as reply to a Torrent URL or file) - Sends videos as files''') + return + await initiate_torrent(client, message, link, flags) + await message.stop_propagation() + +async def initiate_torrent(client, message, link, flags): + user_id = message.from_user.id + reply = await message.reply_text('Adding torrent...') + try: + gid = await aria2_add_torrent(session, user_id, link, LEECH_TIMEOUT) + except Aria2Error as ex: + await asyncio.gather(message.reply_text(f'Aria2 Error Occured!\n{ex.error_code}: {html.escape(ex.error_message)}'), reply.delete()) + return + finally: + if os.path.isfile(link): + os.remove(link) + await handle_leech(client, message, gid, reply, user_id, flags) + +@Client.on_message(filters.command(['magnet', 'zipmagnet', 'filemagnet']) & filters.chat(ALL_CHATS)) +async def magnet_cmd(client, message): + text = (message.text or message.caption).split(None, 1) + command = text.pop(0).lower() + if 'zip' in command: + flags = (SendAsZipFlag,) + elif 'file' in command: + flags = (ForceDocumentFlag,) + else: + flags = () + link = None + reply = message.reply_to_message + if text: + link = text[0].strip() + elif not getattr(reply, 'empty', True): + link = reply.text or reply.caption + if not link: + await message.reply_text('''Usage: +- /magnet <Magnet URL> +- /magnet (as reply to a Magnet URL) + +- /zipmagnet <Magnet URL> +- /zipmagnet (as reply to a Magnet URL) + +- /filemagnet <Magnet URL> - Sends videos as files +- /filemagnet (as reply to a Magnet URL) - Sends videos as files''') + return + await initiate_magnet(client, message, link, flags) + +async def initiate_magnet(client, message, link, flags): + user_id = message.from_user.id + reply = await message.reply_text('Adding magnet...') + try: + gid = await asyncio.wait_for(aria2_add_magnet(session, user_id, link, LEECH_TIMEOUT), MAGNET_TIMEOUT) + except Aria2Error as ex: + await asyncio.gather(message.reply_text(f'Aria2 Error Occured!\n{ex.error_code}: {html.escape(ex.error_message)}'), reply.delete()) + except asyncio.TimeoutError: + await asyncio.gather(message.reply_text('Magnet timed out'), reply.delete()) + else: + await handle_leech(client, message, gid, reply, user_id, flags) + +@Client.on_message(filters.command(['directdl', 'direct', 'zipdirectdl', 'zipdirect', 'filedirectdl', 'filedirect']) & filters.chat(ALL_CHATS)) +async def directdl_cmd(client, message): + text = message.text.split(None, 1) + command = text.pop(0).lower() + if 'zip' in command: + flags = (SendAsZipFlag,) + elif 'file' in command: + flags = (ForceDocumentFlag,) + else: + flags = () + link = filename = None + reply = message.reply_to_message + if text: + link = text[0].strip() + elif not getattr(reply, 'empty', True): + link = reply.text + if not link: + await message.reply_text('''Usage: +- /directdl <Direct URL> | optional custom file name +- /directdl (as reply to a Direct URL) | optional custom file name +- /direct <Direct URL> | optional custom file name +- /direct (as reply to a Direct URL) | optional custom file name + +- /zipdirectdl <Direct URL> | optional custom file name +- /zipdirectdl (as reply to a Direct URL) | optional custom file name +- /zipdirect <Direct URL> | optional custom file name +- /zipdirect (as reply to a Direct URL) | optional custom file name + +- /filedirectdl <Direct URL> | optional custom file name - Sends videos as files +- /filedirectdl (as reply to a Direct URL) | optional custom file name - Sends videos as files +- /filedirect <Direct URL> | optional custom file name - Sends videos as files +- /filedirect (as reply to a Direct URL) | optional custom file name - Sends videos as files''') + return + split = link.split('|', 1) + if len(split) > 1: + filename = os.path.basename(split[1].strip()) + link = split[0].strip() + parsed = list(urlparse(link, 'https')) + if parsed[0] == 'magnet': + if SendAsZipFlag in flags: + prefix = 'zip' + elif ForceDocumentFlag in flags: + prefix = 'file' + else: + prefix = '' + await message.reply_text(f'Use /{prefix}magnet instead') + return + if not parsed[0]: + parsed[0] = 'https' + if parsed[0] not in ('http', 'https'): + await message.reply_text('Invalid scheme') + return + link = urlunparse(parsed) + await initiate_directdl(client, message, link, filename, flags) + +async def initiate_directdl(client, message, link, filename, flags): + user_id = message.from_user.id + reply = await message.reply_text('Adding url...') + try: + gid = await asyncio.wait_for(aria2_add_directdl(session, user_id, link, filename, LEECH_TIMEOUT), MAGNET_TIMEOUT) + except Aria2Error as ex: + await asyncio.gather(message.reply_text(f'Aria2 Error Occured!\n{ex.error_code}: {html.escape(ex.error_message)}'), reply.delete()) + except asyncio.TimeoutError: + await asyncio.gather(message.reply_text('Connection timed out'), reply.delete()) + else: + await handle_leech(client, message, gid, reply, user_id, flags) + +leech_statuses = dict() +async def handle_leech(client, message, gid, reply, user_id, flags): + prevtext = None + torrent_info = await aria2_tell_status(session, gid) + last_edit = 0 + start_time = time.time() + message_identifier = (reply.chat.id, reply.message_id) + leech_statuses[message_identifier] = gid + download_speed = None + while torrent_info['status'] in ('active', 'waiting', 'paused'): + if torrent_info.get('seeder') == 'true': + break + status = torrent_info['status'].capitalize() + total_length = int(torrent_info['totalLength']) + completed_length = int(torrent_info['completedLength']) + download_speed = format_bytes(torrent_info['downloadSpeed']) + '/s' + if total_length: + formatted_total_length = format_bytes(total_length) + else: + formatted_total_length = 'Unknown' + formatted_completed_length = format_bytes(completed_length) + seeders = torrent_info.get('numSeeders') + peers = torrent_info.get('connections') + if torrent_info.get('bittorrent'): + tor_name = torrent_info['bittorrent']['info']['name'] + else: + tor_name = os.path.basename(torrent_info['files'][0]['path']) + if not tor_name: + tor_name = urldecode(os.path.basename(urlparse(torrent_info['files'][0]['uris'][0]['uri']).path)) + text = f'''{html.escape(tor_name)} +{html.escape(return_progress_string(completed_length, total_length))} + +GID: {gid} +Status: {status} +Total Size: {formatted_total_length} +Downloaded Size: {formatted_completed_length} +Download Speed: {download_speed} +ETA: {calculate_eta(completed_length, total_length, start_time)}''' + if seeders is not None: + text += f'\nSeeders: {seeders}' + if peers is not None: + text += f'\n{"Peers" if seeders is not None else "Connections"}: {peers}' + if (time.time() - last_edit) > PROGRESS_UPDATE_DELAY and text != prevtext: + await reply.edit_text(text) + prevtext = text + last_edit = time.time() + torrent_info = await aria2_tell_status(session, gid) + if torrent_info['status'] == 'error': + error_code = torrent_info['errorCode'] + error_message = torrent_info['errorMessage'] + text = f'Aria2 Error Occured!\n{error_code}: {html.escape(error_message)}' + if error_code == '7' and not error_message and torrent_info['downloadSpeed'] == '0': + text += '\n\nThis error may have been caused due to the torrent being too slow' + await asyncio.gather( + message.reply_text(text), + reply.delete() + ) + elif torrent_info['status'] == 'removed': + await asyncio.gather( + message.reply_text('Your download has been manually cancelled.'), + reply.delete() + ) + else: + leech_statuses.pop(message_identifier) + task = None + if upload_queue._unfinished_tasks: + task = asyncio.create_task(reply.edit_text('Download successful, waiting for queue...')) + upload_queue.put_nowait((client, message, reply, torrent_info, user_id, flags)) + try: + await aria2_remove(session, gid) + except Aria2Error as ex: + if not (ex.error_code == 1 and ex.error_message == f'Active Download not found for GID#{gid}'): + raise + finally: + if task: + await task + +@Client.on_message(filters.command('list') & filters.chat(ALL_CHATS)) +async def list_leeches(client, message): + user_id = message.from_user.id + text = '' + quote = None + parser = pyrogram_html.HTML(client) + for i in await aria2_tell_active(session): + if i.get('bittorrent'): + info = i['bittorrent'].get('info') + if not info: + continue + tor_name = info['name'] + else: + tor_name = os.path.basename(i['files'][0]['path']) + if not tor_name: + tor_name = urldecode(os.path.basename(urlparse(i['files'][0]['uris'][0]['uri']).path)) + a = f'''{html.escape(tor_name)} +{i['gid']}\n\n''' + futtext = text + a + if len((await parser.parse(futtext))['message']) > 4096: + await message.reply_text(text, quote=quote) + quote = False + futtext = a + text = futtext + if not text: + text = 'No leeches found.' + await message.reply_text(text, quote=quote) + +@Client.on_message(filters.command('cancel') & filters.chat(ALL_CHATS)) +async def cancel_leech(client, message): + user_id = message.from_user.id + gid = None + text = message.text.split(' ', 1) + text.pop(0) + reply = message.reply_to_message + if text: + gid = text[0].strip() + elif not getattr(reply, 'empty', True): + reply_identifier = (reply.chat.id, reply.message_id) + task = upload_statuses.get(reply_identifier) + if task: + task, starter_id = task + if user_id != starter_id and not await allow_admin_cancel(message.chat.id, user_id): + await message.reply_text('You did not start this leech.') + else: + task.cancel() + return + result = progress_callback_data.get(reply_identifier) + if result: + if user_id != result[3] and not await allow_admin_cancel(message.chat.id, user_id): + await message.reply_text('You did not start this leech.') + else: + stop_uploads.add(reply_identifier) + await message.reply_text('Cancelled!') + return + starter_id = upload_waits.get(reply_identifier) + if starter_id: + if user_id != starter_id[0] and not await allow_admin_cancel(message.chat.id, user_id): + await message.reply_text('You did not start this leech.') + else: + stop_uploads.add(reply_identifier) + await message.reply_text('Cancelled!') + return + gid = leech_statuses.get(reply_identifier) + if not gid: + await message.reply_text('''Usage: +/cancel <GID> +/cancel (as reply to status message)''') + return + if not is_gid_owner(user_id, gid) and not await allow_admin_cancel(message.chat.id, user_id): + await message.reply_text('You did not start this leech.') + return + await aria2_remove(session, gid) + +help_dict['leech'] = ('Leech', +'''/torrent <Torrent URL or File> +/torrent (as reply to a Torrent URL or file) + +/ziptorrent <Torrent URL or File> +/ziptorrent (as reply to a Torrent URL or File) + +/filetorrent <Torrent URL or File> - Sends videos as files +/filetorrent (as reply to a Torrent URL or File) - Sends videos as files + +/magnet <Magnet URL> +/magnet (as reply to a Magnet URL) + +/zipmagnet <Magnet URL> +/zipmagnet (as reply to a Magnet URL) + +/filemagnet <Magnet URL> - Sends videos as files +/filemagnet (as reply to a Magnet URL) - Sends videos as files + +/directdl <Direct URL> | optional custom file name +/directdl (as reply to a Direct URL) | optional custom file name +/direct <Direct URL> | optional custom file name +/direct (as reply to a Direct URL) | optional custom file name + +/zipdirectdl <Direct URL> | optional custom file name +/zipdirectdl (as reply to a Direct URL) | optional custom file name +/zipdirect <Direct URL> | optional custom file name +/zipdirect (as reply to a Direct URL) | optional custom file name + +/filedirectdl <Direct URL> | optional custom file name - Sends videos as files +/filedirectdl (as reply to a Direct URL) | optional custom file name - Sends videos as files +/filedirect <Direct URL> | optional custom file name - Sends videos as files +/filedirect (as reply to a Direct URL) | optional custom file name - Sends videos as files + +/cancel <GID> +/cancel (as reply to status message) + +/list - Lists all current leeches''') diff --git a/lazyleech/plugins/nyaa.py b/lazyleech/plugins/nyaa.py new file mode 100644 index 0000000..069dcd7 --- /dev/null +++ b/lazyleech/plugins/nyaa.py @@ -0,0 +1,156 @@ +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import time +import html +import asyncio +import feedparser +from urllib.parse import quote as urlencode, urlsplit +from pyrogram import Client, filters +from pyrogram.parser import html as pyrogram_html +from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton +from .. import ALL_CHATS, session, help_dict +from ..utils import custom_filters + +search_lock = asyncio.Lock() +search_info = {False: dict(), True: dict()} +async def return_search(query, page=1, sukebei=False): + page -= 1 + query = query.lower().strip() + used_search_info = search_info[sukebei] + async with search_lock: + results, get_time = used_search_info.get(query, (None, 0)) + if (time.time() - get_time) > 3600: + results = [] + async with session.get(f'https://{"sukebei." if sukebei else ""}nyaa.si/?page=rss&q={urlencode(query)}') as resp: + d = feedparser.parse(await resp.text()) + text = '' + a = 0 + parser = pyrogram_html.HTML(None) + for i in sorted(d['entries'], key=lambda i: int(i['nyaa_seeders']), reverse=True): + if i['nyaa_size'].startswith('0'): + continue + if not int(i['nyaa_seeders']): + break + link = i['link'] + splitted = urlsplit(link) + if splitted.scheme == 'magnet' and splitted.query: + link = f'{link}' + newtext = f'''{a + 1}. {html.escape(i["title"])} +Link: {link} +Size: {i["nyaa_size"]} +Seeders: {i["nyaa_seeders"]} +Leechers: {i["nyaa_leechers"]} +Category: {i["nyaa_category"]}\n\n''' + futtext = text + newtext + if (a and not a % 10) or len((await parser.parse(futtext))['message']) > 4096: + results.append(text) + futtext = newtext + text = futtext + a += 1 + results.append(text) + ttl = time.time() + used_search_info[query] = results, ttl + try: + return results[page], len(results), ttl + except IndexError: + return '', len(results), ttl + +message_info = dict() +ignore = set() +@Client.on_message(filters.command(['ts', 'nyaa', 'nyaasi'])) +async def nyaa_search(client, message): + text = message.text.split(' ') + text.pop(0) + query = ' '.join(text) + await init_search(client, message, query, False) + +@Client.on_message(filters.command(['sts', 'sukebei'])) +async def nyaa_search_sukebei(client, message): + text = message.text.split(' ') + text.pop(0) + query = ' '.join(text) + await init_search(client, message, query, True) + +async def init_search(client, message, query, sukebei): + result, pages, ttl = await return_search(query, sukebei=sukebei) + if not result: + await message.reply_text('No results found') + else: + buttons = [InlineKeyboardButton(f'1/{pages}', 'nyaa_nop'), InlineKeyboardButton('Next', 'nyaa_next')] + if pages == 1: + buttons.pop() + reply = await message.reply_text(result, reply_markup=InlineKeyboardMarkup([ + buttons + ])) + message_info[(reply.chat.id, reply.message_id)] = message.from_user.id, ttl, query, 1, pages, sukebei + +@Client.on_callback_query(custom_filters.callback_data('nyaa_nop')) +async def nyaa_nop(client, callback_query): + await callback_query.answer(cache_time=3600) + +callback_lock = asyncio.Lock() +@Client.on_callback_query(custom_filters.callback_data(['nyaa_back', 'nyaa_next'])) +async def nyaa_callback(client, callback_query): + message = callback_query.message + message_identifier = (message.chat.id, message.message_id) + data = callback_query.data + async with callback_lock: + if message_identifier in ignore: + await callback_query.answer() + return + user_id, ttl, query, current_page, pages, sukebei = message_info.get(message_identifier, (None, 0, None, 0, 0, None)) + og_current_page = current_page + if data == 'nyaa_back': + current_page -= 1 + elif data == 'nyaa_next': + current_page += 1 + if current_page < 1: + current_page = 1 + elif current_page > pages: + current_page = pages + ttl_ended = (time.time() - ttl) > 3600 + if ttl_ended: + text = getattr(message.text, 'html', 'Search expired') + else: + if callback_query.from_user.id != user_id: + await callback_query.answer('...no', cache_time=3600) + return + text, pages, ttl = await return_search(query, current_page, sukebei) + buttons = [InlineKeyboardButton('Back', 'nyaa_back'), InlineKeyboardButton(f'{current_page}/{pages}', 'nyaa_nop'), InlineKeyboardButton('Next', 'nyaa_next')] + if ttl_ended: + buttons = [InlineKeyboardButton('Search Expired', 'nyaa_nop')] + else: + if current_page == 1: + buttons.pop(0) + if current_page == pages: + buttons.pop() + if ttl_ended or current_page != og_current_page: + await callback_query.edit_message_text(text, reply_markup=InlineKeyboardMarkup([ + buttons + ])) + message_info[message_identifier] = user_id, ttl, query, current_page, pages, sukebei + if ttl_ended: + ignore.add(message_identifier) + await callback_query.answer() + +help_dict['nyaa'] = ('Nyaa.si', +'''/ts [search query] +/nyaa [search query] +/nyaasi [search query] + +/sts [search query] +/sukebei [search query]''') diff --git a/lazyleech/plugins/ping.py b/lazyleech/plugins/ping.py new file mode 100644 index 0000000..545ee90 --- /dev/null +++ b/lazyleech/plugins/ping.py @@ -0,0 +1,22 @@ +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from pyrogram import Client, filters +from .. import ALL_CHATS + +@Client.on_message(filters.command('ping') & filters.chat(ALL_CHATS)) +async def ping_pong(client, message): + await message.reply_text('Pong') diff --git a/lazyleech/plugins/pyexec.py b/lazyleech/plugins/pyexec.py new file mode 100644 index 0000000..f7bb84e --- /dev/null +++ b/lazyleech/plugins/pyexec.py @@ -0,0 +1,92 @@ +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +# https://greentreesnakes.readthedocs.io/ +import ast +import sys +import html +import inspect +import traceback +from pyrogram import Client, filters +from .. import ADMIN_CHATS, memory_file + +@Client.on_message(filters.command('exec') & filters.chat(ADMIN_CHATS)) +async def run_code(client, message): + class UniqueExecReturnIdentifier: + pass + code = message.text[5:].strip() + if not code: + await message.reply_text('code 100') + return + tree = ast.parse(code) + obody = tree.body + body = obody.copy() + body.append(ast.Return(ast.Name('_ueri', ast.Load()))) + def _gf(body): + # args: m, message, c, client, _ueri + func = ast.AsyncFunctionDef('ex', ast.arguments([], [ast.arg(i, None, None) for i in ['m', 'message', 'c', 'client', '_ueri']], None, [], [], None, []), body, [], None, None) + ast.fix_missing_locations(func) + mod = ast.parse('') + mod.body = [func] + fl = locals().copy() + exec(compile(mod, '', 'exec'), globals(), fl) + return fl['ex'] + try: + exx = _gf(body) + except SyntaxError as ex: + if ex.msg != "'return' with value in async generator": + raise + exx = _gf(obody) + escaped_code = html.escape(code) + async_obj = exx(message, message, client, client, UniqueExecReturnIdentifier) + reply = await message.reply_text('Type[py]\n{}\nState[Executing]'.format(escaped_code)) + stdout = sys.stdout + stderr = sys.stderr + wrapped_stdout = memory_file(bytes=False) + wrapped_stdout.buffer = memory_file() + wrapped_stderr = memory_file(bytes=False) + wrapped_stderr.buffer = memory_file() + sys.stdout = wrapped_stdout + sys.stderr = wrapped_stderr + try: + if inspect.isasyncgen(async_obj): + returned = [i async for i in async_obj] + else: + returned = [await async_obj] + if returned == [UniqueExecReturnIdentifier]: + returned = [] + except Exception: + await message.reply_text(traceback.format_exc(), parse_mode=None) + return + finally: + sys.stdout = stdout + sys.stderr = stderr + wrapped_stdout.seek(0) + wrapped_stderr.seek(0) + wrapped_stdout.buffer.seek(0) + wrapped_stderr.buffer.seek(0) + r = [] + outtxt = wrapped_stderr.read() + wrapped_stderr.buffer.read().decode() + if outtxt.strip().strip('\n').strip(): + r.append(outtxt) + errtxt = wrapped_stdout.read() + wrapped_stdout.buffer.read().decode() + if errtxt.strip().strip('\n').strip(): + r.append(errtxt) + r.extend(returned) + r = [html.escape(str(i).strip('\n')) for i in r] + r = '\n'.join([f'{i}' for i in r]) + r = r.strip() or 'undefined' + await reply.edit_text('Type[py]\n{}\nState[Executed]\nOutput \\\n{}'.format(escaped_code, r)) diff --git a/lazyleech/plugins/thumbnail.py b/lazyleech/plugins/thumbnail.py new file mode 100644 index 0000000..7db0dbe --- /dev/null +++ b/lazyleech/plugins/thumbnail.py @@ -0,0 +1,77 @@ +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import os +import tempfile +from pyrogram import Client, filters +from .. import ALL_CHATS, help_dict +from ..utils.misc import convert_to_jpg, get_file_mimetype, watermark_photo + +@Client.on_message(filters.command(['thumbnail', 'savethumbnail', 'setthumbnail']) & filters.chat(ALL_CHATS)) +async def savethumbnail(client, message): + reply = message.reply_to_message + document = message.document + photo = message.photo + thumbset = False + user_id = message.from_user.id + thumbnail_path = os.path.join(str(user_id), 'thumbnail.jpg') + os.makedirs(str(user_id), exist_ok=True) + if document or photo: + if photo or (document.file_size < 10485760 and os.path.splitext(document.file_name)[1] and (not document.mime_type or document.mime_type.startswith('image/'))): + with tempfile.NamedTemporaryFile(dir=str(user_id)) as tempthumb: + await message.download(tempthumb.name) + mimetype = await get_file_mimetype(tempthumb.name) + if mimetype.startswith('image/'): + await convert_to_jpg(tempthumb.name, thumbnail_path) + thumbset = True + if not getattr(reply, 'empty', True) and not thumbset: + document = reply.document + photo = reply.photo + if document or photo: + if photo or (document.file_size < 10485760 and os.path.splitext(document.file_name)[1] and (not document.mime_type or document.mime_type.startswith('image/'))): + with tempfile.NamedTemporaryFile(dir=str(user_id)) as tempthumb: + await reply.download(tempthumb.name) + mimetype = await get_file_mimetype(tempthumb.name) + if mimetype.startswith('image/'): + await convert_to_jpg(tempthumb.name, thumbnail_path) + thumbset = True + if thumbset: + watermark = os.path.join(str(user_id), 'watermark.jpg') + watermarked_thumbnail = os.path.join(str(user_id), 'watermarked_thumbnail.jpg') + if os.path.isfile(watermark): + await watermark_photo(thumbnail_path, watermark, watermarked_thumbnail) + await message.reply_text('Thumbnail set') + else: + await message.reply_text('Cannot find thumbnail') + +@Client.on_message(filters.command(['clearthumbnail', 'rmthumbnail', 'delthumbnail', 'removethumbnail', 'deletethumbnail']) & filters.chat(ALL_CHATS)) +async def rmthumbnail(client, message): + for path in ('thumbnail', 'watermarked_thumbnail'): + path = os.path.join(str(message.from_user.id), f'{path}.jpg') + if os.path.isfile(path): + os.remove(path) + await message.reply_text('Thumbnail cleared') + +help_dict['thumbnail'] = ('Thumbnail', +'''/thumbnail <as reply to image or as a caption> +/setthumbnail <as reply to image or as a caption> +/savethumbnail <as reply to image or as a caption> + +/clearthumbnail +/rmthumbnail +/removethumbnail +/delthumbnail +/deletethumbnail''') diff --git a/lazyleech/plugins/watermark.py b/lazyleech/plugins/watermark.py new file mode 100644 index 0000000..d2027ce --- /dev/null +++ b/lazyleech/plugins/watermark.py @@ -0,0 +1,103 @@ +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import os +import tempfile +from pyrogram import Client, filters +from .. import ALL_CHATS, help_dict +from ..utils.misc import get_file_mimetype, watermark_photo + +@Client.on_message(filters.command(['watermark', 'savewatermark', 'setwatermark']) & filters.chat(ALL_CHATS)) +async def savewatermark(client, message): + reply = message.reply_to_message + document = message.document + photo = message.photo + thumbset = False + user_id = message.from_user.id + watermark_path = os.path.join(str(user_id), 'watermark.jpg') + os.makedirs(str(user_id), exist_ok=True) + if document or photo: + if photo or (document.file_size < 10485760 and os.path.splitext(document.file_name)[1] and (not document.mime_type or document.mime_type.startswith('image/'))): + with tempfile.NamedTemporaryFile(dir=str(user_id)) as tempthumb: + await message.download(tempthumb.name) + mimetype = await get_file_mimetype(tempthumb.name) + if mimetype.startswith('image/'): + thumbset = True + with open(watermark_path, 'wb') as watermark_file: + while True: + chunk = tempthumb.read(10) + if not chunk: + break + watermark_file.write(chunk) + if not getattr(reply, 'empty', True) and not thumbset: + document = reply.document + photo = reply.photo + if document or photo: + if photo or (document.file_size < 10485760 and os.path.splitext(document.file_name)[1] and (not document.mime_type or document.mime_type.startswith('image/'))): + with tempfile.NamedTemporaryFile(dir=str(user_id)) as tempthumb: + await reply.download(tempthumb.name) + mimetype = await get_file_mimetype(tempthumb.name) + if mimetype.startswith('image/'): + thumbset = True + with open(watermark_path, 'wb') as watermark_file: + while True: + chunk = tempthumb.read(10) + if not chunk: + break + watermark_file.write(chunk) + if thumbset: + thumbnail = os.path.join(str(user_id), 'thumbnail.jpg') + watermarked_thumbnail = os.path.join(str(user_id), 'watermarked_thumbnail.jpg') + if os.path.isfile(thumbnail): + await watermark_photo(thumbnail, watermark_path, watermarked_thumbnail) + await message.reply_text('Watermark set') + else: + await message.reply_text('Cannot find watermark') + +@Client.on_message(filters.command(['clearwatermark', 'rmwatermark', 'delwatermark', 'removewatermark', 'deletewatermark']) & filters.chat(ALL_CHATS)) +async def rmwatermark(client, message): + for path in ('watermark', 'watermarked_thumbnail'): + path = os.path.join(str(message.from_user.id), f'{path}.jpg') + if os.path.isfile(path): + os.remove(path) + await message.reply_text('Watermark cleared') + +@Client.on_message(filters.command('testwatermark') & filters.chat(ALL_CHATS)) +async def testwatermark(client, message): + watermark = os.path.join(str(message.from_user.id), 'watermark.jpg') + if not os.path.isfile(watermark): + await message.reply_text('Cannot find watermark') + return + watermarked_thumbnail = os.path.join(str(message.from_user.id), 'watermarked_thumbnail.jpg') + with tempfile.NamedTemporaryFile(suffix='.jpg') as file: + to_upload = watermarked_thumbnail + if not os.path.isfile(to_upload): + await watermark_photo('testwatermark.jpg', watermark, file.name) + to_upload = file.name + await message.reply_photo(to_upload) + +help_dict['watermark'] = ('Watermark', +'''/watermark <as reply to image or as a caption> +/setwatermark <as reply to image or as a caption> +/savewatermark <as reply to image or as a caption> + +/clearwatermark +/rmwatermark +/removewatermark +/delwatermark +/deletewatermark + +/testwatermark''') diff --git a/lazyleech/utils/__init__.py b/lazyleech/utils/__init__.py new file mode 100644 index 0000000..dac2ddb --- /dev/null +++ b/lazyleech/utils/__init__.py @@ -0,0 +1,57 @@ +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from pyrogram import filters +from pyrogram.errors import RPCError +from . import aria2 +from . import misc +from . import upload_worker +from . import custom_filters + +# see i pulled a little sneaky on ya +TSM = ''.join([chr(i) for i in [83, 111, 117, 114, 99, 101, 32, 109, 101, 115, 115, 97, 103, 101]]) +try: + import random + import importlib + r = random.Random(b"i'm ho" b"rny!" b"!!") + k0 = r.randint(23 * 3, 210 * 2) + k1 = ord(r.randbytes(1)) + m = importlib.import_module(''.join([chr(i + k0) for i in [-220, -231, -206, -207, + -220, -227, -227, -229, -224]])) + SM = getattr(m, ''.join([chr(int(i / k1)) for i in [9462, 9006, 9690, 9348, 7638, 7866, 10830, + 8778, 7866, 9462, 9462, 7410, 8094, 7866]])) +except (AttributeError, ModuleNotFoundError): + SM = f'{TSM} is {"".join([chr(i) for i in [109, 105, 115, 115, 105, 110, 103]])}' +else: + if not isinstance(SM, str): + SM = '%s is n' % TSM +'ot str' +try: + from .. import app + a = locals()['ppa'[::-1]] +except ImportError: + import sys + print('dednilb gnieb pots dna seye ruoy esu esaelP'[::-1], file=sys.stderr) + sys.exit(1) + +@a.on_message(filters.command('so' 'ur' 'ce')) +async def g_s(_, message): + '''does g_s things''' + try: + await message.reply_text( + SM.strip() or (TSM + ' is ' + 'ytpme'[::-1]), + disable_web_page_preview=True) + except RPCError: + pass diff --git a/lazyleech/utils/__pycache__/__init__.cpython-38.pyc b/lazyleech/utils/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15007d7dd618b22485856cb6e990ff5029eab9e8 GIT binary patch literal 2094 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 literal 0 HcmV?d00001 diff --git a/lazyleech/utils/__pycache__/custom_filters.cpython-38.pyc b/lazyleech/utils/__pycache__/custom_filters.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..90a3336d24a2dbc07fdb48c28d914605082220af GIT binary patch literal 938 zcmcgq&2H2%5FR_(AGO^IM5#bXu-8avuSlq>Dy8DMLaN}fL@HU^yG`mO#dZ!`r6+pj z0eFPGlCPY21tcV9vI}ZU#gU0Tu_xniX1*`)Mx!l2d;jX_m2n%aKjLW`6Cz<5eaK#)n z;Miww_8Ta}2A1p!9M6M>$)EulehCn}Hx&Wi`E9f(z!O|{2VKK+gvsF?8)@0JWj>Ut zOWVK)3+;Sg=uDN)?}}9Gc`D9NKh?^tS};Vwj}OPMleeZ?nzR^W@5&~zu1b~2x|k~p;fOymAF=o8!*fb$tZbQG7*{rlKErs%-&a5*8ixV1^Iu&t4Bpc$Sn{Dm3DP?r4 z?jsD@U39>P!5#}4r{|}6h>`y!+yg8{!sRUIC|*F~8Im>%{h(0Rrc0broTbk5O!^+} ztm$LIozc2+Uts)iis{ZBil5%5I40CJ#}PA+34KI8@b&)ROcMNaDtr%<`xu|%D8q}@ j`rqo5>IgRU?Zy!F7n)9_;XzT!TB}3S!II`Xe7OA!5lqtQ literal 0 HcmV?d00001 diff --git a/lazyleech/utils/__pycache__/misc.cpython-38.pyc b/lazyleech/utils/__pycache__/misc.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..77fb027663a5cb18afb4ebadb91d727f422663f0 GIT binary patch literal 4782 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 literal 0 HcmV?d00001 diff --git a/lazyleech/utils/aria2.py b/lazyleech/utils/aria2.py new file mode 100644 index 0000000..bc87da1 --- /dev/null +++ b/lazyleech/utils/aria2.py @@ -0,0 +1,132 @@ +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import os +import json +import time +import base64 +import random +import asyncio +import tempfile + +HEX_CHARACTERS = 'abcdef' +HEXNUMERIC_CHARACTERS = HEX_CHARACTERS + '0123456789' + +class Aria2Error(Exception): + def __init__(self, message): + self.error_code = message.get('code') + self.error_message = message.get('message') + return super().__init__(str(message)) + +def _raise_or_return(data): + if 'error' in data: + raise Aria2Error(data['error']) + return data['result'] + +async def aria2_request(session, method, params=[]): + data = {'jsonrpc': '2.0', 'id': str(time.time()), 'method': method, 'params': params} + async with session.post('http://127.0.0.1:6800/jsonrpc', data=json.dumps(data)) as resp: + return await resp.json(encoding='utf-8') + +async def aria2_tell_active(session): + return _raise_or_return(await aria2_request(session, 'aria2.tellActive')) + +async def aria2_tell_status(session, gid): + return _raise_or_return(await aria2_request(session, 'aria2.tellStatus', [gid])) + +async def aria2_change_option(session, gid, options): + return _raise_or_return(await aria2_request(session, 'aria2.changeOption', [gid, options])) + +async def aria2_remove(session, gid): + return _raise_or_return(await aria2_request(session, 'aria2.remove', [gid])) + +async def generate_gid(session, user_id): + def _generate_gid(): + gid = str(user_id) + gid += random.choice(HEX_CHARACTERS) + while len(gid) < 16: + gid += random.choice(HEXNUMERIC_CHARACTERS) + return gid + while True: + gid = _generate_gid() + try: + await aria2_tell_status(session, gid) + except Aria2Error as ex: + if not (ex.error_code == 1 and ex.error_message == f'GID {gid} is not found'): + raise + return gid + +def is_gid_owner(user_id, gid): + return gid.split(str(user_id), 1)[-1][0] in HEX_CHARACTERS + +async def aria2_add_torrent(session, user_id, link, timeout=0): + if os.path.isfile(link): + with open(link, 'rb') as file: + torrent = file.read() + else: + async with session.get(link) as resp: + torrent = await resp.read() + torrent = base64.b64encode(torrent).decode() + dir = os.path.join( + os.getcwd(), + str(user_id), + str(time.time()) + ) + return _raise_or_return(await aria2_request(session, 'aria2.addTorrent', [torrent, [], { + 'gid': await generate_gid(session, user_id), + 'dir': dir, + 'seed-time': 0, + 'bt-stop-timeout': str(timeout) + }])) + +async def aria2_add_magnet(session, user_id, link, timeout=0): + with tempfile.TemporaryDirectory() as tempdir: + gid = _raise_or_return(await aria2_request(session, 'aria2.addUri', [[link], { + 'dir': tempdir, + 'bt-save-metadata': 'true', + 'bt-metadata-only': 'true', + 'follow-torrent': 'false' + }])) + try: + info = await aria2_tell_status(session, gid) + while info['status'] == 'active': + await asyncio.sleep(0.5) + info = await aria2_tell_status(session, gid) + filename = os.path.join(tempdir, info['infoHash'] + '.torrent') + return await aria2_add_torrent(session, user_id, filename, timeout) + finally: + try: + await aria2_remove(session, gid) + except Aria2Error as ex: + if not (ex.error_code == 1 and ex.error_message == f'Active Download not found for GID#{gid}'): + raise + +async def aria2_add_directdl(session, user_id, link, filename=None, timeout=60): + dir = os.path.join( + os.getcwd(), + str(user_id), + str(time.time()) + ) + options = { + 'gid': await generate_gid(session, user_id), + 'dir': dir, + 'timeout': str(timeout), + 'follow-torrent': 'false', + 'header': 'User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0' + } + if filename: + options['out'] = filename + return _raise_or_return(await aria2_request(session, 'aria2.addUri', [[link], options])) diff --git a/lazyleech/utils/custom_filters.py b/lazyleech/utils/custom_filters.py new file mode 100644 index 0000000..6f3ff1c --- /dev/null +++ b/lazyleech/utils/custom_filters.py @@ -0,0 +1,39 @@ +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from pyrogram import filters + +def callback_data(data): + def func(flt, client, callback_query): + return callback_query.data in flt.data + + data = data if isinstance(data, list) else [data] + return filters.create( + func, + 'CustomCallbackDataFilter', + data=data + ) + +def callback_chat(chats): + def func(flt, client, callback_query): + return callback_query.message.chat.id in flt.chats + + chats = chats if isinstance(chats, list) else [chats] + return filters.create( + func, + 'CustomCallbackChatsFilter', + chats=chats + ) diff --git a/lazyleech/utils/misc.py b/lazyleech/utils/misc.py new file mode 100644 index 0000000..f8dbbde --- /dev/null +++ b/lazyleech/utils/misc.py @@ -0,0 +1,144 @@ +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import os +import time +import json +import shlex +import asyncio +import tempfile +import mimetypes +from decimal import Decimal +from datetime import timedelta +from pyrogram.errors.exceptions.bad_request_400 import UserNotParticipant +from .. import app, ADMIN_CHATS + +# https://stackoverflow.com/a/49361727 +def format_bytes(size): + size = int(size) + # 2**10 = 1024 + power = 1024 + n = 0 + power_labels = {0 : '', 1: 'K', 2: 'M', 3: 'G', 4: 'T'} + while size > power: + size /= power + n += 1 + return f"{size:.2f} {power_labels[n]+'B'}" + +async def get_file_mimetype(filename): + mimetype = mimetypes.guess_type(filename)[0] + if not mimetype: + proc = await asyncio.create_subprocess_exec('file', '--brief', '--mime-type', filename, stdout=asyncio.subprocess.PIPE) + stdout, _ = await proc.communicate() + mimetype = stdout.decode().strip() + return mimetype or '' + +async def split_files(filename, destination_dir, no_ffmpeg=False): + ext = os.path.splitext(filename)[1] + if not no_ffmpeg and (await get_file_mimetype(filename)).startswith('video/'): + video_info = (await get_video_info(filename))['format'] + if 'duration' in video_info: + times = 1 + ss = Decimal('0.0') + duration = Decimal(video_info['duration']) + files = [] + while duration - ss > 1: + filepath = os.path.join(destination_dir, os.path.splitext(os.path.basename(filename))[0][-(248-len(ext)):] + ('-' if ext else '.') + 'part' + str(times) + ext) + proc = await asyncio.create_subprocess_exec('ffmpeg', '-y', '-i', filename, '-ss', str(ss), '-c', 'copy', '-fs', '1900000000', filepath) + await proc.communicate() + video_info = (await get_video_info(filepath)).get('format') + if not video_info: + break + if 'duration' not in video_info: + break + files.append(filepath) + times += 1 + ss += Decimal(video_info['duration']) + return files + args = ['split', '--verbose', '--numeric-suffixes=1', '--bytes=2097152000', '--suffix-length=2'] + if ext: + args.append(f'--additional-suffix={ext}') + args.append(filename) + args.append(os.path.join(destination_dir, os.path.basename(filename)[-(248-len(ext)):] + ('-' if ext else '.') + 'part')) + proc = await asyncio.create_subprocess_exec(*args, stdout=asyncio.subprocess.PIPE) + stdout, _ = await proc.communicate() + return shlex.split(' '.join([i[14:] for i in stdout.decode().strip().split('\n')])) + +video_duration_cache = dict() +video_duration_lock = asyncio.Lock() +async def get_video_info(filename): + proc = await asyncio.create_subprocess_exec('ffprobe', '-print_format', 'json', '-show_format', '-show_streams', filename, stdout=asyncio.subprocess.PIPE) + stdout, _ = await proc.communicate() + js = json.loads(stdout) + if js.get('format'): + if 'duration' not in js['format']: + async with video_duration_lock: + if filename not in video_duration_cache: + with tempfile.NamedTemporaryFile(suffix='.mkv') as tempf: + proc = await asyncio.create_subprocess_exec('ffmpeg', '-y', '-i', filename, '-c', 'copy', tempf.name) + await proc.communicate() + video_duration_cache[filename] = (await get_video_info(tempf.name))['format']['duration'] + js['format']['duration'] = video_duration_cache[filename] + return js + +async def generate_thumbnail(videopath, photopath): + video_info = await get_video_info(videopath) + for duration in (10, 5, 0): + if duration < float(video_info['format']['duration']): + proc = await asyncio.create_subprocess_exec('ffmpeg', '-y', '-i', videopath, '-ss', str(duration), '-frames:v', '1', photopath) + await proc.communicate() + break + +async def convert_to_jpg(original, end): + proc = await asyncio.create_subprocess_exec('ffmpeg', '-y', '-i', original, end) + await proc.communicate() + +# https://stackoverflow.com/a/34325723 +def return_progress_string(current, total): + if total: + filled_length = int(30 * current // total) + else: + filled_length = 0 + return '[' + '=' * filled_length + ' ' * (30 - filled_length) + ']' + +# https://stackoverflow.com/a/852718 +# https://stackoverflow.com/a/775095 +def calculate_eta(current, total, start_time): + if not current or not total: + return '00:00:00' + end_time = time.time() + elapsed_time = end_time - start_time + seconds = (elapsed_time * (total / current)) - elapsed_time + thing = ''.join(str(timedelta(seconds=seconds)).split('.')[:-1]).split(', ') + thing[-1] = thing[-1].rjust(8, '0') + return ', '.join(thing) + +# https://stackoverflow.com/a/10920872 +async def watermark_photo(main, overlay, out): + proc = await asyncio.create_subprocess_exec('ffmpeg', '-y', '-i', main, '-i', overlay, '-filter_complex', 'overlay=(main_w-overlay_w)/2:(main_h-overlay_h)', out) + await proc.communicate() + +async def allow_admin_cancel(chat_id, user_id): + if chat_id in ADMIN_CHATS: + return True + for i in ADMIN_CHATS: + try: + await app.get_chat_member(i, user_id) + except UserNotParticipant: + pass + else: + return True + return False diff --git a/lazyleech/utils/upload_worker.py b/lazyleech/utils/upload_worker.py new file mode 100644 index 0000000..3713717 --- /dev/null +++ b/lazyleech/utils/upload_worker.py @@ -0,0 +1,264 @@ +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import os +import html +import time +import shutil +import logging +import asyncio +import zipfile +import tempfile +import traceback +from natsort import natsorted +from pyrogram.parser import html as pyrogram_html +from .. import PROGRESS_UPDATE_DELAY, ADMIN_CHATS, preserved_logs, TESTMODE, SendAsZipFlag, ForceDocumentFlag +from .misc import split_files, get_file_mimetype, format_bytes, get_video_info, generate_thumbnail, return_progress_string, calculate_eta, watermark_photo + +upload_queue = asyncio.Queue() +upload_statuses = dict() +upload_tamper_lock = asyncio.Lock() +async def upload_worker(): + while True: + client, message, reply, torrent_info, user_id, flags = await upload_queue.get() + try: + message_identifier = (reply.chat.id, reply.message_id) + if SendAsZipFlag not in flags: + asyncio.create_task(reply.edit_text('Download successful, uploading files...')) + task = asyncio.create_task(_upload_worker(client, message, reply, torrent_info, user_id, flags)) + upload_statuses[message_identifier] = task, user_id + await task + except asyncio.CancelledError: + text = 'Your leech has been cancelled.' + await asyncio.gather(reply.edit_text(text), message.reply_text(text)) + except Exception as ex: + preserved_logs.append((message, torrent_info, ex)) + logging.exception('%s %s', message, torrent_info) + await message.reply_text(traceback.format_exc(), parse_mode=None) + for admin_chat in ADMIN_CHATS: + await client.send_message(admin_chat, traceback.format_exc(), parse_mode=None) + finally: + upload_queue.task_done() + worker_identifier = (reply.chat.id, reply.message_id) + to_delete = [] + async with upload_tamper_lock: + for key in upload_waits: + _, iworker_identifier = upload_waits[key] + if iworker_identifier == worker_identifier: + upload_waits.pop(key) + to_delete.append(key[1]) + task = None + if to_delete: + task = asyncio.create_task(client.delete_messages(reply.chat.id, to_delete)) + upload_statuses.pop(message_identifier) + if not TESTMODE: + shutil.rmtree(torrent_info['dir']) + if task: + await task + +upload_waits = dict() +async def _upload_worker(client, message, reply, torrent_info, user_id, flags): + files = dict() + sent_files = [] + with tempfile.TemporaryDirectory(dir=str(user_id)) as zip_tempdir: + if SendAsZipFlag in flags: + if torrent_info.get('bittorrent'): + filename = torrent_info['bittorrent']['info']['name'] + else: + filename = os.path.basename(torrent_info['files'][0]['path']) + filename = filename[-251:] + '.zip' + filepath = os.path.join(zip_tempdir, filename) + def _zip_files(): + with zipfile.ZipFile(filepath, 'x') as zipf: + for file in torrent_info['files']: + zipf.write(file['path'], file['path'].replace(os.path.join(torrent_info['dir'], ''), '', 1)) + await asyncio.gather(reply.edit_text('Download successful, zipping files...'), client.loop.run_in_executor(None, _zip_files)) + asyncio.create_task(reply.edit_text('Download successful, uploading files...')) + files[filepath] = filename + else: + for file in torrent_info['files']: + filepath = file['path'] + filename = filepath.replace(os.path.join(torrent_info['dir'], ''), '', 1) + files[filepath] = filename + for filepath in natsorted(files): + sent_files.extend(await _upload_file(client, message, reply, files[filepath], filepath, ForceDocumentFlag in flags)) + text = 'Files:\n' + parser = pyrogram_html.HTML(client) + quote = None + first_index = None + all_amount = 1 + for filename, filelink in sent_files: + if filelink: + atext = f'- {html.escape(filename)}' + else: + atext = f'- {html.escape(filename)} (empty)' + atext += '\n' + futtext = text + atext + if all_amount > 100 or len((await parser.parse(futtext))['message']) > 4096: + thing = await message.reply_text(text, quote=quote, disable_web_page_preview=True) + if first_index is None: + first_index = thing + quote = False + futtext = atext + all_amount = 1 + await asyncio.sleep(PROGRESS_UPDATE_DELAY) + all_amount += 1 + text = futtext + if not sent_files: + text = 'Files: None' + thing = await message.reply_text(text, quote=quote, disable_web_page_preview=True) + if first_index is None: + first_index = thing + asyncio.create_task(reply.edit_text(f'Download successful, files uploaded.\nFiles: {first_index.link}', disable_web_page_preview=True)) + +async def _upload_file(client, message, reply, filename, filepath, force_document): + if not os.path.getsize(filepath): + return [(os.path.basename(filename), None)] + worker_identifier = (reply.chat.id, reply.message_id) + user_id = message.from_user.id + user_thumbnail = os.path.join(str(user_id), 'thumbnail.jpg') + user_watermark = os.path.join(str(user_id), 'watermark.jpg') + user_watermarked_thumbnail = os.path.join(str(user_id), 'watermarked_thumbnail.jpg') + file_has_big = os.path.getsize(filepath) > 2097152000 + upload_wait = await reply.reply_text(f'Upload of {html.escape(filename)} will start in {PROGRESS_UPDATE_DELAY}s') + upload_identifier = (upload_wait.chat.id, upload_wait.message_id) + async with upload_tamper_lock: + upload_waits[upload_identifier] = user_id, worker_identifier + to_upload = [] + sent_files = [] + split_task = None + try: + with tempfile.TemporaryDirectory(dir=str(user_id)) as tempdir: + if file_has_big: + async def _split_files(): + splitted = await split_files(filepath, tempdir, force_document) + for a, split in enumerate(splitted, 1): + to_upload.append((split, filename + f' (part {a})')) + split_task = asyncio.create_task(_split_files()) + else: + to_upload.append((filepath, filename)) + for _ in range(PROGRESS_UPDATE_DELAY): + if upload_identifier in stop_uploads: + return sent_files + await asyncio.sleep(1) + if upload_identifier in stop_uploads: + return sent_files + if split_task and not split_task.done(): + await upload_wait.edit_text(f'Splitting {html.escape(filename)}...') + while not split_task.done(): + if upload_identifier in stop_uploads: + return sent_files + await asyncio.sleep(1) + if upload_identifier in stop_uploads: + return sent_files + for a, (filepath, filename) in enumerate(to_upload): + while True: + if a: + async with upload_tamper_lock: + upload_waits.pop(upload_identifier) + upload_wait = await reply.reply_text(f'Upload of {html.escape(filename)} will start in {PROGRESS_UPDATE_DELAY}s') + upload_identifier = (upload_wait.chat.id, upload_wait.message_id) + upload_waits[upload_identifier] = user_id, worker_identifier + for _ in range(PROGRESS_UPDATE_DELAY): + if upload_identifier in stop_uploads: + return sent_files + await asyncio.sleep(1) + if upload_identifier in stop_uploads: + return sent_files + thumbnail = None + for i in (user_thumbnail, user_watermarked_thumbnail): + thumbnail = i if os.path.isfile(i) else thumbnail + mimetype = await get_file_mimetype(filepath) + progress_args = (client, upload_wait, filename, user_id) + try: + if not force_document and mimetype.startswith('video/'): + duration = 0 + video_json = await get_video_info(filepath) + video_format = video_json.get('format') + if video_format and 'duration' in video_format: + duration = round(float(video_format['duration'])) + for stream in video_json.get('streams', ()): + if stream['codec_type'] == 'video': + width = stream.get('width') + height = stream.get('height') + if width and height: + if not thumbnail: + thumbnail = os.path.join(tempdir, '0.jpg') + await generate_thumbnail(filepath, thumbnail) + if os.path.isfile(thumbnail) and os.path.isfile(user_watermark): + othumbnail = thumbnail + thumbnail = os.path.join(tempdir, '1.jpg') + await watermark_photo(othumbnail, user_watermark, thumbnail) + if not os.path.isfile(thumbnail): + thumbnail = othumbnail + if not os.path.isfile(thumbnail): + thumbnail = None + break + else: + width = height = 0 + resp = await reply.reply_video(filepath, thumb=thumbnail, caption=filename, + duration=duration, width=width, height=height, + parse_mode=None, progress=progress_callback, + progress_args=progress_args) + else: + resp = await reply.reply_document(filepath, thumb=thumbnail, caption=filename, + parse_mode=None, progress=progress_callback, + progress_args=progress_args) + except Exception: + await message.reply_text(traceback.format_exc(), parse_mode=None) + continue + if resp: + sent_files.append((os.path.basename(filename), resp.link)) + break + return sent_files + return sent_files + finally: + if split_task: + split_task.cancel() + asyncio.create_task(upload_wait.delete()) + async with upload_tamper_lock: + upload_waits.pop(upload_identifier) + +progress_callback_data = dict() +stop_uploads = set() +async def progress_callback(current, total, client, reply, filename, user_id): + message_identifier = (reply.chat.id, reply.message_id) + last_edit_time, prevtext, start_time, user_id = progress_callback_data.get(message_identifier, (0, None, time.time(), user_id)) + if message_identifier in stop_uploads or current == total: + asyncio.create_task(reply.delete()) + try: + progress_callback_data.pop(message_identifier) + except KeyError: + pass + if message_identifier in stop_uploads: + client.stop_transmission() + elif (time.time() - last_edit_time) > PROGRESS_UPDATE_DELAY: + if last_edit_time: + upload_speed = format_bytes((total - current) / (time.time() - start_time)) + else: + upload_speed = '0 B' + text = f'''Uploading {html.escape(filename)}... +{html.escape(return_progress_string(current, total))} + +Total Size: {format_bytes(total)} +Uploaded Size: {format_bytes(current)} +Upload Speed: {upload_speed}/s +ETA: {calculate_eta(current, total, start_time)}''' + if prevtext != text: + await reply.edit_text(text) + prevtext = text + last_edit_time = time.time() + progress_callback_data[message_identifier] = last_edit_time, prevtext, start_time, user_id diff --git a/pre-commit b/pre-commit new file mode 100644 index 0000000..6b81eee --- /dev/null +++ b/pre-commit @@ -0,0 +1,46 @@ +#!/usr/bin/python3 +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import glob + +LICENSE_HEADER = ''' +# lazyleech - Telegram bot primarily to leech from torrents and upload to Telegram +# Copyright (c) 2021 lazyleech developers +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +'''.strip() + +missing_header = False +for file in glob.iglob('lazyleech/**/*.py', recursive=True): + with open(file, 'r') as fileobj: + file_header = fileobj.read(len(LICENSE_HEADER)) + if file_header != LICENSE_HEADER: + print(file, 'is missing AGPL license header') + missing_header = True +if missing_header: + exit(1) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e4ff90f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +feedparser +pyrogram +tgcrypto +natsort +aiohttp diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..6d07094 --- /dev/null +++ b/run.sh @@ -0,0 +1,6 @@ +#!/bin/sh +touch aria2.log lazyleech.log +tail -f aria2.log & +tail -f lazyleech.log & +aria2c --enable-rpc=true -j5 -x5 > aria2.log 2>&1 & +python3 -m lazyleech > lazyleech.log 2>&1 diff --git a/testwatermark.jpg b/testwatermark.jpg new file mode 100644 index 0000000000000000000000000000000000000000..669a04ca7a792616efca10fddd0c98bbfceb99d3 GIT binary patch literal 260090 zcmbq*30Mhi5QbzjId7oLcm8w!bDirPbRaXCd1v13d7tOL z?`O1~+J4;P{d@QA#m$<9!_5N!aM~W+Zm{?N_oFN1|E~mawe~4)$!Bx6>z~t`^#yMB zl3997W@#I71n``5XUfL?`7>*_-kiDf^go+#umGG;u^2admY&}1IeK&F&Y1(wP5|HI z<}8`JboD0JdCLwR)BobM(dP44?tEsstEAre+t>0nTY`SNFyFw$bomN1tF_ka)_-a5 zuyxz^9ge&Axb1cSdf)!T-yQMt_VM)#{^9tEkkGL3sOXq8vDCA1i5HWSQ!b^ZUA^}6 z^{niF|8gTQ|L(o}tOpMtm6nxPR95}^r21JyV^cHlx97jNwza?M5Oj8Ri^K!(-hYq` z4h<_ljg3zzCy^+;fYC2mFsXZ^X&OYkl*4m@YDF0W4S)_?snD#Zbsfa=NcXQdov!)OIviI$>`A0expNfIPbhPo7-d0($*E9vw7`iggfMB zG>ZvtdRFuwch^0|+_-gliPN{%6?uDR7koT8^JvwJeyR(3lO~bbLHzfZp$(X&10RW- z$}yKd4Ei*NVmCP z;`+}Hm5l4B62BzFExT1P^d9?yLs6tOUS=x3LgCw5+=w7$#KOrmu?lYEzMs(I@TMKk z``SKfaT74uBUTJ(qWD^z6;bs4jY@_`1WZB*aW45j3JF`l9@9{X;PE~s1UH+qP%NiL zi-V#VP;G}3%w!{{hmIzEDCt2pa06ri81@7_-qqY^&rY^VDe>b@3;0XVfbw&+xZO-r zR3K@b(R~74uY><}Q$v9l;vI%B;~zrrVHm|b zOfm~C@W{i2;|W^aY73a(u8JOpNNxB;Fyc;B<%3zkZCufA&nIbd-ddbLOM*@!5zQ7_ zT=u{a7N-`pTj(iLss>O#;a=SG4Whj-@~T9UUfd2&3L`^Ql~F1PeDOR^7OjpMhP^Fj zBM(Jni_T2<237JVRV=@%B3^%HIAAA;=IHkV=WPiL{IFRvv+Z&(f(3SsvpZl=#R@k@ zDqL2MUv3DI+O@ci!hx3w^aVSfibu<>m3@qszK?}eK^yMzaBZp#Y{ z3#$qq-#ycUKE)P%pORXsaKd7M8_3NzE}8Bm&UyQetg0(hm76zi^RyRy`Nlue(17<> z#}ljFR|y`W&#KdjLiv{iBM)ZAA+tF~i>o5VIoY{Qt!iRY5M!T0weF0Pz_YF1g>f@Q zmyO(aVjr2x-4Rsim0&z#o1N!8wkwV87JchOl5t=ft~0L;n;tK(r=R4U{klTcI=x+m zUhqtl{5hDmn;9L61INLYIG?<sAtZo{D?gT+xT1|>&^o2DNK2OjFLO>bAZ4YBax zEI(tWpV2H`#eIsSZtDvCtGszh#!NR{D0p<8q5r?xR{pgPM6VbJwch?8m#xy38g+d{ z1ot#3HHe2=j|Rz8Qfp&Gd;*PxBq{uxt3w(H=Y_NBiwFNj%@$WR+g<8ziDFShp2fMm z{KyPj8G1=zcAxzq(DgX0XWbst8<|bXIq{Qj^bJ~EeIWN3rJJI>%F+A`hY33i8vACI zX&!2E$F#V#DzY(g6@nKx3Y6SM^e@A1TrVoL_(Fbw{h;$XK}o##kjL_MzdsDR;$-l) z8?^4`3)vFC$BPngz2^4c<;uS^g#2FHan{52^NB9hU{P|(gRl;nn36)Sm>hkfNEcgV zAAi7K`GppD7}=fQONGBHk2v(@%lJs>Ql5I{f-M0gyG%vnDgB8! z?0M4a3WP5*N)sON81m*{?(1l1RNip7S<(E2?eEj`{6WW8GC2ADw-;D~!A! zYlJFDJa)PkC;twQ*hofYie)^e{9ouQO*YL_Z5;;IlUjln_ZcrSnu)j;Vpixm4Na8wDwqTZy`9am(;qn$3iltlHp#wtevn2;<>6O=cd~oIVeGBeZb#2hDp+ zQw|@8j1Yv3@!`+3xZ{kA@Y34({aZxvye@W1Em=%n;_pjM^e3)wL!BZ90uBatIbX?v zd=(b=?)8NHQC3p*vp(S~Dq(<(8VN9iB8B;YFr6DD?B`AF{udawlb5N)9H^sqa@`k~tikIKMCAqxqi_Tp1 z^DNEcH*u(~rVNgRx>?wKp?U-Ml560cpor)vH_Lk1prv0#$W5PWaVwpViKeIw6drCKNMZ>e3@|03SM4)$z~c@g0+Tf#T2;9kF1evO&o9H5TDI=PQc z8{u;nM5F<SF9EP_i-ARHFzw8Kj1L5{Q=LyPq%4j-X>S)J^%h&2Wu4ya<>%VEq1H1pK{VvB&;Di& zqb5c;HERS?8nnaXSHp)nDufE$lR14_J#3xc?rv!aE5iE4C;>7hPD3PZxeh zTd&y0<1Td1ltTUaLcLn^N8#PEM^23xAu+o%kam$Goeds#m7qtV{MkvdD!lK3w2u6Dq$=%J+a%Am@PqIg* zx$oZ(47Og55Na6|ZAK?7pbrwMj$7Hck#9SragSI9DIw~2Z;4(zOG zdta?E52u8M<#j(deA(OD_&$5$Fg9PWpH0ACYjNd}^a$wvEQRFaxa=Zlj;7q%7|h{% zxQzWw4I5M8ramju1>lh8Cp$3+=r`@oRxz+>1TvvAd|IRf6)m50p1h%LGb}F38?N^( z%6W+$x<<<#yB7Y*bIsL?9#5;X(vf)d_lN}BkRN1-FXxqH+|CW&=tq_gslDL(o!A#x zOW+zrA3VcXnxCQmUzlZ+^@I%iSIBC4gBy}4@9CE`GcpOQDugLp>Vw5>0=2b4ENrw} z*ohEC%>_j}O66(PV2^D7cKc4s{pu%`b*W}{Cp5WmKTAm9Y=-N103*)%LJ^WmG;L6m z=}#T4o8fsvl#Hx5$rO_=au>&t7osk2Xh-DS0VuINGZe|*y%@P_W6Ei-b%5uw^4t=F zzexW&^3=Q6_HWy-^}JK}C`LMuvY)GH)zUX7`GdK&F9xiep=4&6tO0L^h9FJi0@57X zW+diLAab)gcLS%qT_&}+#gj5#oP9tF$@dxdyVv;R-Uaq&ytZwr+LOvKMu%v?O-q>o zmf|rmYRsM}F#qHS`CTPRhY97}bDr}(; zbKx>{xq_L&aYpbB*etn#5lu-m^S;2(q!XwEBG2oSnJ@d;U^Fyv)+kO~r-)x#H(3yB zYZUZ!mT%`E>oCXEEVEr5HB`p6xms7@cXq0Pb%Ge+^|0XXsG8YMx=Zjgyet0<|fsFX-H-6FYg$)^;&NCePwO3t-A-OqUN$qO+@^^TaWMS zPdh>t+-E;0BbH!561v%mX;GFNVW89Ko|XR5^+5Y57>Afy#jRT0 z9Q(5zi%`F$%JU&&Vagdfk|JK}J2)9fKj&b#+_|dl{?9jVv7~~kHCP&&fbc|6*GNC3 ziFujs)V|C^9{Y@x(zgLg6gy3AHLh%}waM#?Fg<15YuxjD`D)9z3o~{tygK*W*nM^O zHFeyVScq*!si0Mhd-M$&i1Wb+YCclATCX;DSG{#=R256*$JwVQkrlfEe zV58lm7=`lmyHimYd<=^C#G+yl`lLPh#m$yZ~_-td$ssmU=y!itE^qNb@;HFi} zFas@4eVTT*GzG+pCD!N?Z{-z4Az$|G-dZ`oiJ8GI*RLmcS&Z?_mOd}FTSm1JO*a1O z@DlcGiSengZ8>%KNh$NY($EuIJ1&3PjW-0XHX6#YLXUzKU@!K(?<=aXKU=ChJP!$u zRHW>wx#}~{UKMJw>^cP)cHGDpI}V-NP*J!4lX*>i$YJ1bcy1v*@iIJVti=UFC+)iH z;9z_*W~3-e87)!!)7!ID!t@O&o&x5OawFmptVrhtF0YK#_kEM6SX(DbMZNob5(xDs zVR!DQt}QSe)#5@r90Kqpk1w*5L+5?$EB`__!!j4W{KVV%g4 zNh0XWwYXAi=@A7*nTZ@9U>MVUH0gAR{v2M6&U$oouu8a)xY4s;`ZblKGTbnHx|g;| z!APDc$lTWKH>WVD?J{>`PM%NB{=<52 zNtjl9qlhfdzD+K=e^Y$oMu6V4$=wGObG~Wqw(3Ya5!>@hc{n`IzcU;} z;&xawS?s92iYEArXkUY2Zz+0pU6b>Owy93>Gf}@99NE1`o_w?4hC8}_ykPDpyIQ*# z%EJVvW9>HShUUFDB7Li3Hm3XASG*2qM;cdge%sKi^pBBMR863a!94DIsQ)IRQj2RM z_23(!s^n~ihbt0)+n4@=TM0F?yT+bgqnhqltj*q9(9f8+!Il-y`3hc4Wj8GmBDvpx zq{yOu$_>9fiZ2_?>fA9!z~-}K!4ON+6r;=3mh?`5UVxTiBti=~bE(-+EpQ6`OWYIW z6d0J33+OR1BlE_>xVd$e4+o%2@Ct`?&o9U+bXz2`!1c5^wRW4lprO*jT;81XuqX7) z{K%Lv`^09r|5~6Ck}|+p2-j0kYdKR~!3WObrD_>!6s$~bL#-4+{Q6uoBqgRlASmK% zF9A8Fp1x@xSVz`x=#d0$^W9r|3oX5{J}Q8>_ZsJN_u!2Y)~i2kBMORKqTg&3UgzK8 z7+}3j`M0v3bg`_-&J=6n&WD1yczP3e4irXOMt>D(snD0258yMT3L$Vv8axj)kdT`L z_~c5+aQrz9FUtJlHCu`J37Q%XC4BE@)E3a=(Dd^DFKPk#HwZO!pn;}z!n zK|^GWblcV2&7%vM=pzdDrDAM-Z#TgLF(6&Ktawh$ z7VXG?EHAmV@uG1+!5jDlKSL<@v+L2~#BAwnd0YRaG*up<3_%X5w_tAx%Q@zQTyqC4 zu1kx13N5E^49{KO%HHt3JiDHaN1boF%d5_9sI?NUA~t{0;*KCm;;steB{QikH8L{4 z-8#|z=IIqqYunjY(RF=-w(qVc*irWM6(8~r+kW?|pzl-PP*uSocMg4Um|QMtHn;1^ zZ{U_*=Z>Z-ybmJl3(@7Z$S)7*UH>9C6PFGWH&(Vg_;2T!^mS$$iX-XbRm9eqGm3A_ zN+N@rMDmx-*{hUAVan_D^+Vipfz%H8hKQ}{GiE2V5i;S5)*@d4@8LirQZisWhid-R z@oNRSIn#z`YO%bXxH>cNMMH2?oSpKn31gkSI9vR+v(1UMJ&Uf?&0&3DX2Ml`=>qk) z^e%2WJjzzv)8A@wWwGcohRAL-#qJ`yUa??+-Nc_q+k&ta{-E#K#zV^@sw`F@Vg2}Y z3kNwXF_E6Xd!1_uC-wo6=xR?Ia*rXQl~y5#``2B1eX?kxV5)dxg^SyV$aU0K$>Fx~UyDvW*_v8pC4ILfEH3h8@y+0VufT<1 zLQSAFP4+2n#0a}5N_h;~4K*^8yup%I>!P0j7W=)MoJL&UMb&GvFv})`_3L77h)3F%GDaf)?H3zYc*tfT(%jHke@enPxL3pLm2Uc*zaXf6y5%^8-6ZD7>Ji ze<+Mvf|%75fPd;oPy+ry6^t@Q1bx543_|(ZBssi$<&Y|w^~#>lW|PN+#)zGwOnFh@ zd^X_$z*z5SaX<2T=;R2mO``a>aO7hpGj`zN#16=?s%}EyKT!pbRClWMlu4S$4txu8 zxCNnY0zazRqQw9G}^AoveZV!Zf}Xi~)Qq;UsU0&n7ppKfR<9OT-75*;-ry z=<%tEV#uchYGClr^QQ*VL^6lVLdgiWGS2&Q!XmtWBwfabIYR5;ps{I$UBtV08Z3B| zI=CL1L3~4I;Q8VxL8(*|hIxFnpFvbR61)plk`+N^gLyNA(~%iywQLZ;ssIF?#xm7} zD$L~w#*=Ds46h{b+Y1?$WM2*R8(Q;$g>^ozMWN>)c5Zn<M<7nl?r--%sJ2I8x7<&n?O#VfS zb9I)eqJ|T;+&aPi7El(3_{J$nJGeLDahaho9t(hWUzr#gB7aR= zrnzHRtDnG}`Ya4kJ%V<1Lc|1mGu7^Rf^=1Y+K%bQ5|$vmr9WCMFg@$G=1ou4_1vE5 zs)?w{KdB+_X?7-%)GxE}K^k_qO{{_rw(*qN#9lErlxlULCEFwLuL(Ex0{RNE8$KRj9!XNij9narwn-y89sj!RuH6 zKjT+%tHI4(C0XkpjRV~O1{mYOUV)v1bJGB!db=gBY_Ryp>HF&L{nutgOj|d*E~FzV zM6hEJ(6>kXeew!k1A`X`ApY`oj?;7HFT!A&7jQFL`60=tP}OpK(B1}+61x&_f7xW@ zy&YWqH~0I0`fR3Sga0?%H01w3nbCjDDY8ZRRtL$45xP#{!CH>ksz0N7Y07Kyk4Q!A zCSQ&LGWqldsS!%X+m3RQ6uQ zyoUe|S+uinqv8PIR)4CG9u57Gdd4Q;o1@j?W(m10tA~$odSC|U)mu>?xg8JRIiK?- z{dYonHfj`)%`cE!_U{1!tR;%me~9d#4`+WXgGmxe5Dw_RIGWmeIb>wNhL> zJ$yB6YuKV3$89ZvUjpVW3`W-4p~e(thvq(4l*$dq_vk6V2kmqoiRwR7rJn``3-yLz zQ{rlx9dc71QU4fqVl;rjBK~wS60U07*kzh1%FuCUHTV?n#U(PR+` z=mx~)CqZTABjgQzTfocv-4Wf}l5XxQp!OC$CJcAO6|t zZk5q&Zb#%2+5^P{4S^PKVrp!MvI5eV6t@{3^_^xsS z$%EzlnLQjrS0Xn59xyeX-rs^bMj3#UX-@Lb=&#@f*do*qVLxz_H!EK>5ZC;Q9FlJi z_~}D}yI;FQx<;=dZezs<2N7~S9Qa}K|Zn|*+} zk(mbp%(MR{Hdnzt&+X5GO8E_ZbE;Dl5w8GF1NS(^kQz&tLuoXq0HFCQ!X;bO%C=l( zQ6ehxYi;vwbGUTs>#FQ;>PnN9J1(V)7VQ$eiyd`S8)L6?!D^To^g)wZ0VNadkYM#* zYFYm_si`Q_Qp9Ky8jiq*&ZG!&5k>6Y80r12+x=2GWx3Cg89T*NF(=kBq9-ss>)@UZ zG3JqOd$LL`xf3>SD{CUkkJ8l<$ny0LBY)f*1D0dUr`_0mNc}B!Ozd56m&7cKZ6b8m zD4%PxF-rg$;^^koWz8z!ED96Z{lbg%bqaigbU{NOj#G*FDwaohXXQGZ-O93VG_gI# z+C6))S=2r3UTFwr!Szwj<_du_1+kHvD?dlp%SXhqsrKydF=Yk_RtXHk655J>#?lea zGQ?G`w?|M|>!HwV>~m3gUB5>j3^Zw-Sj`&hUYLcgep1TtZ>=y4T0kndU)l)&_#m%O zW|Lr>ki+$~N8RG>TPq4xvMJd^xe+Yi$3(0e9Z$ynK$ahXI=|a(oaW;mWjC5FHyJs! zuZOr0C_YgMtuf*#$3WN0%RWi z3_8cHuuG#ISFcB16@+uONAhUf6zr$6jLk=>H@}f{8yGA4hP<$)3VSmC_=WCOKM7si zPu(l)sNMb0)&5Y$y~eFfPW$2a-kxC*qg5o8YwU^KDp{MV=L6jbt`C6vbK|(E5u`lc zR%Y@Hsh#TkY5?RdQbT}CPX+4S0AS-{Bid%yU{G*yc3cf)&(4t7*|vLa$h zZ-@n)+}M_|p%cYf1ztC}Lz-Cb*Z`QyV#HkSOXVwH0Lui}07Ql~mpygjqmFiop=2h~jOx zJax>5Hj2tBkM{(C?}^mJH!_C3+JGs22AUYC&}nodLQQc_@!n`e^RZToh3v76UUG zQ3<6owHNYYZwqEgb!rTp-{C;{3}G~O+wxM-Blp8{t=h_808nmG#ACM&-CL_7=2V|x zE&OTU@fb(TuYl(5!ba2*VawUgu>89ocB*h8eKl=I1p<0`t~v5zfQfsH$m(+~MqLSuxc9JO3ulz;54uYU&h}HkU}9f*XD7fLW|lXU$CDQjpXe$?5z@F z`cs6YxXEWwS{q#dj57~;gKx0Av>7!Ac>jf{h(P@sq>Pa0yjP1`D5XW%HF+LBl>W@r z!YRNW2_zWpV?AFr9yjO4qha=mp`R*~O}wF8f*BNKPUt4OssSQvFSYZoDsLY>kvvIylJ#ZA#@S!qN zX~YjzVdLY=V!1a-Y>!E9)Kq}x3gFC`rW_agQ-IVmx+r413+QS2?nY)g12x*M>{UR| zR*}W<1!qr@O+dsq3X`fk;b1_l8SLm*=G^CtNhvB$3CpjylgikmK5(tj*Y(HlNVMKJ zC06dC)M&WQR_aY*gp!aZHnIkimWc7)!g_*1TYnPkvh#|&$U^#WfzH_txn=Nc0>3JIUAu`D;pKIvy0R=R51A5+iZfcACSSx%CykU>=Z{JrGc9&Lp9s!C% zL*y+@P}dqOcvM!wk-Rw@4Sf#vUx4OgYf&BOwvW!^&c`+bSWSytfUTw4xFW3k2>WTS zvmARUq8Nv6ivm32y$9WES$Pp#E8~(1V^zncmkaLm*UUC_-_I#&AN?V>`BS%;EKsex zfBkB}Rq|;&FX4}mCV~puX4e@Va&7UM7L9E;0g;~#aYh5opGLW;f2y(m4$uCAv(mCjY^?1|7ex@u=~TomudLKQnH#go*7>*yU&S?#i9BXEAug z>8TLKieh>i52)-mB$VldsE;OqEbq%YAiv%K0IJ)wb>M+W-1{H8dtgQ_V_}$Qo~S8qAq8F-Z-Y{Pi1T%h=vB*(1Gn} zos06rxwpeM4~mKZNM3^y^M_-Hw76@l{sGAZcS9$0xsoB3Lgk$C_jcJWEsptu@r=7$>c9Z^V;&ot$`Fjn!U_`@s2WfD z<3wFBX11*9D1bl#)cJYeQ=nE}J}C{Hw?%(~*TW{;MsoW&;~;dZ3l(}mw$%}DrUH4g zxjFAIgVGKyjG0iyjPO_^O=qFh4g5qIx7;51zDr+0e1e4C!F59Q)n7;402*Qdi0z+X zETy;VHJdGO1H=Ycvk8)xYeOI9KHr>L(lp$0S@woZV!o}8R+Rj@rh_Z*tx$7KgU1v5 znbP?Q{Z3M6=G44!KPKww!fntWB9~a;74I3T_AUUWn$UZ2nn(FS&!38iZ7{q-LT*DP z6Ph@IkT46Na~`r;!f33e4FWZER*);@ecRmrP{q)*h3|@xlk_D`=+=_hu<(kmSkIGO z)+dPe59nB@=Uxj!D~Kduv~oh^gp3WeeZj0@GteOHDHZ*;cWo%>L{J^?vI#zf{*2c3 zKZy?SX!AWY0R+ncZ>qG(o}IOj0=EIKnOamHT5nqnx#X>w$B9;)1buL;N9Wz zz-ZOHBpt8?o^sJoP19mp@cidC035KRN#FI(v;=mQ4q|)qv;|0H^#Gm*X6}E#8R~BM zU$&Wa2i>FcK@mD+ddD+R#NeN&O@F=ULLF^A@LcqP9Xe052EQrjl2*(SCCjaw?NZI= zRe@eyfI74~Tg$gJ5LYNDj2Iwe;DkxXLr+GNjHzu;D@{*(IL|Zr+Tj+KxA4f0fj|orO)`A}^7Ei-^3vW!bts+h_@sqqd%vMVqpF0o7v=#0`;1n%b9P2sfHeuv2YB;cz#G(`0m}c`_GBz!LQRqjnu`>cBH?-Z z>TMTkk#bFKlnB3w`lNP&!e%#VA-YE%rZBk@RzO&Qj5J*78$L8hv}^GcDnl-fQzsU@ zYm15ZuW_jPb#W?Lk=%nV$cczLO`!mnFBvqzkgMdS5ix-eV6UTTeT1!Uq^)8y;#2g# z!9x1!dHJZ@iTY+60n}dr$q#ZfxQ|)&fTHym!}WHFe%4Kt#Q<<(ah9NFZ!lvj7Qvm5 zWC6XB7PrJcGxp%GE#JC+5n*%)piRFEOMzge)>c9BQA|qXi;x0Wgi?gqJY|Rpv#Ip4XJ3WInq_bo)7&)= zk6WimLjnRjdptm(IM6W1yZZ7&lbiQ^kCJ&)+Y|$s!3xmX=QI~a?Fro^r5Fg@f}th! zCPCnOc^^YTY*QXWZYtuN2n0B!XhBnVqoY;ICG>c#LVwR|=VgjTg5BKq=ogV>Y;nS( zj@Az_aWCif_>)CNAxajI|0SS10e5{8^wn1w4z+FLm{XY|ed+VFiXeD7!VYMy^^6y% zlko`jR7FUqSw5t>v`5Q~L*w?|)D$|LUV9t+LM}<2ql`50cV+!y;f2!#<#F+F7ztTt zC%q0piym$xh+(;ibxH%dD~_BFFT@sw3e7MZnzyEuc3iPwAChn^4@v(H`@NOs(67@! z&Xid z@pj1@Fe4soGoF4*Y!)LyP-C){R$!Rp8wFObbA0 zYz__h_ZMMo34{bN=W$GRnx>21YHxKswuFiJT71@m9tXvO7(k*tm8mJy=(Ze9frfDp z4%OV0GP^2?v0Xvf_i+Dx!g6kZwHXjIla<8^HV@1<52a2NI;vI>l(C8lW(Kw#bwuhE zL8R`Ke)7dylIZ4d8)+V5sehB-e$-M?GF zFm<%`s0Rp6z{-6g6uL-X*-JaAxy^yld78`ETnxa1a|yT4O59D@1gB zq_^ERa(sY>11bdoUGGN5`6|Hwvo8=zawbRL03SijNG2NcfShE9qN>?RwgjD{;9fpq z(zoQA_W|Bnj18J|q7Cv8D=FS>YNrbtpks5WJFPMLOXnOLf zothiY3m$?!XaWX+Y^rmV+LJV}AQae2Sz6_D@iG?mTYiJBICP^`Y1VMtGbR29=M^-; zzo=;=zEz41i$fi+r+IHquo!X(iJ@Zwl*j%mta^$-7YaLvyu9PGSn*-3unv>4KytY0 z@wEP;$KGo<@fm7*&HS_~iJhp(Mo<$>Tsz9u%hb}_W z3(?calYw7r&oa%>jji^Y`2Or9Hr;~i;ibrZaxa3s^y9?K%`c9&uW22RPmiY{-d+}t zWmWC(E6X}4_Bo&SnGSM!`14!?D9kP?_bbF&(NG^3+h~`>A-2J#&g6cLU&7vw2LHC& z!Q#2)la6j5a~|$Ap$1*IDyysd#lqo-e=Q-OXO>f*5t889V9Hj(@?FAYcph;jVk06q z2p6Hc_3%>9VD3T$78O}Oqno!~!;A#UCi`s1b4*%a@ul15&dH8tEbHy#SBpP}v0|_M zeABCH_->3^@&e`PHG*F+Yb5@0%?(fC!g z32-wCj9>i|8G%Ga5L8KY?t?C+Wt#H>S&%bp`)r+rzyKVc$#el^-H}1v!aut%xFad* zKO&}C;jJG-Moe>=k`dKumG>V2W+r|W3LBy}4|K_dz<3ei(y8qee1hKu-U9HR^1hVm zZ&<+f9uN|e@%oo1P#N}yU;&Ao6<)e4@JLn|S3{8x0mz2F#k@_1+Om4Fkj{5qPR;h+ zXChs^Sp!wsuYMZ?3IlVy+G7d20`swi&F+EBB02?VNF_ZGQ^IFgk>FEjfT?W2cCCz) zpz~ly1f-JXu2F}yfB$LwxD<;so1*#m@uy(+ZyI>+HI1kHYkCfMQLY=j6v0 z1veDxm%&w2AjV3uxc(nGoPqE^ffCzUm0@8RQ}q(#W929?@D13U$x^_I>R)q7sSSQ?FTHDnFU zFFLFFP(q{M8k^uF5@Fko7NA!E$sfgmb?>fc<(Liu&B2aF_3_E7_aK8bUz*(~%mz7? zxAXqJOjD}v0gA5?@7*C{QVGbZ8)~bX>h~tNMb8>G$puQQ5xfH1JzhNEuCVTL0TC?p z4(1inWPURliDABH$gvY$2|UN9-g^mJTy?^x>G-eGMiLJ#C3j6~an@6GOU@4V_i|w> zv1@#V^P&V$o80@g=0yHStcG1XZt{>QIj!^1|Im5j)eD@Uu_+0YKfe9;xL46esqu{V z;Rsx!h6moX|M^#W#-f*Z%XA|IEbwonS#M!QT3tYY<(cy;Evr28Jke{ zrj_K6n0CMtFv3UT#wI2PtxYpj-Bo!LXFTBFu>ex3vxAsCyn`T75Dr8PGxd>%QJ5sb z;-X$fjDZ{{sDas#$e)s=O)|h&!V%1JN)h;K{-HuJ}qyGAA(a9P#kmu>RzgD zh!u8CN1RI^(>aN#diX`rFw-AW`$0!h#ghHN_!kvE^vYApO^WBIZMZ zoq6^q?APBrI(M|AK)AEZ@U8t6%?^-ews_CXd;s2~w z`0o@6|E)?vw+u`}VY>86*A~#4|9NWktib7*O4!&@C;yl)q8L%D8n))HdhOu3xyL`{h=O?2C2y$u)SbJo58b0;jVoSW^j<9@51VjT za{Eh|rEDI%yWkmIvh^2`ESAWN6@JF0kj@j#=&PU74)qHcfLs$u-c}Ei?ciq~V$zo8 zz}50`$C5UBZv?zU>p zdwM%u&PFW(07@hE;}@fIkP`Vvp7O_5hgHD`Zu00>h*T_GMRjtQXD4~r-*DmFPbzl- zip>*GjDM+oVir|dKzM|8G4a9EIgnoh;_(c}*fmadm#{FJf0=*}YJdAR;b3|_b589N z(XX;w`#=3&bf!8q=VIye&o?jr}d+FLD4zw4KzC}ohdJio|^Yg^N%b`W!uJ**OSf|;E zDiI@{Yjo$aya}rjXIdT+)E>S~jcN{Di<~vhIOzsurLP(@!YGs#=%hvVE6H*yFsMNH#ilY`_izvPGFoQ>uSoRB-ex@Y(uCDQ~Tq(jycq_H5? z?sG5-YggQ(E*vITR3*cqHz_>>M-jby2Lz+tb-c#kY7-uypSMNk*-{>isJt%>Bz@oV z`T1kaW)oR{Pr)}PA4#JIX*kRSrjQX^!RU4M4{*Ib6hXKEeMVcM{$^NMVcm%DDid!@ zp#`Y7S&s@7S3tT;#J6?wOf+y^J7$I4P}i&A2A!8@;2Qs6#B7vk_v^2}wiX`0Mru9f z@XgTr7a%zd`hl=g7uQ?>Jmm^Hgn0DJG69k%T!j55G=zU(U*fLd%%a)rWEFM_OR;sm zi+{iS1$(YVy?pEt5?d5%@fB%#SmjVe%n58|yVRj30a70rI1ryIHZg?-ImX@n@0eQ- z40qd{Y$JKe9*uuhR}{ISM_5;z9XvG;3<=O)TRoJC$Td0q6f&fltKAXFfcGWmv;8ID zyNed<6%^DsxY2C#JT2V8-#pWCOiWA_3oXK#cy!w_k&FBBjw&{ia`=h-dZ9_I_v!Gs zq>J>E%ohA5xc?4!5xN7!I!okubXl52iJ$)td^EVVGguWZa8%LW{xr2j%7O4~&HNxU~x6 z#_PsM4Taq6y;5W@48c{OK_GyGkS})B^UyD4$U24#_gy9uQ3vn*`EdAfUzi4vc>8)j zM##JXUiI&}z#@XRM(4>+Tk`)_6z2L07~&&wgN_S9?l}O@rn!e5z?dEx)S+KMVEY&R z#osdcr(#XVHB6_pgS!Ntn|{NH&dHw9o#{kueX&~Hxt4h@KmLaY-T5D$p+Lfwo(Jg4 zV#q*ez(kte*xI2cs^G$$OgukfnOJu@OnuzTM!{?kc<;Iv>UAwJsQcf3jr zn2HnhmMr2LV9YK;4XPA0kvgu$xg^Y+cbW`L+EV9W%mpG3F<#YKirq7ycdH-3p#&-P z9>FZ{$DJnUV$KS?o+$p*1m6XO-U&AE-(IVU1U`Tu1|ihE>$H2cX0$TEIXiprn~J)k zx4$V;GJscyktM8^A2{?5I~RyA7#|ofG7K7P18?Ox0PP=BzXImpY)V~KLwpMShreEl z(lFf+um5qNivvH6>3lfJ*f9M0I=}LooOwzA=!>8H#RGg$@iJV9iI(G7fXh^|h0I4C zGNmMPe`$(aFh4q{3X@xa(L3KNlR1Q0LTy8>*RZ7?_`_OUf-UvWS3I3s8CDhgDf zH;63Y6JMJvhykEHyH<6f(0kKen8y@p45KFo&H+WP7eG4;5A8G_t~+@oZmS-Df?){s zydW4L$VZMs=;w4GLyk}Kp4RCG5RO)n(Vrzm7_>fKIFS!}5$>pKn0}eZ-=~aeanE;0 zN#gm2LLFKR9AtgY*+O^}9%Ev^a~@2W+M%w+DBeB`O`_=F5J5WCG;@YuI6p$x^2 zVgdLMhBR(KG6OIhLl~?H0P0<~?pi|*15fE|TCg?L?=Uh$#0;OJo!G(>vhJ0u*<;?sb10?uHHcD} zEF=oN8su2}*0(cCg(G%R?xy>kd1Kf1pw*;( ztss>p<5H#8A}&=Fg{W9j5h(>_O-7}PfSO0G;syaxQCT9gDO*&Q)CVxJ5Xxi(J zneE@BuhejK9jLyg#K>f(l}GXmr8tlKR>S4U?kieydf@EX%XG}WnZCDu8?&y3aQ+Cl zsDKBRrs9a$DKbV1Z5SS5JjDb_bK^8(1`krRt*&F>LFWF0j+EJmIlWM*)|LIEu!=+8 z(4Z)e9SGOkThrEZN{3YAiLcqoRjt{{iC{FuC{`XqvMdh6@-ZhmLgIt0eGiNK;?ApT z?#<6U4v&M@8`{nBZ;2m;(0UE@=Y@R?rJWIhgu=*L!BXt$yWmuS05p!&_%D`e+RDlY z6LpEJXP{VElfH>jvG6LVE3kAESFd4+ehaho&3NHU-8a$ng9Qi+|j^d%H5 zb~THi!B<+=M7*msIgXG{CSZ3$CjDfNZ~7B#N}$4l$ncS^0kFkPP$K_eHUP|8Hfx@T z@(*_Let=D^2$yC}O}vJmf_;bj;R01ZnC*x1;WKwdy0pMq0NM%)2R7K8)O?nH1Mjm5 zIzh7k7zRS^nv@ZGfQm?8mrwuf4_73k^Z)ZR>JJE$B6=aK{Y(9Cn|cHGIB*Kxp50GWZ6Lk| z7~2-^)4`>{I`#;8n#rP!_ZFb6OU8bO>>4iD(O}#hWGL0GNP@4E@mk3$<%MdAly5P1 z8^*G?WC^TTLlxQQGxim6j`rjuvBZp5@8?DP1cptxbSufCk}$t8Yp!3wCC$(OZK@ie zPgucnV%0Ge8^x1Z0$PFgoM9+#XFNflN4(-$LSvH4QYG)fjcRDIq7@Dyi27O&C4qri?Y-gtOv11pN;C^x(lp5aVvYsjsJq4KlC2E zX9irQTw^+YJgdoOT8(=g>Mw4PkzyumqQ={bf68)K@oJ;HCnk{yC5%|#VZxFHgRd9y zPUQ!U7R+Nye1XK^bn4ntYOPVfSEq{MQxUZhnTkFdTY9x*J- zTsw$qub`u?6tcc{&vHg14WyNmN^JKU)41V*I8#w4{PiX7)MnT^A+EjVclK|)A6#y! zi^|x|d&yYWXWs-C5l&9sI%Uj5-o3)^KEq;IrnCZM4*gqf!&)r%20j#vYU7zly9!;u zRWz+GvEC0kX4#zR4a%Nc`ULEtB%t}X0(Pp8xJmpvz`Nwn&5hpjW$FR?fQ_==YOOO| z$BSL!sr1Dl+goY8h5jzKAu4G3q9gcF^U7V=>UPEy%&D#LFV`qV(biWl-zhndKbR$y z4Kg^zmiPzV*teo5zmz`rhsS-MYhT`Zou8aD>YVC#Hf|}>renr7T3nb|;fY`~xD|{h z^H%gR_e6^=wk|6=M2YmQP$1gfFG{wwGX}LVV=FH}0ff(0jumeel`zse3s>wY5X~EP z%%7zj*lkEr^%W84c+K}|#pAtt0Xs4uhqH{C*J1ZV@IiH!h=)cc|vTCdnk{} zH-Ng{IJ}ZGpyc39{1=4-F$~)nmez6kz%}}}oD)`k-WN{Y4o@$?4C-~sM71*PcH_Ra z;^_-mP52Ds4PJnO*Pv<>RmvOviJ?Fu1jV3Z={A*jx@^W6IrLG{Of1OY87^(BI&-r_ zc57wy+^o(>M!EgSdYS$dmbfZMp}ie4MYzfunwzE59gEHuZ;IT~tEX${p{&r;>6BdIc;joPzubt{8E7k#*h zu&r%<>2NB9Pnyoyu%RJpQ;ceLSa)*Cv(ErITIU!AHYp3sGp_C9DemU)2)eoKG7>YbOd$*qG9JgZ z*?pC=O36LRYt7@>@ccbThuc+h3K4v)s9oND&R`q8RJl7=GS^mnfrnKq&^A1ISg~?r zpEm3`m*oh}0|Aaij^bKXZ!eSHh;{i+dv##{dpVMuHCN-Y@teEF&HuGqsm)hMG6IUX z*gK^@zt&RSTb!S_`jEzZTHpIKmo{#>bo9>Ar%#t`T>Hb8xQAwDtERV(@?b>~FU195 zj8`^@cuC9QJd_V4o-igs0W_F+)iS%*fi@P8!2HJ-ibt^q?Oh~DO#oSHU2pl)x=dT) zye!8{nuf{i>PqJBcXhlL;GLbs%vilkYpWjhu5oyEK*H)sT%eB&{^IBOw8iI#JQgy%kL9BDlHD5W;gk;(cm)A{Z6g0j;s;nz>09<0gu zFBnsq@DT3pBt?2v*+eWsp{k19c5q7ap%gXqJe7hxlVB&Ct)#Bdi+1@c#@ z{a4K$9svg5X7-9TJDP>vZbf2vqw?0r-NN{=Am?$1cLZ*K3EAN;+N10G72Vq#b@1oRpsk2R(XRjdhWNZX+B=La>4 zs?gDS>{w*D9OR@f+@s0EjT}5mBDeBx>hhhJ*e0)Po-C<5b$uHay|?I8>FFy9$kG{Q zN{^R(i6%d}{I~xU{hfJk&7yss4s!b$S)w&;uRC8?y{`-FdX;6_tPgk<$q`B8Tvtit z=HaNfl96!m*|c&SE5*A@pec!|@FvpsUf*-shJCZ?N!YD@mkVyA4imgt9KV3^iB@5W zA(cTvBZ8*ioBjQ?-ad&HZUtR!OO>Mbsj&||kBJMo<$$qzzS0DBPaXJ6u`n7iJ&SP8 z*1eTkW#=UJC+Kq(r;jOAm6wkhtEXH0q{q5$yyKbSF=xTv+lN$-xe6LSfwxL|ldG^G zh8}~nBNIhO+!m+z95i?l&p5g1Jww})oZH@s*DJZ@+>v`;G~-KnddUn4RGH0jNqWt72<6}C;u7Pd*cR| zl_lFHyeG^q?g^|oe_k$kvD@mAuTl$ZjnUV5ZeVjEo(hdms{wj-0`pMx6zhjqGeoY8 zcG^+;#Mnybx78(ym!&64W*;b-lojCB`_FsTKJS7X5?Rvn^%ws$llS2M`LPZMR~U!g zOnMox`<&rf0p#nKNVbem>q4{8 zMerEdR*ekdUw#M1wbrps#t=1L>JsJEL@VI)+1M(u(REk%EGK4M4st`do`Aeuuv0SH zxF_A9?Cn5qBE$ZL1|XXxnVhb;MM-^4fl0+0Mg)8-;9uJ3Vk66l`kq(v;vCsQ)jE_R zkooXWLSJ{Hx(cxuTvjkY?X%8MCWj~EI3rkpdgP2i7vch**y`8f3$olPtS$J;fW$AL zyH^QRMfuiLQ3?RUN67&k>NFIa?aw69QKPO|1kFtA?BCwx_$)>W$@2 z0Ja`yZUiKhN7>Q#BSXhX>S)ipB~#GG4`#w5r7&GbW2>{`?dL$(_uJFx9Kv>dzb13- z07`)iN}DDyfXzM{Z}!&2*KTrq#}?y8pe%n;5Bt8kkH`au-@XCueaVvzyAi>G(kNho zJtCleJVWN{ciP2(a-u^RzcQ)qWP+ZBWP4?;$}(1>p#U%Y<(<|iQ4`e5_>=Bll53#p za17V8|B1H~10J`z#czsAEXED~m)q=JX<9^Q-j27jIO)H1=-VfPxq7{znG^HT z$4=0t0zS+OWddHin#fNz{A@8yMr$Cx5o$&vYpoMSy|#sn$0ggW3l`|@jo**JYf0fZoCG*Vpy)Z0x#bEpHjO~f0IrmL zwXJmEW)KQ4?UPrbe3cth#?GUuEC|k;661Wkn#ZBwOT^|Za$x%Pa2Nn*cJ<(=4qCR? zp-S7bzDKxQkuh?F=z7B!uwkf4(Cw;9$)G7aiQua&-(*7w^qH5aQs4@H#-lDOSUF8H zj_fMINOV*X>z20{IF^ks@nc&D-d}h3Nz`e$7E{ho5#eb_*B` zCcWH1;^sl=Sm<+BS?K~sHF6kt7X!bw*ch%Km9IZzu)}{NG4e`p)Hu*_UV~HzfRrtq z4dZ=W95)}`D!$QtzGy2?qe4>q)#RzZXj+%n=>pP7^F`Llh$xXs=NlCBD2wQUH6{Bp z?Xds%H$?&V#TTT|_|EpW?BGlxsRrN+00aWXFQ|+uZZ>s=Kgo5IYb|s&04%hvbq`4k zlVH_mlmCM=304U}e80f7pd?a2QTEY)AypIKmwLV1oPCXCwC_iDJD_lg4H;6w&Hn>d zRkLYKb0qgEh>*9ay(oBzJq4KeSMi;TpMk{*)%2eUlr9CBnb0#(K=-SoO@_NB;c&)_ zEnqPM_7M+Ex7DbNCcOY)x1^*e!T+&i|Nq5@f9}*Lxfq{M0ji$|4>`PU zg(Yw>q;EcUg}#L>9~0oiBd>`wY%cB`(~8{D5hnCX6X!bb}T$fvG=E0Q?YuFvif z@-=H*w8JYrsLdjl1~zXvA}X6Ht8U}OS&NTGTS~aY0PGkYz2?lSVd3m5{e@#UH~WTj zeK-GpVa6*>Cs#8#e$_Oq0aK5lab;tpXDicBx{g#@R3RhEXyLg~+K#Y&HIHSDNh?}L zDBhK}Tf`EQ*Jr*AZ)9ryk2 zgW36uEE?Kqe^6}PW?kx{{qIi<>_>$7`q_8aGSA{;ATd93{p{?+z0(=ya~d5E4GhWL z|9;)({~W8oHTX38=NoL5;!aT91@IHu4M3Nkaq>{I)wxF#I1_d${9|ctzjKeiEnzNW ze7zOx$rFOq*nS3nma!_u{Z97TzSDhk_w3&NX8`z>y^yRb)CW-gvV(iCS-jx zBtlUw={r^8rQmM?4TGZ+Nhp~l5sZc7mY&!Z+ua+`GNdj)X;I&LMRM+R+I{ARB@cx1 zWLk6HTe^3RQd-W7h2Buyk=e?NYZL$u!C$lq z5U^Ni(t9SJnu#w|oU0V1ca(ki%F)BNweK-HOm--8E$>wx|K3@H@A0QylqB>s|V z{s4T8o2ZK7FuAne>vzm)F*%!*mCEC**?fC9xRWz zWLEdOXn#?d*ke;+r>e_bWd~5lVB@tiXQCbeq60K=;1sp<%3~El6;u8BVl!d}zV0QC zr0%<59hiR1b%9}7r~X%TOrXQ$Cqa%r_T|anDC#&j!=Igeuf0%o;Fdlqk5@mlu7hYG zM6kW}Y%|QA7^*Y;LWqzYTQ+MnQCs#M=Avjp#&_01BSQ4n>(L%H(JlwGmfY)%6tnX< zg91)v?$xh}OLvsUX--Y(ZC~*!{bi`nddq+)t$q8&3k8rNh=npdy6 z@^fwINY6F7yca?0DV4jyKRBYm$vag0v`)3fbI^sC538)=(q;rymyKsVM{)%Z z18pmuEgp&wi-*uhbgxxj$X%SD>5OUFck^P0IYnmo%xFgVpmj}tYt;dB6z z9@)G4Db3qxxD{ucF&*%nO;~^=%iq)ZH{D_zQEf9qF*Chw>Uxi9n`=u(w%H#c24L&j zEKXa`JJ#Cgw02)4_au0$8h?4_kb}03+~B!)#%bQKNb8+lh23+ZoLjzo#wA{W0JD9v zd-~Z`SkU*=&pnymyXwtlqZU*E-K)Um%)>Q+c8s@+(GXj{4*%t)Bf|n;$p%HF88N=& zNxRY9_r#;@J;{z9E{_jYw`EP+a^$3Q_Lb}egWJmQ{7R1Rnh_v$-KcPCO+TGyKPY@F z$d}BC2^hZ|8KFTfuoww17W{O9oM(MoQ$`DD8C$T(*Rl>DbA6wF#XF9~gHgU{S7SK3 zz9z8SK6LBO?ZVv!32(AlJ_p1&%ywe9#(EWe8U*fxPMo%q^!yb+ zb@|}4$heN6$%h|G+7EiIr2TMr#P!i5S-0^u*lI;ayZ>MBqX#P!VJ(&?u!fYBzSP(W z2IFgBNq3EsxMaEiR6AD_IC<>@g)}~|*~>k-@8?%@=N_CpuWPGQa{1bV!jinRb|?JK zgu0>%IZ*4B=+`oa1@V2j)g$rP67#mzJN(=12SFNL?reK9dK%Yz&g~x>WxkV@mZ#Iw z_FbrUSohy=%I+n9J7@1VJ{{K=aZ$%00seG+R&{#0tvw^w^C7VXZOuo-{D?%6KMSon4hH6p{dl);QTW$|FWH}-VOxk3Ol}dG~F6~ zFdrlECA0+7FTI5@#=o7ph-CFk|llX16qE> zn2K0QUyLgw>q%5`&)I#%423i{uQ_0SROvHqdTHsUY$vD7jG6hlC1>~AO>fR`x>*3U zu-g%bvw@3hulR7vd5mHO-6yEgpbat}XK05R%Hn}v)!iz-}XQ2zSDBd_zAmrTK+cn=dbPujf=L!cC<6bh1*vp|9}Oz zBJdPRN;NI%3VCJnOhs&LzIs{)6}* z+b_HSwALkVXMEfD+mmO#JG!Uk`_%Ije!daE;`{0At0ZTCezS5`M{CCSvmYK^;cv9Z zro%K45Do~H$QgMPgBa$fm_`gcW>|*7-6d^Bo9tV?x~mOeE$F zt^f?7@_cvPL9pf&Odu90=dqbt;Q^cO-@7j)zKvdi?~XOlp9Kd8FNAIg*O$?5duLqUGU@t-Et8VncZcn)IM>Y?f%?fCY+E_U@sL(= z402E0-KjYDm^QBG8zC_x+)KiKL_41Rl|o$MGJLDg%Bs3*zBBDu^n&Z1$#e4x?g6I% zL$?{( zj*cX%X@k)~PfI)^N0HwB0!omI34|pUtaS2KpzOdr8F$RKZCL!HJn`tgitwG%&5Fy7 z`+UcX)UqDW3U5}@wZ?6o-Ku@7_qyfRiZ9U=o8(O@;%lK{8BtD~gimU-XQTI|J*(P5 zI~G3N_XW!w@;Hw+`5=5d)?i!tZ1tM^d03SF5jAh{Ygx;D1>?ka_ zxs2CY86HzOHK#8r3MHrGT8A@^Sv!?;zS>J0zCScZVz576PojQc(gIQFuMcJt&+b%%WAp;0_@WAZ9H8iH z^?EEHj1@k+u;}qBvLn(nqSmp+6LiANxz26NOUIvM2<~9+kM*&~50vaV`^2#_s}N)}`9qS2ey#7*60k-Ii3)TK zLAlaRMdz_uA^Oo0s};2`o!`WUh?GnREgf$warAs9k;*;!)B%fM(qMd7js#mdB^ zaI{vOjRyY{*Oc=(*GKQa;wh9Cmz4>37840m$NseE&BoA!yFw3+IDK;1y?b}RJ%8le zzmI-BeM}649zG7J)xTL2F!@^S2BfSzjmc$GaF17~n)dO=L=RPLmGJ&@4ZEEW`&hUr zwM}k;1$Zh4cb2MXJ-elA|MNNsbz!xi|F7ur%c50cubYXUrNx?6eGi`I6&0_M6=W^q zB(~pv$Ad<`h9)oLIb;W?!CxDyv})kT(=GAIisMJxI(n=Z&z+0=1@ClZTQzzMhCi`< zmCuPg=(fIY_&-g7Z`R(Z`EA^O2DmV0*-cMe5p+N4@u%k4*`;RSrU`OE(0KIgATnN% zVh+-J4z$md{tpc5)D}}H88}q>rWP3x|HY=7pw>?fHSp;>YLKaLS9qm-Woqi!SNR2& zxMy&hXAbAHAdbrhpEE%`^sojGz#0R z9<=i;_gSObSbVj^>tMdBrw2E>;=32F-e2~gM^jd|BY!z$iC; zM0d1@(u;H#s3A8;%)CmJC80N1q2a0uULZNd$+ZuBCDq(L*qJuZ0+y@4kOx%3Vn=w& zKjWtio0c9PL-vk0P>YYf7k}>sJ$W@CrGMzFa)>D`*HNfoir1AdVAJKBAqzHMco3-) zr2Y%u$TDH5Ag7w>i)wfeL-g$IJ&yqEEIh12$D%hG@ZvVw8@CL)z`d+Q-lVoEF9bsd z%bG0>MpC54@-cts5xF9X19`pRE&pu|Yl&A`CbmTEo|o ztmTfW6oQ#&_fY?~2(ZEwe-oCO6`!+$wvE*4EwNihqAP$^grsmuTy!uwV{TT4<<7$k zJFd~QiwvY#l|$mLOQjdVT#TImwI4886EZ6>=?jl}-OLMkHQ!b1=J%<0ryR?Z*SF}{Eo6GHFO5;PilXthBcSogc8= zBytOdH36d^Kz{oo;cS8j%0R7E7Yed&6 zwU-ws;Zdn|XVA+=qxj8`SPCqE4;XS33$4}@4DYucfR-*V6B>hS{h>0jY0*5-1INx@ zXN$Y8w9G?#sa}dCzJ11gp=hc=do6I@E$9GZrRTH!u>&d*-Y3Vlvyw(KkNl6fqkf$8 zd)C{0yoASCohwzHw0xDgQP+o0g$6nOcH?lbJV9#*?KhuY6iluPnJt(j%xSmRI;>tYQ~vPN?lrGYTw#Ae(KC)Ae;-eSxj}=kXpQB zlig`h@0KbzasyoY~ zHPqL_F9SB|yxMZ7$w1eHVS*P5{Q5Fdk7sfp%~@g%s}gx*dD(9z_w=`^<~#b&rf4bI z$^_j_|LWoV*z)(U9?nh2$nK{ckd+VkA3v1L{L4{fmZXpKzZ-|Bw^K;i(U*;`lpio5eff?HE`$$9pX%o4Tken>C*{Ng79FK;sk_WScQ5c3-k-b(Mb* z)9dDdq$`h%OFMY~(Tjd;yRvtBb7K=z0MOZf!O0193k8BtlO}nt@8l>UN=#9A;!@}x zq2Yfa_FZHXUTP2H4^|y#q6OPExNXEfnsScxCc^13S5?{d0(Te}NrODd74?L!Mpp32 z9%Ce7%`)%C7oIb27(8jey5pSaE%yp;VXi!$)6`2`BUp1F17GVsUCVX zb?P43Wi>k17Y0%qc~jWJ+u02F7qFmn%Fpq2(#zWUOgefhGvZwp+n?f^kgQNk-#oIl z?N*gjHm};q`g*t}$UiG1q(Jf3z^KyMm6oKTNd|cjk&{vFmSw`Ux(@jN!I37;Z)1GU zlDXE*(=igpLloOWQ(OdRzFTOe$IVW(@v`rwCg4hLd2M4&G}>~Wg(5p3(!>x9m*AksN`z@yaz50GG&`=Exp?;idB(8FDazr_Z@5zan z<9+wQaxW0#i`ChTo@)YP*;GVO8>y6mt{TXG;#YI%fP=$>Lw`Pmx-4Ly-2$Dm1BR|-md{L|6%iLVO~tM;cf z!?-Bk+@3TqX5>L+&1b23@i3Kvlw_Nnb<~5w`x+OVe336|*3{HPGC>;Q{F}BS?Q}>M zC~^YO$dD$Kway{k)`Sk0jxM#NsUNm}t5OtEnax(NZcQVUiDbgf#7F z3!ST4>Qlug5QAexX_z$v=vVhE751E`?bN;?Eq^qWV!S@vmrNXshC#5PMB?=5`mA`V zj7le=(G*xRDw0r?7&Tb)3z@iy73^<{9ZVg~#*RDcsivFxPt*S8P&-Dg9wA8!NOBK~ zi)$qzEhPK5lGKrhB+ck&FLSn)?l*;_AEyomckCQcfk0Jba?b9U1p@RXQwN*u#jES6 zRLJa*DZuszF{+t&FqtDkt12w_Wc13R7`-pLOUW=p28}O&;L!fJ+mMuu9xw%z{48nk zM#ipBmInP@weX%Z=|B*Y420e18J(0B!B?fGNzdRY{+u*yg89x=2>R?;KyrLv#!Slh zfKvkzO6o?oe)*Uu!yOSywaE@)TJFpcC7Ub~#)DfD7>1K?fL;0dPy0zlt*_u%Iv@~2 zejy>>uYvl`PN0V4g(iUiYN!t6O?Ebi`>Psw%$o+bx#QnLG6elCp3r=foUUt6=Q0Fp zZr;HJUXDH(=OH2?>3Q0;u#Jn)w3%J&(s?-uRs>ute-@5C_4gFMY-Eb#A81`^NA>R( z?|u5cOak@-+-mv_c&<{u*5+BIEZqNB|!s^N+8uw@iG^=elY7@JB(b#!*{GE_yD}vC2z#R}CDX)AcPxIYugON-OFo#bsdZ4wq5nmr zdD!PByGv2cDN+Y|rB+bhq*S+q2r=nP{4vXdF2jZ&^v4mpwz zNK5$S^)$?m4~q}&1}n<=<+_hX*to(tGDbYhvep%88|eZHr^IYGgTDfHDvR+1rZQYI zOu{m>JC$DeYRGbWEC%jl^bW68ig0)CZKKEO5S8y2>W{LVwE7k_ISqEWlP?t3eWBa2 zto}0SrS8U-bj$chj>9ZG#-3XE=c^;)_O^8aRI7$f4j*Bwpj#t!NR zSt=!qVt@2)6K$Jb6dUZ%tPjEb5P=GJVJ`ga&A_!%&SYzmavMI52pnbZzjqw&{+HC` zkfrK>2t!KK+^G`bZq;@zi*q9%n!##1oQIiOYqEyf@fSahasfL>DO;ePl#Ns{d4j$S zG{NOPI4Vp6TSZCZv(Ji|BEKRH<5EpTSR5R=pD|U(hLO`ZnMHj)|Cm<7TQKL`Q-2VT z4ABwcJ-$1>s4lMzQlApL^Zrqh{szJ(veF}?mYfjtZ9 zHt#S$tby{jS_l1Su$l-h8h9{T_7v6*Q>~GIV0wBd=Q)ptf4MQHMA7nbJ$UiRSGI`y7rPuKbU7p&OcO$TH2$!_9e;Y}^mB~<;on~HI2&xxd2LJ?(|KuvC@ zge2gB@NszaM{flPbW$o5hQcBYzyQZLqNab%F?EcJ)=@E!O6fvOjfIvS{UP|B=5@a= z%}Zda?CZDd(I);a({)?At&}>Iq#*dA&Ms=?W0JxCROJO3TQ zDJ1NR;oP4#PY&s(K+#!nv0*#^*B`1+nhdQUKhZ&TV^7lf7Es2nS;M4Xl|pDGJJ9U< z+xDbJ$}jZe_D2oxw~!%ANISX!o~c*{_`q6r_=GV;xU=E0AeZ1tL@jXntb9Zi9HC0? ze~m`VD_8vZPR<1(T-EBn6Tz!F- zA-VN0x_LEBLoi!`^F8-1|6N-xFNeUyNiPkZI?>e%u8O(5@JW4cS_7J5(6-Ygy3@(8 za(sq-DsK1t?&+&TRiglfc0C08y=j(GW5^9i1{fIK-@R5GgkRCWFH^Cv6(kzNSb1 z^8NxZ-gDYz0DUl&rXI>H)Rse~t;SDh6}<ZiqFpR`hge9+MorHu!E?-DDCIUFXk<^IzR6@2^EHY%FdW|OvF=upyUrg@G$U%*&mI(^w8(hp|M z!F5qifxhgGQ2Uhcy^Sv<>Nxj!@jSStr|h$4LGJOL0Dr8ZM?B;M!^rp|y33bq|6{y} zTNsvw)7C1`lMY6NNR3Q4er1Ft!~PcnPRBlWJ>VU*Tv~iSXkBTIHj@A+@J+9ga`-Z1 zR4n(PSTDpyEz$O$H=B)8h5A>;I zZVGMfZ&pNBevbe5jehP1e-UIudIP$^M>amsJJg#mL?198_FF`8ol2}4-TJa4-lNZ5 zj2@vAB2CW9Hf{lFUGX9u`sw$KI{E+|yTy2~oTI?q+$@6jw-v>kV#INBY|@cl<6DZO zkn*Lqte?D=l9>Ujw1-tCmZz>fXfywXfnW$H!d}qrAOrmDVqE%mccPEgo6{kk37=A$ ztYJV@093yp4|(rGAaB}=<8=xBD`G^AziBCZK}I^T7}|rpqZ#Q*5&G>L$h2(xpZdy6 z_sWPGzK+Jxbw0Nf;H&*Vm@OEH6Q%BNuSR*@4L>XBxiAG*S4n3_RFuDEdCQh7)wFeb zg7pC41}=Eu63s@l-p?79Nnd@BpU&XZb)6bbkFNzqvJ}(ITdugs*NBBGB3$mPubXW= zBjqe_pwM@|@h6l)@H&Y@b#$t<4z)@mabT5s3Uf@W$F3F{ABWX7xlH^=v{NZ81jGX) z%-j`WK~Y4AF+@*T_CY?x)|nIGz%6y+2I}bi1=3-9Z-c$jmKbVKK^A?Em>zkYgK7JE z2u~!jqm240mM!swHQhiv?EvTd>CYUMh+bN(j5l5+aW`HkEJ`nby^I(~2#i z$CwL=7CY)3dIiIC$0nZn2KgQ_{R@o8$pxFUBc}6%S&$8t?D!1+liJlBn4y)riAvvW zGQCow2@=l5ukStv&Hkd~ND4a10kQ#>Ev2`I#P5?9r{;b*J;V$1aB92tioiE#1DvSmNIZDJo339Fwmr5(fSf6MF0lNThp%+o$lp%tgLxA=Bh z$C79cizjtdQD$>d=5hAmy~DXBRmySVqGLPtKx*sfra|&FJz^pti5;f2ik691$4ZO= zx3afxhG$!5k;>hre11njxT52Xpfr!^hA;&QNVw5LXt_)UFOM$q&EtL7hRJqHbbIH!*Q155NT=~4i$i3x=t&v0tl}mWJ6)H?ubPp~ zA$bpsfaf4rR!W+(yp5cdjaDRb{O(F|l;*iq+%zdWM&L}g96VPTWAWrDX^dR1ud56l zP_w1w(B{gJ9!{sYLFX2nyb!<`S*ZMS zO^S4}aVJDcNM6pU5jLwV$sz{1dCsbIw|~?1+P9Djqfn#D3G-ZxC6VJH*nkeZUf+X z$ztIjOXcKY2Iy!ll2@d+Nm@ums<~1>?Nbmgd5OdKhsU&$yQCX}{oOv?`D4A|IWWnXGIr2F{h=64* zD;*UDS-+%s_;c|a6nUr>SiS{G1)ye~`mpwxLuszFSDS3TZC%Ze%zw&H>F4 zAMC{Znx?XnlVmUF;Hv;rG%oMObNDiyAwDM)E>_b71ux8#xH4+OqWk8K9EdsWT1HO0UoQ~y?S!^#O zCNcR-J1tNBt063RGZYl}S+u(Q^AiHN?_Q5IWgRM3VdHU*E|N8ctxC3gNhJ^Lx;X@& z*`#AH$HHWtbwyqkrCuH8382vME9=4esknVtpyVFwiJMTyKQGEKF zoqf7;75zVoW@*zLcx61q7P;R1zoHM{eT&F+9VOt>=fIeW5uom z>MBRZfgU`%5!P|^%?f7D7X(&odxBetXYG%CWKFwB(`pRph9ngI2cadx1A$0y?4Ybc zm3tlUbPm)EY$bA_z79v%!aX*Q9)X9*o7ibg&c3=IJ5c|gzAoUTi zPkj_b^U_`WL{Poce8kE6sjB{P6M4*pidCC($fdsF)f5m$z8Yy>Z35DkLO0u1%MP1} zj|NM#t{u54(vZes6jCPNTs)my*tZ(67P7mFGGF45s)K&RBg?K*;GE3*_tylIWncRO zK$E(e5w=M<1Mqgq0G1X3W_$1fy*jpV960%>3VT|^Eu z`Xuq7zR$#Ak}2dc4QW?s#wXb@s4PfC5Oj*cnV27q8EC=CEN54fcepLB4u z=2y@ftz)$)3eRvlb{X%(9x100V?9FFwI1s0lZ*7qm%Lfe=LcDxF3mG&1G0G8r4}uJ z29EXhIK-RQ99zs;f z=S{<$(}mj$*l9+K1`9Z6|BNl~K+bTFltJ@LlZ{<1(luFw7fHoUH<&OF4F!bCumr7f z!rPNCwhO=F&39d$iS7?5I-Yulh%`oYzAR&yLq>g|&ggh3D!^I7;wJ>7Saf^pald1Lv zYHn8y->z;Y&__0CtlE;h))(co+mIWP11XZoMZ&`rw2hE31mtAX9*LC_f|+qYJ+DgXoQRHqW0zo_RV-dIs`L zQLsO_kGraLMC|w}QZ?jYgFJJ~6k>cPod((Mw`-C}X@&7X1Gl5yog%Y%L*a(F90_^H zX-5mgm^_}boEg$2(}~{qOAn-+t7sz8cxXIupLEoZ^JTU|i%2sT@C^tQP;S8@PC1xy zn|!eyrrJ%=Gr)0<#duey>P57-;BbO)JFFg&e5)`X=STp-gR}3c#@zyRg)r5_?}OP% zM((RVe3Nw;%ueU%Cgll)`rta=gW;d0IpJ`_(oB43X9x zsfof|cSf=}ERM*-vz7jts)WqVq*c}bY`lZCp4VGSwXrAYaLFo)H+(Ql*$xj0V~wY$ z0+%VoZSD`zc+N06FBjj@3O%+Eq8mzixrm;h9o&IBFLJiH1gjZvn5bbk*T^P9;C-*_ z{VQ9)CN|Y?Zs4K9hVIY?Efl=Y20&2z%vl8rq?fP6`m8%O^;o2S#r zJL4akO#IUxf!!os?5VmMtdTXHVvm6+hO}f`=uQ&FQ`#B;pJKP6S^j|032`mR(1_9% z0ay^>YW@mUTfZpDMRq{8pIraO5Jmj$=TK!AL982LyIMzF0MI_1$o1Dg8;%>@i~?Qz zv;Io0hPDe@|2qY~yf*}`u0%|w`%x3!3wY1;_Py@(h30pdp~kt~=Jf1i79(K?Fugr- zjNxudA7VPRjLw$k`vQ#cRl=9!H#&CX4?L+9;Arll|lEV3=y&!7q;ztDx8xDY&oM4fY^aJ_4?M@LYcLd;wni z0B&y?bWD}Xbpnk*hIw^+c6+vYf=kF6X=jt@u1te_Fwv3ib5E}7A*UY<^h`Q~Atx}G z)|_W{r9Gk>rItl|1GcW=rBf9+Xi0sjG=g;&U3i7k>`$c#B_(1uIZZxinewvF0p*}IA49wIr6vaD%f%c&vy%+i{YqCA1!KMc z*ws&w%H4l3k)HN?D)mmurowv>$WZ~@B7YH7wg1lBDCy}&fYeMcCzBqMU>UhHa}yKn zA^Yn3E2ahGl3F$ z*?q+L9tf70I8WHr&Ib?49gMm9F>5jjdr5TdW1414KFOSpnv3?y1)qW|A!h^8Ib6`s zcFmOa&1aPnWNH)y7fR)MpER_junCw+^0f35k^j%XNd^@*^}l|oM6koIj!6O|Ko5@! z;lRcRQm3xK&W1|dC=Bt_u9HkOsi39gRbQ3%tHAmhI9dc1h*dfb@}Kb&XM{+C8kcV- z>P4hYU0eb#aWV@XA=0{Yp!{^u^dLAC@AXn9c6d4*JoQJyzu;gG}7;XRrQ6{?kd5lFY zl-s?N8C(r_-Ir$3CO_rK;gbTB#m(K!r4h>9Z6ykr4A9QWMg%%FmquYl+e$438W)!) zh7x_)>+Y_t;wTWqR$}HCcGfu^cQiE@o)-aFx>=h@C_$ilPeKVMmWcC_dSG+~ zbUEEC>oZ2->?!Y|9Q67R$>JB8lZESZmq$iO4u-Pd1U$%|{18>P-$Ltu6{XaK?bNFB zn9Jf+(@~t+Lb78#~Dq)~wlS;1PE+@8sFw2$> zV7CunxYrLuArO{Bqsr+sri{%|5Z)^wrbh$l!q*>?HI`0uhvtW+eLYo3xoWCghQMtg zy_ZaUlB4|2^~m*J>YR3q0mfWnXl{BZj#d3;qps>;K2smj^U)=Wo-cnqRG&u8KE|yKc2x+EQ1k7i6UTEVZc7wTdUHvK0}P zT13udR92~YWUX8AKt{9@FGvvtMIdrUYb9uqfG7ci1_($(4kpRW_q`2GTb}P?_m$jh%_p6;iSiTB|U8-R!*VLKpDB;|2D1A zEA(_OxMmkn*C6sorfB_?{tdAVXR0NvF5KkM1Q@PO-jKgxp8ON(b6F-eJkD%ur_xDY zO{R`Qm%noRB?@j-!43FkhtZZ_5Z*SXs`3Z3`AW|jfZ_z`JiE44M2_;Q3jGwQK_at_ z-)+*;`%(;bVNF`2ypF#gGcG|JRjmqgG1`g%0g$``dN=>VqYO_azO}yA$sZS#9y%Y} z1d=9nsu``sjVt-78Gk9Ah*dyc2FuRdSO%V=YrZKC)4|C#?yONd865{c zZL!XEaTV*Ck466xUXsA*%+ui(rJlU%Wv1WJIM)$7l*=Zj0OH9{HUkoI4%|NKGyp@&I=v%2;|@mQG=zZS=@3Z2A^7yaOew7tvEI@Q|*m$GBmWXv(n z{s7x4fb=k<7hmBK=$Gr%H0UPN+8!BNgq5r$~Bu!YDZwB;z)G4DVo z*FUcChf6)TB>HZq`A$UT~)cin>|i0Ox4B zvR|A3;&$8cu8DvGAIv_oVvdfSZ-E*QD#|iXG~6Hg{FPg3vXh~JF5!sYT$Q9^M3=Bu zrCx1Ip~_VzcnD_1CAVM|R3NyO%&Z8bKRhA?c*ciyrvAZq;+?R> z-@|h5T8)v0lXclK=Oe|t)ayDQuM2~!@E~Fg^4Y^!lc%C>2XI*zW*Pq27X@TwfO1~+ z03tK-+}Tw^*b2>j!4#v4dfNhWd9>B8=?WreBDOnpt%jZg8)O}Y<(ug5vC(SZPA@(Y zk^_>T_jT11r9b%jLbz_+8G0Jto`B7B8IviD!gERUw@a|JG`X%Fn`_N%VZ`KhX!l>? z_=OmPdLo=78X7wiQmXmM4opVA?=?ZqC-<2FPbie6Ren!861%G*u;uHX#WEIazWo{V z%PwY}#u9~ws1hWc7zq!}`5zL_Bf6GaO-ZfNTtY{euiZT3FoqkU$9)fbtDlUt1lkgT zJk#NPP~O_b{yV$88}DhIn>0N^FmETyB>Km<94`w~=RIr`*Q@)~3+3{c3(x97ovYM4 zhHC=e#3Vnry`DhZFz69o1jlV*f6;xnWcCGZRK^MHdupVP8x7=i6_IJ|_8G)E=i8P> zT`twyXG7$(emR>e<`S~s=SDy-a8Kn)t*8%qvP;m|3nbw~_JOys!RzrkF5|&7g?n8X zUeE2Xbk|`EfkO{4E*}NbWR~+rtD5 zppZ|tjog<9guQ&SWyCO7@ei49OdYRxzmz>pd3B7}-c5NO&Dn+u1HtLtyF zP(Y3jLIivK|IB=yA{Gj?vftGu-L{N84{y08Bm->zq0_t#CJZ+*aA3e;4VvhTBzzDH z&kp=CwbL8auxkj@{AFWaI9{La$Ft(p*D!*qxyLMD%a-q+Jd~Ma>wu@R#$;^Am`juY z!+((Y|M$NkEd6yqeBcG%{9MU)fgwbhn}~#{nA+%*(4>_wm;~1zBn@x^lU$fv1VppP z1p+uY;`%hMsTCbmPrg#(3y}PK29mlCOtn0eofHvGryosJl3zl5!wWHwsxy-cv?loi z%M8yZpuQWU?bf%A2rN7}L#dH!Od#&jBf6ovw)vicGP~X(=C^n|rck%|~@;#pZK9Z zx+j}Jmbs+947tHvfFONw58+y=!}LkBp#XL7QaDEJ9>)~A6d(4P3asyKWF@__W8*v! z`Ucc$Jg;F&Yf7yqZ2j(BXrt95f$Lk=JnZE)-55?MLrMxzL>^B=j=wJO7hPa(xOpR8 z%LyacRr#4ezxp@<)H{E3VT~)zlY5~hy9R^_!1($*C36wkiVa`9)+mbI)x4aH(n9iR z^rn263^&8%-PH|%NseByppOb7kxGRLG77M@BaB$D{NXyysr4@elQHFf==l8;JndJ6 z;w-y(3p-$otxp&SHC4xSixtu@dm2t#550~=l(98``u5VB1vl`E+59`Ox{q3eK`CTa z2%b{dNNd9uTUhrz%uXdHSoN~4^0r`*cs3R4jytR#b#XiHQ#>eE?7MXaVs{QVSN1j& zCpiZjA5OpTz|g+YkPMhE@r#vz^RS!3RBEf8ZQ^)cyTBRPba+=YncW1vq}j}#-J z;YYidf~6S$y|@Y(%rrKq(Fx(w=OVaZywLWeuoKc%M^@NV^>cQvldqP9o61_8s0GQ9 zUBU1yOmH@LLsf>9%59T_2{GC?$}}5J&K&Zr3ht(=r+p+b}V92&0R zVdWd0UnHUM`Gmx&BP(u#*isk3j2I}U_A6U?4DA|`&4g!KJ|;&zvXr7PM;L0uE%I8> zikQnw-E-+$)6h%`Z}I{Sf|r#L>akQl|&_hGssHoZLcB$~8VasD?IxP@P{!BTMJOWpin++~Z>Xp-4D#$pn5J zzKNC`C2dvhQM7F|xzpaB!cOY@c$fw8wz}WJh86Q$<}=YfJOUHKK~%qTdkkmETIAU8 zQ4{Ag-g;Y-fR*);fJ9g=ZstM{RY$yGRZjCYZ^5BA{jWGoD)0kypeP#G!3;YC3HnEq ze3Xjn+`!A7JmzePCU*Oohqt|QLs3(5TULrueuti7V!~uUefDXhGb05qdBbj<8G*o= zv0=7oFntaN4pu}Y7ZzG|eJ>QFnfYMCJL{H77YLO&T46(sQkZ4MS~aM~p;-tx#j(Yz zJMRApzO?j=LEltxx`8f-aZap!Q6_;^dJesq6_FqdBvp&Q!#?yTq(+P!>u$Sbe0CI< zN#DaN^OmU5>kbUBdry3|Tbc|T`D%XZX(f4dqBP}|+so;l8j>ze=3l-c_udc-z1DBWanT2aZ&Se(o_1Dt?xcp{C^7ewA5 z{vDR7lM)NDJd(M1>1jz=rRpZ>&vQqpgf4XBh_F^A`Tp9JO8yVXdm}SV$(6};z-gQ; zcZ%m`cWb`LCbon98G3zUeXp>0H@ImOr#+QKL#4eCZ8^OgeVgQ8N&+$N53@|IxML{x z+X}U{D_ZMyQeFzOE*)d85 z96_kW=^<2PJ=@yc7JBlgwvcXeA96MLcF;>mg254EdeSnrl5(G=km+C~iO$ujU^y$t zsa(H683;Fh+UkALP|7(PgrR1P`13Oyv|D3*hx37*6g$7M_NpBrjcES#1F!+kpl%9y zoenU6<=e8N3G8@RUvS*x3s^vSE4ZZ)(rM{KCh-AN%d?j>39dLc*FR zu!ZF`+1#Lc$OWqkCI4+I{aNu794Vt8XcT`}&#z{2_eze7Sk6AUg;vsX(7$*LuFz9I zaOiRRtLSU^N{AxMBTt2KWjPQ8P~C&UZ4f ?${yqlVr5OLmFx^^O0k8d5w=IW|) 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�~oe~84KAH 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%0Af`XxG6;!KpNkkl`lox9E*+0yB7 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 `O*g;axRvv~%9 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 literal 0 HcmV?d00001