commit 17fb2065e2ab1a24d81fe683ac082cf4216f4b70 Author: rjindael Date: Sat Oct 22 16:41:36 2022 -0700 Initial commit diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..913af3b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,17 @@ +# Artifacts +vendor/ +storage/ +app/bootstrap/cache/* + +# Developer utilities +.git* +.env* +.editorconfig +Dockerfile +docker-compose.yml +docker/Dockerfile +docker/supervisord.conf +phpstan.neon +README.md + +!.env.example diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1671c9b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[docker-compose.yml] +indent_size = 4 diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..83287ab --- /dev/null +++ b/.env.example @@ -0,0 +1,91 @@ +APP_NAME=Tadah +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://tadah.loc +APP_TIMEZONE=UTC + +ROBLOX_PRIVATE_KEY_PASSPHRASE= +ARBITER_PRIVATE_KEY_PASSPHRASE= + +HORIZON_PATH=admin/horizon +HORIZON_ENABLED=true + +TELESCOPE_PATH=admin/telescope +TELESCOPE_DRIVER=database +TELESCOPE_ENABLED=true + +SAIL_XDEBUG_MODE=develop,debug + +EMAIL_VERIFICATION=true +REQUIRE_INVITE_KEYS=false +USERS_CREATE_INVITE_KEYS=true +USERS_DISCORD_REQUIRED=true + +LOG_CHANNEL=stack +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=pgsql +DB_HOST=pgsql +DB_PORT=5432 +DB_DATABASE=tadah +DB_USERNAME=sail +DB_PASSWORD=password + +BROADCAST_DRIVER=pusher +CACHE_DRIVER=redis +FILESYSTEM_DISK=local +QUEUE_CONNECTION=redis +SESSION_DRIVER=database +SESSION_LIFETIME=120 + +MEMCACHED_HOST=memcached + +REDIS_HOST=redis +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailhog +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="tadah@tadah.loc" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +PUSHER_APP_ID=app-id +PUSHER_APP_KEY=app-key +PUSHER_APP_SECRET=app-key +PUSHER_HOST=soketi +PUSHER_CLIENT_HOST="tadah.loc" +PUSHER_PORT=6001 +PUSHER_SCHEME="http" + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_CLIENT_HOST="${PUSHER_CLIENT_HOST}" +MIX_PUSHER_PORT="${PUSHER_PORT}" +MIX_PUSHER_SCHEME="${PUSHER_SCHEME}" + +SCOUT_DRIVER=meilisearch +MEILISEARCH_HOST=http://meilisearch:7700 +MEILISEARCH_KEY= + +CIPHERSWEET_KEY= + +# https://developers.google.com/recaptcha/docs/faq#id-like-to-run-automated-tests-with-recaptcha.-what-should-i-do +RECAPTCHA_SITE_KEY=6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI +RECAPTCHA_SECRET_KEY=6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe + +OCTANE_SERVER=swoole + +DISCORD_CLIENT_ID= +DISCORD_CLIENT_SECRET= +DISCORD_REDIRECT_URI=http://tadah.loc/my/discord/callback diff --git a/.env.testing b/.env.testing new file mode 100644 index 0000000..dc44246 --- /dev/null +++ b/.env.testing @@ -0,0 +1,91 @@ +APP_NAME=Tadah +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://tadah.loc +APP_TIMEZONE=UTC + +ROBLOX_PRIVATE_KEY_PASSPHRASE= +ARBITER_PRIVATE_KEY_PASSPHRASE= + +HORIZON_PATH=admin/horizon +HORIZON_ENABLED=false + +TELESCOPE_PATH=admin/telescope +TELESCOPE_DRIVER=database +TELESCOPE_ENABLED=false + +SAIL_XDEBUG_MODE=develop,debug + +EMAIL_VERIFICATION=true +REQUIRE_INVITE_KEYS=false +USERS_CREATE_INVITE_KEYS=true +USERS_DISCORD_REQUIRED=true + +LOG_CHANNEL=stack +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=pgsql +DB_HOST=pgsql +DB_PORT=5432 +DB_DATABASE=tadah +DB_USERNAME=sail +DB_PASSWORD=password + +BROADCAST_DRIVER=pusher +CACHE_DRIVER=redis +FILESYSTEM_DISK=local +QUEUE_CONNECTION=redis +SESSION_DRIVER=database +SESSION_LIFETIME=120 + +MEMCACHED_HOST=memcached + +REDIS_HOST=redis +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailhog +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="tadah@tadah.loc" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +PUSHER_APP_ID=app-id +PUSHER_APP_KEY=app-key +PUSHER_APP_SECRET=app-key +PUSHER_HOST=soketi +PUSHER_CLIENT_HOST="tadah.loc" +PUSHER_PORT=6001 +PUSHER_SCHEME="http" + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_CLIENT_HOST="${PUSHER_CLIENT_HOST}" +MIX_PUSHER_PORT="${PUSHER_PORT}" +MIX_PUSHER_SCHEME="${PUSHER_SCHEME}" + +SCOUT_DRIVER=meilisearch +MEILISEARCH_HOST=http://meilisearch:7700 +MEILISEARCH_KEY= + +CIPHERSWEET_KEY= + +# https://developers.google.com/recaptcha/docs/faq#id-like-to-run-automated-tests-with-recaptcha.-what-should-i-do +RECAPTCHA_SITE_KEY=6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI +RECAPTCHA_SECRET_KEY=6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe + +OCTANE_SERVER=swoole + +DISCORD_CLIENT_ID= +DISCORD_CLIENT_SECRET= +DISCORD_REDIRECT_URI=http://tadah.loc/my/discord/callback diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..510d996 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,10 @@ +* text=auto + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..168501f --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +/node_modules +/public/hot +/public/storage +/public/css/app.css +/public/js/app.js +/public/js/app.js.LICENSE.txt +/public/mix-manifest.json +/public/vendor +/storage/*.key +/storage/framework/disposable_domains.json +/vendor +.env +.env.backup +.phpunit.result.cache +docker-compose.override.yml +Homestead.json +Homestead.yaml +npm-debug.log +yarn-error.log +/.idea +/.vscode +_ide_helper* diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..6bc2eaf --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,13 @@ +default: + image: php:8.1-alpine + +before_script: + - apk add -q --no-progress libpng-dev + - docker-php-ext-install gd > /dev/null + - curl -s -S https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer + - cp .env.testing .env + - composer i -q -n --no-ansi --no-progress + +static analysis: + script: + - php -d memory_limit=512M vendor/bin/phpstan analyse -c phpstan.neon 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/README.md b/README.md new file mode 100644 index 0000000..e5d8b4e --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# Tadah +The Tadah Website + +## CI/CD +Tadah.Web is available on the Tadah CI. TeamCity builds the Docker image and uploads it to the Tadah internal Docker image registry (CI), and then tells the server to pull the newest image (CD). +- [production](https://ci.tadah.sipr/buildConfiguration/Tadah_Web_Production) (on https://tadah.rocks/) +- [development](https://ci.tadah.sipr/buildConfiguration/Tadah_Web_Development) (on https://tadahlabs.rocks/) + +## Notes +- Deploys are run on each push to `dev`. They are pushed to https://tadahlabs.rocks. Upon proper assessment, these updates can manually be pushed to production on https://tadah.rocks. The dev website is barred off and should only be accessible to developers. A mock database will be run on https://tadahlabs.rocks - it shall not be linked to the production database. +- Do not force-push build artifacts, such as CSS or JavaScript assets generated from Laravel Mix. Laravel Mix gets run during the deploy process. Force pushing build artifacts will result in endless merge conflicts, and is generally bad practice. +- Please submit bugs, issues, and features to add as an issue. New features should be a separate branch and should be a pull request once ready to merge with the trunk branch. The production branch should never be touched manually. +- Please sign your commits. + +## Stack +Tadah uses a BALL stack; Bootstrap, Alpine, Livewire, Laravel. On the backend, we use PostgreSQL for our Database. Additionally, Redis is used for cache, Meilisearch is used for search, and Mailhog is used for mail environment simulation. + +Docker is used both on the developer's environment (in the form of Laravel Sail) and on the production environment (in the form a fully independent Docker container.) + +## Local Environment +If on Linux, read steps starting from step 5. If on Windows, read all steps. + +1. Download and install Ubuntu (no version -- get generic) from the Microsoft Store +2. Download and install Docker Desktop for Windows. Install WSL2 if need be. +3. Enable Docker -> Ubuntu integration by opening Docker Desktop and navigating to Settings -> Resources -> WSL Integration and toggling Ubuntu +4. Open your Ubuntu terminal. Navigate to where you are keeping the Tadah repository (i.e. if on `C:\Tadah`, you do `cd /mnt/c/Tadah`) +5. Copy `.env.example` to `.env`. Line breaks might be malformed on Windows. If so, replace all occurrences of `\r\n` in `.env` with `\n` +7. Run `composer install` if you don't have the composer dependencies installed yet. +8. Run `./vendor/bin/sail up -d` +9. Generate the application keys: + - App: `./vendor/bin/sail artisan key:generate` + - Pusher: `./vendor/bin/sail artisan pusher:secret` + - Ciphersweet: `./vendor/bin/sail artisan ciphersweet:key` + - Meilisearch: `./vendor/bin/sail artisan meilisearch:key` +10. Run `./vendor/bin/sail npm ci && npm run dev` +11. Run `./vendor/bin/sail artisan migrate` if your migrations are not up already. +12. You may now navigate to http://127.0.0.1 to view Tadah. + +You may consult the [Laravel Sail documentation](https://laravel.com/docs/8.x/sail) for running Artisan and Composer commands. + +## License +~~Copyright (c) Tadah 2021-2022. All rights reserved. Not for public use.~~ + +Licensed under the GNU Affero General Public License v3.0. A copy of it [has been included](https://github.com/tadah-foss/web/blob/trunk/LICENSE). diff --git a/app/Broadcasting/GameServerChannel.php b/app/Broadcasting/GameServerChannel.php new file mode 100644 index 0000000..83d00f9 --- /dev/null +++ b/app/Broadcasting/GameServerChannel.php @@ -0,0 +1,32 @@ +may(GameServers::roleset(), GameServers::CONNECT); + } +} diff --git a/app/Cdn/Manager.php b/app/Cdn/Manager.php new file mode 100644 index 0000000..f1e98be --- /dev/null +++ b/app/Cdn/Manager.php @@ -0,0 +1,50 @@ +generateRandomKey(); + + if ($this->option('show')) + { + $this->line('' . $key . ''); + return; + } + + if (!$this->setKeyInEnvironmentFile($key)) + { + return; + } + + $this->laravel['config']['scout.meilisearch.key'] = $key; + + $this->info('Meilisearch key set successfully.'); + } + + /** + * Generate a random key for the application. + * + * @return string + * @throws \Exception + */ + protected function generateRandomKey(): string + { + return bin2hex(random_bytes(64)); + } + + /** + * Set the Meilisearch key in the environment file. + * + * @param string $key + * @return bool + */ + protected function setKeyInEnvironmentFile($key): bool + { + if (!$this->confirmToProceed()) + { + return false; + } + + $this->writeNewEnvironmentFileWith($key); + + return true; + } + + /** + * Write a new environment file with the given Meilisearch key. + * + * @param string $key + */ + protected function writeNewEnvironmentFileWith($key) + { + /** @var mixed */ + $laravel = $this->laravel; + + $content = file_get_contents( + $laravel->environmentFilePath() + ); + + if (!Str::contains($content, 'MEILISEARCH_KEY')) + { + file_put_contents( + $laravel->environmentFilePath(), + 'MEILISEARCH_KEY=' . $key, + FILE_APPEND + ); + + return; + } + + file_put_contents( + $laravel->environmentFilePath(), + preg_replace( + $this->keyReplacementPattern(), + 'MEILISEARCH_KEY=' . $key, + $content + ) + ); + } + + /** + * Get a regex pattern that will match env MEILISEARCH_KEY with any random key. + * + * @return string + */ + protected function keyReplacementPattern() + { + $escaped = preg_quote('=' . $this->laravel['config']['scout.meilisearch.key'], '/'); + + return "/^MEILISEARCH_KEY{$escaped}/m"; + } +} diff --git a/app/Console/Commands/PusherIdGenerate.php b/app/Console/Commands/PusherIdGenerate.php new file mode 100644 index 0000000..a83bb2b --- /dev/null +++ b/app/Console/Commands/PusherIdGenerate.php @@ -0,0 +1,129 @@ +generateRandomId(); + + if ($this->option('show')) + { + $this->line('' . $id . ''); + return; + } + + if (!$this->setIdInEnvironmentFile($id)) + { + return; + } + + $this->laravel['config']['broadcasting.connections.pusher.app_id'] = $id; + + $this->info('Pusher app ID set successfully.'); + } + + /** + * Generate a random ID for the application. + * + * @return string + * @throws \Exception + */ + protected function generateRandomId(): string + { + return uuid(); + } + + /** + * Set the application ID in the environment file. + * + * @param string $id + * @return bool + */ + protected function setIdInEnvironmentFile($id): bool + { + if (!$this->confirmToProceed()) + { + return false; + } + + $this->writeNewEnvironmentFileWith($id); + + return true; + } + + /** + * Write a new environment file with the given app ID. + * + * @param string $id + */ + protected function writeNewEnvironmentFileWith($id) + { + /** @var mixed */ + $laravel = $this->laravel; + + $content = file_get_contents( + $laravel->environmentFilePath() + ); + + if (!Str::contains($content, 'PUSHER_APP_ID')) + { + file_put_contents( + $laravel->environmentFilePath(), + 'PUSHER_APP_ID=' . $id, + FILE_APPEND + ); + + return; + } + + file_put_contents( + $laravel->environmentFilePath(), + preg_replace( + $this->idReplacementPattern(), + 'PUSHER_APP_ID=' . $id, + $content + ) + ); + } + + /** + * Get a regex pattern that will match env PUSHER_APP_ID with any random app ID. + * + * @return string + */ + protected function idReplacementPattern() + { + $escaped = preg_quote('=' . $this->laravel['config']['broadcasting.connections.pusher.app_id'], '/'); + + return "/^PUSHER_APP_ID{$escaped}/m"; + } +} diff --git a/app/Console/Commands/PusherSecretGenerate.php b/app/Console/Commands/PusherSecretGenerate.php new file mode 100644 index 0000000..007fcc2 --- /dev/null +++ b/app/Console/Commands/PusherSecretGenerate.php @@ -0,0 +1,129 @@ +generateRandomSecret(); + + if ($this->option('show')) + { + $this->line('' . $secret . ''); + return; + } + + if (!$this->setSecretInEnvironmentFile($secret)) + { + return; + } + + $this->laravel['config']['broadcasting.connections.pusher.secret'] = $secret; + + $this->info('Pusher secret set successfully.'); + } + + /** + * Generate a random secret for the application. + * + * @return string + * @throws \Exception + */ + protected function generateRandomSecret(): string + { + return bin2hex(random_bytes(32)); + } + + /** + * Set the application secret in the environment file. + * + * @param string $secret + * @return bool + */ + protected function setSecretInEnvironmentFile($secret): bool + { + if (!$this->confirmToProceed()) + { + return false; + } + + $this->writeNewEnvironmentFileWith($secret); + + return true; + } + + /** + * Write a new environment file with the given secret. + * + * @param string $secret + */ + protected function writeNewEnvironmentFileWith($secret) + { + /** @var mixed */ + $laravel = $this->laravel; + + $content = file_get_contents( + $laravel->environmentFilePath() + ); + + if (!Str::contains($content, 'PUSHER_APP_SECRET')) + { + file_put_contents( + $laravel->environmentFilePath(), + 'PUSHER_APP_SECRET=' . $secret, + FILE_APPEND + ); + + return; + } + + file_put_contents( + $laravel->environmentFilePath(), + preg_replace( + $this->secretReplacementPattern(), + 'PUSHER_APP_SECRET=' . $secret, + $content + ) + ); + } + + /** + * Get a regex pattern that will match env PUSHER_APP_SECRET with any random secret. + * + * @return string + */ + protected function secretReplacementPattern(): string + { + $escaped = preg_quote('=' . $this->laravel['config']['broadcasting.connections.pusher.secret'], '/'); + + return "/^PUSHER_APP_SECRET{$escaped}/m"; + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..562fe09 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,30 @@ +command('disposable:update')->weekly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + } +} diff --git a/app/Discord/User.php b/app/Discord/User.php new file mode 100644 index 0000000..0e98682 --- /dev/null +++ b/app/Discord/User.php @@ -0,0 +1,52 @@ + sprintf('Bot: %s', env('DISCORD_BOT_TOKEN'))]) + ->get(sprintf('https://discord.com/api/v9/users/%d', $discord_id)); + + $data = json_decode($data); + + $this->id = $data->id; + $this->username = $data->username; + $this->discriminator = $data->discriminator; + $this->avatar = $data->avatar; + $this->avatarUrl = sprintf('https://cdn.discordapp.com/avatars/%d/%s', $discord_id, $data->avatar); + } +} diff --git a/app/Enums/Actions.php b/app/Enums/Actions.php new file mode 100644 index 0000000..d27eca7 --- /dev/null +++ b/app/Enums/Actions.php @@ -0,0 +1,68 @@ + 'Temporarily banned :name until :date.', + self::PermBannedUser => 'Permanently banned :name.', + self::PoisonBannedUser => 'Poison banned :name.', + self::WarnedUser => 'Warned :name.', + self::PardonedUser => 'Pardoned :name.', + self::CreatedGameServer => 'Created game server :ip.', + self::DeletedGameServer => 'Deleted game server :ip.', + self::ModifiedGameServer => 'Modified game server :ip.', + self::AddIPBan => 'Added an IP ban.', + self::RemoveIPBan => 'Removed an IP ban.', + self::SiteAlert => 'Changed the site alert.', + self::ApprovedAsset => 'Approved a :type: :name. (Asset ID: :id)', + self::DeniedAsset => 'Denied a :type: :name. (Asset ID: :id)', + self::ModeratedAsset => 'Moderated a :type: :name. (Asset ID: :id)', + self::ChangedUserPermissions => 'Changed permissions for :name.', + self::DeletedThread => 'Deleted thread :name. (Thread ID: :id)', + self::DeletedReply => 'Deleted reply on :name. (Thread ID: :id)', + self::CreatedCategory => 'Created the :name forum category.', + self::ModifiedCategory => 'Modified the :name forum category.', + self::DeletedCategory => 'Deleted the :name forum category.', + self::ToggleStickiedThread => 'Toggled sticky status for thread :name. (Thread ID: :id)', + self::EditedReply => 'Edited a reply on :name. (Thread ID: :id)', + self::EditedThread => 'Edited thread :name. (Thread ID: :id)', + self::PrunedPosts => 'Pruned all forum posts from :name.', + default => $this->name + }; + } +} diff --git a/app/Enums/ArbiterLogSeverity.php b/app/Enums/ArbiterLogSeverity.php new file mode 100644 index 0000000..dce4bf7 --- /dev/null +++ b/app/Enums/ArbiterLogSeverity.php @@ -0,0 +1,54 @@ + 'info', 'warning' => 'warn', etc.) + * + * @return string + */ + public function event(): string + { + return match($this) + { + ArbiterLogSeverity::Error => 'error', + ArbiterLogSeverity::Warning => 'warn', + ArbiterLogSeverity::Event => 'event', + ArbiterLogSeverity::Information => 'info', + ArbiterLogSeverity::Debug => 'debug', + ArbiterLogSeverity::Boot => 'boot', + }; + } + + /** + * Gets the log color. + * + * @return Color + */ + public function color(): Color + { + return match($this) + { + ArbiterLogSeverity::Error => Hex::fromString('#E74856'), + ArbiterLogSeverity::Warning => Hex::fromString('#F9F1A5'), + ArbiterLogSeverity::Event => Hex::fromString('#3B78FF'), + ArbiterLogSeverity::Information => Hex::fromString('#F2F2F2'), + ArbiterLogSeverity::Debug => Hex::fromString('#0037DA'), + ArbiterLogSeverity::Boot => Hex::fromString('#16C60C'), + }; + } +} diff --git a/app/Enums/AssetGenre.php b/app/Enums/AssetGenre.php new file mode 100644 index 0000000..ad11ff1 --- /dev/null +++ b/app/Enums/AssetGenre.php @@ -0,0 +1,40 @@ + 'Town and City', + self::SciFi => 'Sci-Fi', + self::WildWest => 'Wild West', + self::SkatePark => 'Skate Park', + default => $this->name + }; + } +} diff --git a/app/Enums/AssetModeration.php b/app/Enums/AssetModeration.php new file mode 100644 index 0000000..7eeffde --- /dev/null +++ b/app/Enums/AssetModeration.php @@ -0,0 +1,10 @@ + 'T-Shirt', + self::GroupEmblem => 'Group Emblem', + self::RightArm => 'Right Arm', + self::LeftArm => 'Left Arm', + self::LeftLeg => 'Left Leg', + self::RightLeg => 'Right Leg', + self::GamePass => 'Game Pass', + default => $this->name + }; + } + + public static function sellableTypes(): array + { + return [ + self::TShirt, + self::Audio, + self::Hat, + self::Model, + self::Shirt, + self::Pants, + self::Decal, + self::Face, + self::Gear, + self::Badge + ]; + } + + public function isSellable(): bool + { + return in_array($this, self::sellableTypes()); + } + + public static function freeTypes(): array + { + return [ + self::Audio, + self::Model, + self::Decal, + ]; + } + + public function isFree(): bool + { + return in_array($this, self::freeTypes()); + } + + /** + * Gets the asset types that can be worn by a user. + * + * @return array + */ + public static function wearableTypes(): array + { + return [ + self::Head, + self::Face, + self::Gear, + self::Hat, + self::TShirt, + self::Shirt, + self::Pants + ]; + } + + /** + * Checks if the asset type is a wearable type. + * + * @return bool + */ + public function isWearable(): bool + { + return in_array($this, self::wearableTypes()); + } + + /** + * Gets the asset types that are shown on the inventory sections. + * + * @return array + */ + public static function inventoryTypes(): array + { + return [ + self::Head, + self::Face, + self::Gear, + self::Hat, + self::TShirt, + self::Shirt, + self::Pants, + self::Decal, + self::Model, + self::Plugin, + self::Animation, + self::Place, + self::GamePass, + self::Audio, + self::Badge, + self::LeftArm, + self::RightArm, + self::LeftLeg, + self::RightLeg, + self::Torso, + self::Package + ]; + } + + /** + * Checks if the asset type is shown on the inventory selection. + * + * @return bool + */ + public function isInventoryType(): bool + { + return in_array($this, self::inventoryTypes()); + } + + /** + * Gets the asset types that are shown on the favorites section on user profiles. + * + * @return array + */ + public static function favoriteTypes(): array + { + return [ + self::Head, + self::Face, + self::Gear, + self::Hat, + self::TShirt, + self::Shirt, + self::Pants, + self::Decal, + self::Model + ]; + } + + /** + * Checks if the asset type is shown on the favorites selection. + * + * @return bool + */ + public function isFavoriteType(): bool + { + return in_array($this, self::favoriteTypes()); + } + + /** + * Gets the Font Awesome icon for this asset type. + * + * @return string + */ + public function fontAwesomeIcon(): string + { + return match($this) { + self::Place => 'fa-image-landscape', + self::Model => 'fa-cubes', + self::Decal => 'fa-file-image', + self::Badge => 'fa-certificate', + self::GamePass => 'fa-ticket', + self::Audio => 'fa-volume-high', + self::Animation => 'fa-person-running', + self::Shirt => 'fa-shirt', + self::TShirt => 'fa-shirt-tank-top', + self::Pants => 'fa-clothes-hanger', + self::Plugin => 'fa-puzzle-piece', + }; + } + + /** + * Gets the asset types that are shown on the develop page. + * Note that not everything here is creatable through the develop page (places, models, etc). + * + * @return array + */ + public static function developTypes(): array + { + return [ + self::Place, + self::Model, + self::Decal, + self::Badge, + self::GamePass, + self::Audio, + self::Animation, + self::Shirt, + self::TShirt, + self::Pants, + self::Plugin, + ]; + } + + /** + * Checks if the asset type is shown on the develop page. + * + * @return bool + */ + public function isDevelopType(): bool + { + return in_array($this, self::developTypes()); + } + + /** + * Checks if the asset type can be uploaded through the develop page + * + * @return bool + */ + public function isDevelopCreatable(): bool + { + return match($this) + { + self::TShirt => true, + self::Decal => true, + self::Audio => true, + self::Animation => true, + default => false + }; + } + + /** + * Gets the upload validator for the asset type + * + * @return array + */ + public function rules(): array + { + return match($this) + { + self::TShirt => ['file', 'mimes:png,jpeg', 'max:8192'], + self::Decal => ['file', 'mimes:png,jpeg', 'max:8192'], + self::Audio => ['file', 'mimes:mp3,wav,wmv,midi,txt', 'max:8192'], + self::Animation => ['file', 'max:8192', new IsRobloxXml], + default => [] + }; + } +} diff --git a/app/Enums/ChatStyle.php b/app/Enums/ChatStyle.php new file mode 100644 index 0000000..0884403 --- /dev/null +++ b/app/Enums/ChatStyle.php @@ -0,0 +1,12 @@ + 'fa-rectangle-ad', + self::Games => 'fa-gamepad-modern', + }; + } +} diff --git a/app/Enums/GameServerState.php b/app/Enums/GameServerState.php new file mode 100644 index 0000000..9f23a13 --- /dev/null +++ b/app/Enums/GameServerState.php @@ -0,0 +1,26 @@ + 'Popular', + self::MostVisited => 'Most Visited', + self::MostFavorited => 'Most Favorited', + self::RecentlyUpdated => 'Recently Updated', + default => $this->name + }; + } +} diff --git a/app/Enums/SignatureType.php b/app/Enums/SignatureType.php new file mode 100644 index 0000000..df82271 --- /dev/null +++ b/app/Enums/SignatureType.php @@ -0,0 +1,79 @@ + OPENSSL_ALGO_SHA1, + SignatureType::Arbiter => OPENSSL_ALGO_SHA256 + }; + } + + /** + * Gets the key passphrase for this signature type. + * + * @return string + * @throws \Exception + */ + public function getPrivateKeyPassphrase(): string + { + $passphrase = match($this) { + SignatureType::Roblox => env('ROBLOX_PRIVATE_KEY_PASSPHRASE'), + SignatureType::Arbiter => env('ARBITER_PRIVATE_KEY_PASSPHRASE') + }; + + if (is_null($passphrase)) + { + throw new \Exception('No passphrase set for key ' . $this->name); + } + + return $passphrase; + } + + /** + * Gets the private key for this signature type. + * + * @return \OpenSSLAsymmetricKey + * @throws \Exception + */ + public function getPrivateKey(): \OpenSSLAsymmetricKey + { + $pem = match ($this) { + SignatureType::Roblox => Storage::disk('local')->get('keys/roblox.pem'), + SignatureType::Arbiter => Storage::disk('local')->get('keys/arbiter.pem') + }; + + $key = openssl_pkey_get_private($pem, $this->getPrivateKeyPassphrase()); + + if ($key === false) + { + throw new \Exception('Failed to acquire private key'); + } + + return $key; + } + + /** + * Gets the public key for this signature type. + * + * @return string + */ + public function getPublicKey(): string + { + return openssl_pkey_get_details($this->getPrivateKey())['key']; + } +} diff --git a/app/Events/GameServer/ConsoleOutput.php b/app/Events/GameServer/ConsoleOutput.php new file mode 100644 index 0000000..da2eb66 --- /dev/null +++ b/app/Events/GameServer/ConsoleOutput.php @@ -0,0 +1,61 @@ +game_server->uuid); + } + + /** + * Get the data to broadcast. + * + * @return array + */ + public function broadcastWith(): array + { + return [ + 'severity' => [ + 'event' => $this->severity->event(), + 'color' => (string) $this->severity->color()->toHex() + ], + 'timestamp' => $this->timestamp->format('n/j/Y g:i:s A'), + 'output' => $this->output, + 'blur' => $this->blur + ]; + } +} diff --git a/app/Events/GameServer/NewPlaceJob.php b/app/Events/GameServer/NewPlaceJob.php new file mode 100644 index 0000000..3084ece --- /dev/null +++ b/app/Events/GameServer/NewPlaceJob.php @@ -0,0 +1,37 @@ +game_server->uuid); + } +} diff --git a/app/Events/GameServer/NewThumbnailJob.php b/app/Events/GameServer/NewThumbnailJob.php new file mode 100644 index 0000000..8b3ac82 --- /dev/null +++ b/app/Events/GameServer/NewThumbnailJob.php @@ -0,0 +1,37 @@ +game_server->uuid); + } +} diff --git a/app/Events/GameServer/ResourceReport.php b/app/Events/GameServer/ResourceReport.php new file mode 100644 index 0000000..910416a --- /dev/null +++ b/app/Events/GameServer/ResourceReport.php @@ -0,0 +1,45 @@ +game_server->uuid); + } + + /** + * Get the data to broadcast. + * + * @return array + */ + public function broadcastWith(): array + { + return (array) $this->resources; + } +} diff --git a/app/Events/GameServer/StateChange.php b/app/Events/GameServer/StateChange.php new file mode 100644 index 0000000..5d12343 --- /dev/null +++ b/app/Events/GameServer/StateChange.php @@ -0,0 +1,50 @@ +game_server->uuid); + } + + /** + * Get the data to broadcast. + * + * @return array + */ + public function broadcastWith(): array + { + return [ + 'state' => $this->state->value, + 'utc_offset' => $this->game_server->utc_offset, + 'friendly_name' => $this->game_server->friendly_name + ]; + } +} diff --git a/app/Events/IpAddressBanModified.php b/app/Events/IpAddressBanModified.php new file mode 100644 index 0000000..a98ade9 --- /dev/null +++ b/app/Events/IpAddressBanModified.php @@ -0,0 +1,16 @@ +> + */ + protected $dontReport = [ + // + ]; + + /** + * A list of the inputs that are never flashed for validation exceptions. + * + * @var array + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + /** + * Register the exception handling callbacks for the application. + * + * @return void + */ + public function register() + { + $this->reportable(function (Throwable $e) { + // + }); + } +} diff --git a/app/GPBMetadata/Resources/Tadah.php b/app/GPBMetadata/Resources/Tadah.php new file mode 100644 index 0000000..b957c0c --- /dev/null +++ b/app/GPBMetadata/Resources/Tadah.php @@ -0,0 +1,25 @@ +internalAddGeneratedFile(hex2bin( + "0ac7060a157265736f75726365732f74616461682e70726f746f1205546164616822f6020a065369676e616c12290a056e6f6e636518012001280b321a2e676f6f676c652e70726f746f6275662e54696d657374616d70120d0a056a6f62496418022001280912230a096f7065726174696f6e18032001280e32102e54616461682e4f7065726174696f6e12250a0776657273696f6e18042001280e32142e54616461682e436c69656e7456657273696f6e12220a05706c61636518052003280b32132e54616461682e5369676e616c2e506c616365122a0a097468756d626e61696c18062003280b32172e54616461682e5369676e616c2e5468756d626e61696c1a450a05506c616365120f0a07706c616365496418012001280d120e0a06736372697074180220012809121b0a1365787069726174696f6e496e5365636f6e647318032001280d1a4f0a095468756d626e61696c121e0a047479706518012001280e32102e54616461682e417373657454797065120f0a076173736574496418022001280d12110a096163636573734b6579180320012809225f0a08526573706f6e736512230a096f7065726174696f6e18012001280e32102e54616461682e4f7065726174696f6e120f0a0773756363657373180220012808120f0a076d657373616765180320012809120c0a04646174611804200128092a99010a094f7065726174696f6e120c0a084f50454e5f4a4f421000120d0a09434c4f53455f4a4f42100112120a0e455845435554455f534352495054100212190a1552454e45575f54414d50415f4a4f425f4c45415345100312120a0e434c4f53455f414c4c5f4a4f42531004121d0a19434c4f53455f414c4c5f54414d50415f50524f4345535345531005120d0a095448554d424e41494c10062a320a0d436c69656e7456657273696f6e12080a044e4f4e451000120b0a0654414950454910db0f120a0a0554414d504110e00f2a590a09417373657454797065120c0a08434c4f5448494e47100012080a0448454144100112080a044d455348100212090a05504c414345100312080a04555345521004120c0a084845414453484f54100512070a03584d4c1006421aaa020b54616461682e50726f746fca02094170705c50726f746f620670726f746f33" + ), true); + + static::$is_initialized = true; + } +} + diff --git a/app/Helpers/Agent.php b/app/Helpers/Agent.php new file mode 100644 index 0000000..97f737a --- /dev/null +++ b/app/Helpers/Agent.php @@ -0,0 +1,33 @@ +isDesktop()) + { + return 'fa-display'; + } + + if ($this->isTablet()) + { + return 'fa-tablet'; + } + + if ($this->isPhone()) + { + return 'fa-mobile'; + } + + return 'fa-question'; + } +} diff --git a/app/Helpers/Cdn.php b/app/Helpers/Cdn.php new file mode 100644 index 0000000..6072f7d --- /dev/null +++ b/app/Helpers/Cdn.php @@ -0,0 +1,82 @@ +exists($filename)) + { + Storage::disk('content')->put($filename, $data); + } + } + + /** + * Retrieves an accessible URL to a file on the app's configured content delivery system. + * The widescreen parameter is used for the placeholder thumbnail on failure. + * + * @param string $folder + * @param string $filename + * @param bool $widescreen + * @return string + */ + public static function getUrl(string $filename, bool $widescreen = false): string + { + if (Storage::disk('content')->exists($filename)) + { + return asset(sprintf('content/%s', $filename)); + } + + if ($widescreen) + { + return asset('img/placeholder/widescreen.png'); + } + + return asset('img/placeholder/icon.png'); + } +} diff --git a/app/Helpers/IpAddressBanManager.php b/app/Helpers/IpAddressBanManager.php new file mode 100644 index 0000000..16d43a3 --- /dev/null +++ b/app/Helpers/IpAddressBanManager.php @@ -0,0 +1,35 @@ +is_active) + { + continue; + } + + $banned_ip_addresses[] = $ban->ip_address; + } + + Cache::store('octane')->put('banned_ip_addresses', $banned_ip_addresses); + } +} diff --git a/app/Helpers/PaginationTransformer.php b/app/Helpers/PaginationTransformer.php new file mode 100644 index 0000000..b7da776 --- /dev/null +++ b/app/Helpers/PaginationTransformer.php @@ -0,0 +1,47 @@ +count(); + + return self::paginator($collection->forPage($pageNumber, $showPerPage), $totalPageNumber, $showPerPage, $pageNumber, [ + 'path' => Paginator::resolveCurrentPath(), + 'pageName' => 'page', + ]); + } + + /** + * Create a new length-aware paginator instance. + * + * @param \Illuminate\Support\Collection $items + * @param int $total + * @param int $perPage + * @param int $currentPage + * @param array $options + * @return \Illuminate\Pagination\LengthAwarePaginator + */ + protected static function paginator($items, $total, $perPage, $currentPage, $options) + { + return Container::getInstance()->makeWith(LengthAwarePaginator::class, compact( + 'items', 'total', 'perPage', 'currentPage', 'options' + )); + } +} diff --git a/app/Http/Controllers/Account/DashboardController.php b/app/Http/Controllers/Account/DashboardController.php new file mode 100644 index 0000000..b708dce --- /dev/null +++ b/app/Http/Controllers/Account/DashboardController.php @@ -0,0 +1,31 @@ +has('verified') && !is_null($request->user()->email_verified_at)) + { + if ((time() - $request->user()->email_verified_at->timestamp) <= 30) + { + $status = __('Welcome to :project!', ['project' => config('app.name')]); + } + } + + $greeting = $this->greetings[mt_rand(0, count($this->greetings) - 1)]; + $username = $request->user()->username; + + return view('my.dashboard', compact('status', 'greeting', 'username')); + } +} diff --git a/app/Http/Controllers/Account/DisabledAccountController.php b/app/Http/Controllers/Account/DisabledAccountController.php new file mode 100644 index 0000000..1d56437 --- /dev/null +++ b/app/Http/Controllers/Account/DisabledAccountController.php @@ -0,0 +1,68 @@ +user(); + + if (!$user->isBanned()) + { + return redirect()->route('dashboard'); + } + + $ban = (object) [ + 'is_termination' => !$user->ban->is_warning && !$user->ban->is_poison_ban && is_null($user->ban->expiry_date), + 'is_warning' => $user->ban->is_warning, + 'is_poison_ban' => $user->ban->is_poison_ban, + 'reviewed' => $user->ban->created_at->format('m/d/Y h:i:s A (T)'), + 'offensive_item' => $user->ban->offensive_item, + 'moderator_note' => $user->ban->moderator_note, + 'is_appealable' => $user->ban->is_appealable, + ]; + + $ban->expired = false; + + if (!$ban->is_termination && !$ban->is_warning && !$ban->is_poison_ban) + { + $ban->duration = seconds2human($user->ban->expiry_date->timestamp - $user->ban->created_at->timestamp, true); + $ban->expired = $user->ban->expiry_date->isPast(); + $ban->reactivation_date = $user->ban->expiry_date->format('m/d/Y h:i:s A (T)'); + } + elseif ($ban->is_warning) + { + $ban->expired = true; + } + + return view('auth.account-disabled', compact('ban')); + } + + public function store(Request $request) + { + $user = $request->user(); + + if (!$user->isBanned()) + { + return redirect()->route('dashboard'); + } + + if ($user->ban->is_poison_ban || (!$user->ban->is_warning && !$user->ban->is_poison_ban && is_null($user->ban->expiry_date))) + { + abort(403); + } + + if (!$user->ban->is_warning && !$user->ban->expiry_date->isPast()) + { + abort(403); + } + + $user->ban->lift(); + + return redirect()->route('dashboard')->with('success', __('Welcome back! Please adhere to the :project Terms of Service this time.', ['project' => config('app.name')])); + } +} diff --git a/app/Http/Controllers/Account/DiscordController.php b/app/Http/Controllers/Account/DiscordController.php new file mode 100644 index 0000000..b06d85e --- /dev/null +++ b/app/Http/Controllers/Account/DiscordController.php @@ -0,0 +1,29 @@ +redirect(); + } + + public function callback(Request $request) + { + $request->user()->linkDiscordAccount(Socialite::driver('discord')->user()->id); + + return redirect()->route('account')->with('status', __('Successfully linked Discord account!')); + } + + public function unlink(Request $request) + { + $request->user()->unlinkDiscordAccount(); + + return redirect()->route('account')->with('status', __('Your Discord account has been unlinked.')); + } +} diff --git a/app/Http/Controllers/Account/InviteKeyController.php b/app/Http/Controllers/Account/InviteKeyController.php new file mode 100644 index 0000000..8272c25 --- /dev/null +++ b/app/Http/Controllers/Account/InviteKeyController.php @@ -0,0 +1,70 @@ +may(Users::roleset(), Users::PURCHASE_INVITE_KEY)) + { + return __('You may not purchase an invite key.'); + } + + if (!$user->hasEnoughMoney(config('tadah.user_invite_key_cost'))) + { + return __('You do not have enough :currency to purchase an invite key.', ['currency' => config('tadah.currency_name')]); + } + + if (!$user->hasLinkedDiscordAccount() && config('tadah.discord_required')) + { + return __('Please link your Discord account in order to create invite keys.'); + } + + $our_keys = InviteKey::where('creator_id', $user->id) + ->where('created_at', '>', now()->subDays(config('tadah.user_invite_key_cooldown'))->endOfDay()) + ->get(); + + if (count($our_keys) >= config('tadah.user_maximum_keys_in_window')) + { + return __("You've already made :maximum invite keys in the past :cooldown days.", ['maximum' => config('tadah.user_maximum_keys_in_window'), 'cooldown' => config('app.user_invite_key_cooldown')]); + } + + return true; + } + + public function view(Request $request) + { + $keys = InviteKey::where('creator_id', $request->user()->id) + ->orderBy('created_at', 'DESC') + ->paginate(15); + $disabled = $this->mayPurchaseKey() !== true; + + return view('my.invites', compact('keys', 'disabled')); + } + + public function purchase(Request $request) + { + $user = $request->user(); + + if (($reason = $this->mayPurchaseKey()) !== true) + { + return back()->with('error', $reason); + } + + $user->spend(config('tadah.user_invite_key_cost'), 'Bought invite key'); + + InviteKey::generate($user->id, 1); + + return back()->with('success', __('New invite key created.')); + } +} diff --git a/app/Http/Controllers/Account/SessionController.php b/app/Http/Controllers/Account/SessionController.php new file mode 100644 index 0000000..91c0a88 --- /dev/null +++ b/app/Http/Controllers/Account/SessionController.php @@ -0,0 +1,39 @@ +validate([ + 'key' => ['required', new IsValidSession($request->user())] + ]); + } + catch (ValidationException) + { + return response()->json(['success' => false]); + } + + $key = decrypt($data['key']); + if ($key == $request->session()->getId()) + { + Auth::logout(); + } + else + { + Session::getHandler()->destroy($key); + } + + return response()->json(['success' => true]); + } +} diff --git a/app/Http/Controllers/Account/SettingsController.php b/app/Http/Controllers/Account/SettingsController.php new file mode 100644 index 0000000..a6adaad --- /dev/null +++ b/app/Http/Controllers/Account/SettingsController.php @@ -0,0 +1,79 @@ +where('user_id', $request->user()->id)->get()->each(function ($session) use ($request, &$sessions, &$current_session) { + if ($session->id == $request->session()->getId()) + { + $current_session = (object) [ + 'agent' => agent($session->user_agent), + 'location' => geolocate($session->ip_address), + 'last_ping' => time(), + 'ip' => $session->ip_address, + ]; + + return; + } + + $sessions[] = (object) [ + 'key' => encrypt($session->id), + 'agent' => agent($session->user_agent), + 'location' => geolocate($session->ip_address), + 'last_ping' => $session->last_activity, + 'ip' => $session->ip_address, + ]; + }); + + return view('my.account', [ + 'current_session' => $current_session, + 'sessions' => $sessions, + 'discord_user' => $request->user()->discordAccount(), + ]); + } + + public function updateEmail(Request $request) + { + if ($request->isMethod('post')) + { + $user = $request->user(); + + $data = $request->validate([ + 'email' => $this->emailRules(), + 'current_password' => ['required', new IsCurrentPassword($user)], + ]); + + $user->updateEmail($data['email'], $request->ip(), $request->userAgent()); + + return redirect()->route('account')->with('status', __('Your E-Mail address has been succesfully updated!')); + } + + return view('auth.update-email'); + } + + public function heartbeat(Request $request) + { + $user = $request->user(); + + $activity = $user->activity; + $activity['website'] = time(); + + $user->update(compact('activity')); + + return response()->json(['success' => true]); + } +} diff --git a/app/Http/Controllers/Admin/ActionLogController.php b/app/Http/Controllers/Admin/ActionLogController.php new file mode 100644 index 0000000..d708cfd --- /dev/null +++ b/app/Http/Controllers/Admin/ActionLogController.php @@ -0,0 +1,27 @@ +middleware(function ($request, $next) + { + if (!$request->user()->isSuperAdmin()) + { + return abort(404); + } + + return $next($request); + }); + } + + public function view() + { + return view('admin.action-log'); + } +} diff --git a/app/Http/Controllers/Admin/AlertController.php b/app/Http/Controllers/Admin/AlertController.php new file mode 100644 index 0000000..a5b0a31 --- /dev/null +++ b/app/Http/Controllers/Admin/AlertController.php @@ -0,0 +1,26 @@ +middleware(function ($request, $next) + { + if (!$request->user()->isSuperAdmin()) + { + return abort(404); + } + + return $next($request); + }); + } + + public function __invoke() + { + return view('admin.alert'); + } +} diff --git a/app/Http/Controllers/Admin/BanController.php b/app/Http/Controllers/Admin/BanController.php new file mode 100644 index 0000000..e981145 --- /dev/null +++ b/app/Http/Controllers/Admin/BanController.php @@ -0,0 +1,27 @@ +middleware(function ($request, $next) + { + if (!$request->user()->may(Users::roleset(), Users::MODERATION_GENERAL_BAN)) + { + return abort(404); + } + + return $next($request); + }); + } + + public function __invoke() + { + return view('admin.user.ban'); + } +} diff --git a/app/Http/Controllers/Admin/BanInformationController.php b/app/Http/Controllers/Admin/BanInformationController.php new file mode 100644 index 0000000..c8c6f67 --- /dev/null +++ b/app/Http/Controllers/Admin/BanInformationController.php @@ -0,0 +1,41 @@ +middleware(function ($request, $next) + { + if (!$request->user()->may(Users::roleset(), Users::MODERATION_VIEW_BAN_LIST)) + { + return abort(404); + } + + return $next($request); + }); + } + + public function __invoke(Request $request) + { + $ban = Ban::findOrFail($request->input('id')); + + return response()->json([ + 'success' => true, + 'ban' => [ + 'pardon_internal_reason' => $ban->pardon_internal_reason, + 'offensive_item' => $ban->offensive_item, + 'internal_reason' => $ban->internal_reason, + 'moderator_note' => $ban->moderator_note, + 'is_appealable' => $ban->is_appealable, + 'has_been_pardoned' => $ban->has_been_pardoned + ] + ]); + } +} diff --git a/app/Http/Controllers/Admin/GameServerController.php b/app/Http/Controllers/Admin/GameServerController.php new file mode 100644 index 0000000..983c896 --- /dev/null +++ b/app/Http/Controllers/Admin/GameServerController.php @@ -0,0 +1,123 @@ +user()->may(GameServers::roleset(), GameServers::VIEW)) + { + return abort(404); + } + + return view('admin.game-server.all'); + } + + public function store(Request $request) + { + if (!$request->user()->may(GameServers::roleset(), GameServers::CREATE)) + { + return abort(404); + } + + return view('admin.game-server.create'); + } + + public function view(Request $request, $id) + { + if (!$request->user()->may(GameServers::roleset(), GameServers::VIEW)) + { + return abort(404); + } + + $game_server = GameServer::where('uuid', $id)->firstOrFail(); + $data = [ + 'isSetUp' => $game_server->is_set_up, + 'uuid' => $game_server->uuid, + 'state' => $game_server->state()->value + ]; + + return view('admin.game-server.view', compact('game_server', 'data')); + } + + public function manage(Request $request, $id) + { + if (!$request->user()->may(GameServers::roleset(), GameServers::MANAGE)) + { + return abort(404); + } + + $game_server = GameServer::where('uuid', $id)->firstOrFail(); + + return view('admin.game-server.manage', compact('game_server')); + } + + public function state(Request $request) + { + if (!$request->has('uuid')) + { + return abort(404); + } + + $game_server = GameServer::where('uuid', $request->input('uuid'))->firstOrFail(); + + return response()->json(['state' => $game_server->state()->value]); + } + + public function logs(Request $request, $uuid) + { + if (!$request->user()->may(GameServers::roleset(), GameServers::CONNECT) || !$request->has('key')) + { + return abort(404); + } + + $game_server = GameServer::where('uuid', $uuid)->firstOrFail(); + $output = []; + + if (!GameServer::$logKeys[$request->input('key')]) + { + return response()->json(['success' => false]); + } + + if ($request->input('key') == 'console') + { + $trunk = $game_server->retrieveCompleteLog('console'); + unset($trunk['latest']); + + foreach ($trunk as $line) + { + $output[] = [ + 'severity' => [ + 'event' => $line[0]->event(), + 'color' => (string) $line[0]->color()->toHex() + ], + 'timestamp' => $line[1]->format('n/j/Y g:i:s A'), + 'output' => $line[2], + 'blur' => $line[3] + ]; + } + + $trunk = collect($trunk); + $trunk = $trunk->sortBy(function ($line) { + return $line[1]->timestamp; + }); + + $output = $trunk->toArray(); + } + else + { + $output = $game_server->retrieveCompleteLog($request->input('key')); + } + + return response()->json([ + 'success' => true, + 'output' => $output + ]); + } +} diff --git a/app/Http/Controllers/Admin/IpAddressBanController.php b/app/Http/Controllers/Admin/IpAddressBanController.php new file mode 100644 index 0000000..0d95dad --- /dev/null +++ b/app/Http/Controllers/Admin/IpAddressBanController.php @@ -0,0 +1,27 @@ +middleware(function ($request, $next) + { + if (!$request->user()->may(Users::roleset(), Users::MODERATION_IP_ADDRESS_BAN)) + { + return abort(404); + } + + return $next($request); + }); + } + + public function __invoke() + { + return view('admin.user.ip-address-ban'); + } +} diff --git a/app/Http/Controllers/Admin/PanelController.php b/app/Http/Controllers/Admin/PanelController.php new file mode 100644 index 0000000..8cfc894 --- /dev/null +++ b/app/Http/Controllers/Admin/PanelController.php @@ -0,0 +1,28 @@ +middleware(function ($request, $next) + { + if (!$request->user()->may(Admin::roleset(), Admin::VIEW_PANEL)) + { + return abort(404); + } + + return $next($request); + }); + } + + public function __invoke(Request $request) + { + return view('admin.panel')->with('user', $request->user()); + } +} diff --git a/app/Http/Controllers/Admin/PermissionsController.php b/app/Http/Controllers/Admin/PermissionsController.php new file mode 100644 index 0000000..ba55d6e --- /dev/null +++ b/app/Http/Controllers/Admin/PermissionsController.php @@ -0,0 +1,172 @@ +middleware(function ($request, $next) + { + if (!$request->user()->isSuperAdmin()) + { + return abort(404); + } + + return $next($request); + }); + } + + public function view() + { + return view('admin.permissions'); + } + + public function store(Request $request) + { + // 0xbaadc0de + + $rolesets = Roles::allRolesets(); + $view_rolesets = []; + + foreach ($rolesets as $roleset) + { + $view_rolesets[$roleset] = (object) [ + 'name' => $roleset, + 'roles' => Roles::rolesOfRoleset($roleset), + 'basename' => basename(str_replace('\\', '/', $roleset)), // WHAT THE FUCK ?? + ]; + } + + if ($request->has('username')) + { + $request->validate([ + 'username' => ['required', 'exists:users,username'] + ]); + + $user = User::select('id', 'username', 'permissions', 'superadmin')->where('username', $request->input('username'))->first(); + + return view('admin.permissions', [ + 'user' => $user, + 'rolesets' => $view_rolesets, + ]); + } + + if ($request->has('reset_for')) + { + $user = User::findOrFail($request->input('reset_for')); + $user->forceSetPermissions(User::defaultPermissions()); + + Session::flash('success', __('Successfully reset permissions for user :username!', ['username' => $user->username])); + + return view('admin.permissions', [ + 'user' => $user, + 'rolesets' => $view_rolesets, + ]); + } + + try + { + $request->validate([ + 'user' => ['required', 'exists:users,id'] + ]); + } + catch (ValidationException) + { + return back()->with('error', __('An unexpected error occurred. Please try again.')); + } + + /** + * Only permissions that are turned on are sent. + * Additionally, field names are denominated in the format "roleset;role" prefixed with "permission__". + * Example: "permission__App\Roles\Users;MODERATION_GENERAL_BAN" + */ + + $data = $request->all(); + + if (count($data) > (count($rolesets) * 30)) // 30 flags per roleset, impossible to be above this + { + return back()->with('error', __('An unexpected error occurred. Please try again.')); + } + + // We are manually recreating the users permissions based on what it sent + $permissions = []; + + foreach ($data as $field => $value) + { + // If it doesn't start with permission__, leave it be + if (!str_starts_with($field, 'permission__')) + { + continue; + } + + if ($value != 'on') + { + continue; + } + + // Has to be formatted per our spec + $field = substr($field, strlen('permission__')); + + $flag = explode(';', $field); + if (count($flag) !== 2) + { + return back()->with('error', __('An unexpected error occurred. Please try again.')); + } + + $roleset = $flag[0]; + $role = $flag[1]; + + // If the roleset doesn't exist, go away + if (!in_array($roleset, $rolesets) || !class_exists($roleset)) + { + return back()->with('error', __('An unexpected error occurred. Please try again.')); + } + + // If the role doesn't exist, go away + $roles = Roles::rolesOfRoleset($roleset); + if (is_null($roles[$role])) + { + return back()->with('error', __('An unexpected error occurred. Please try again.')); + } + + // If our permissions building array doesn't have this roleset set, set it as 0 + if (!isset($permissions[$roleset])) + { + $permissions[$roleset] = 0; + } + + // Add this flag to the roleset + $permissions[$roleset] |= $roles[$role]; + } + + // Fill in the blanks + foreach ($rolesets as $roleset) + { + if (!isset($permissions[$roleset])) + { + $permissions[$roleset] = 0; + } + } + + $user = User::findOrFail($request->input('user')); + $user->forceSetPermissions($permissions); + Action::log($request->user(), Actions::ChangedUserPermissions, $user); + + Session::flash('success', __('Successfully updated permissions for user :username!', ['username' => $user->username])); + + return view('admin.permissions', [ + 'user' => $user, + 'rolesets' => $view_rolesets, + ]); + } +} diff --git a/app/Http/Controllers/Admin/UserProfileController.php b/app/Http/Controllers/Admin/UserProfileController.php new file mode 100644 index 0000000..c05994f --- /dev/null +++ b/app/Http/Controllers/Admin/UserProfileController.php @@ -0,0 +1,40 @@ +middleware(function ($request, $next) + { + if (!$request->user()->may(Users::roleset(), Users::MODERATION_VIEW_USER_PROFILE)) + { + return abort(404); + } + + return $next($request); + }); + } + + public function view() + { + return view('admin.user.profile'); + } + + public function load(Request $request) + { + $request->validate([ + 'username' => ['required', 'exists:users,username'] + ]); + + $user = User::where('username', $request->input('username'))->first(); + + return view('admin.user.profile', compact('user')); + } +} diff --git a/app/Http/Controllers/Arbiter/IdentificationController.php b/app/Http/Controllers/Arbiter/IdentificationController.php new file mode 100644 index 0000000..2bb005c --- /dev/null +++ b/app/Http/Controllers/Arbiter/IdentificationController.php @@ -0,0 +1,23 @@ +bearerToken()) || !$request->has('friendly_name') || !$request->has('utc_offset')) + { + return abort(404); + } + + $game_server = GameServer::whereEncrypted('access_key', '=', $request->bearerToken())->firstOrFail(); + $game_server->update(['friendly_name' => $request->input('friendly_name'), 'utc_offset' => $request->input('utc_offset')]); + + return response()->make($game_server->uuid)->header('Content-Type', 'text/plain'); + } +} diff --git a/app/Http/Controllers/Arbiter/LogController.php b/app/Http/Controllers/Arbiter/LogController.php new file mode 100644 index 0000000..dabb4aa --- /dev/null +++ b/app/Http/Controllers/Arbiter/LogController.php @@ -0,0 +1,64 @@ +has('severity') || !$request->has('timestamp') || !$request->has('output') || !$request->has('blur')) + { + return abort(404); + } + + $game_server = GameServer::where('uuid', $uuid)->firstOrFail(); + + if (!$game_server->is($request->game_server)) + { + return abort(404); + } + + ConsoleOutput::dispatch($game_server, + ArbiterLogSeverity::tryFrom($request->input('severity')) ?? null, + Carbon::createFromTimestamp($request->input('timestamp'))->setTimezone($game_server->utc_offset), + $request->input('output'), + $request->input('blur') + ); + + return response()->json(['success' => true]); + } + + public function resources(Request $request, $uuid) + { + if (!$request->has('cpu') || !$request->has('ram') || !$request->has('inbound') || !$request->has('outbound')) + { + return abort(404); + } + + $game_server = GameServer::where('uuid', $uuid)->firstOrFail(); + + if (!$game_server->is($request->game_server)) + { + return abort(404); + } + + ResourceReport::dispatch($game_server, (object) [ + 'cpu' => $request->input('cpu'), + 'ram' => $request->input('ram'), + 'net' => [ + 'in' => $request->input('inbound'), + 'out' => $request->input('outbound') + ] + ]); + + return response()->json(['success' => true]); + } +} diff --git a/app/Http/Controllers/Arbiter/StateController.php b/app/Http/Controllers/Arbiter/StateController.php new file mode 100644 index 0000000..913f370 --- /dev/null +++ b/app/Http/Controllers/Arbiter/StateController.php @@ -0,0 +1,28 @@ +has('state')) + { + return abort(404); + } + + if (!$request->game_server->is_set_up) + { + $request->game_server->update(['is_set_up' => true]); + } + + StateChange::dispatch($request->game_server, GameServerState::tryFrom($request->input('state')) ?? GameServerState::Offline); + + return response()->json(['success' => true]); + } +} diff --git a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php new file mode 100644 index 0000000..2fdc580 --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php @@ -0,0 +1,24 @@ +validate([ + recaptchaFieldName() => ['required', recaptchaRuleName()] + ]); + + return $this->store($request); + } +} diff --git a/app/Http/Controllers/Auth/PasswordResetController.php b/app/Http/Controllers/Auth/PasswordResetController.php new file mode 100644 index 0000000..f25a5dc --- /dev/null +++ b/app/Http/Controllers/Auth/PasswordResetController.php @@ -0,0 +1,108 @@ +validate([ + 'email' => ['required', 'email'], + recaptchaFieldName() => ['required', recaptchaRuleName()] + ]); + + // Hack, since UserProvider does a traditional ->where and can't search encrypted text + if (!is_null($user = User::whereEncrypted('email', '=', $request->email)->first())) + { + $ciphertext = $user->getRawOriginal('email'); + $this->broker()->sendResetLink(['email' => $ciphertext]); + } + + return view('auth.request-password')->with('status', __('A password reset link has been sent if the email was valid.')); + } + + // GET /reset-password/{token} + public function view(Request $request, $token) + { + if (!$request->has('email') || empty($token)) + { + return abort(404); + } + + if (!is_null($user = User::whereEncrypted('email', '=', $request->email)->first())) + { + if (is_null($rawUser = $this->broker()->getUser(['email' => $user->getRawOriginal('email')]))) + { + return abort(404); + } + + if (!$this->broker()->tokenExists($rawUser, $token)) + { + return abort(404); + } + } + else + { + return abort(404); + } + + return view('auth.reset-password', ['token' => $token, 'email' => $request->email]); + } + + // POST /reset-password + public function reset(Request $request) + { + $request->validate([ + 'token' => ['required'], + 'email' => ['required', 'email'], + 'password' => $this->passwordRules(), + 'password_confirmation' => $this->passwordConfirmationRules() + ]); + + $ciphertext = ''; + if (!is_null($user = User::whereEncrypted('email', '=', $request->email)->first())) + { + $ciphertext = $user->getRawOriginal('email'); + } + + /* $status = */ $this->broker()->reset( + array_merge($request->only('password', 'password_confirmation', 'token'), ['email' => $ciphertext]), + function ($user, $password) use ($request) { + $user->updatePassword($password, $request->ip(), $request->userAgent()); + event(new PasswordReset($user)); + } + ); + + /* + return $status === Password::PASSWORD_RESET + ? redirect()->route('login')->with('status', __($status)) + : back()->withErrors(['email' => [__($status)]]); + */ + // ^^^ Traditionally we would do this, but since we already validated, we can assume that all validation is done. + // Therefore we just go back to login with "your password has been reset." + // Otherwise it will say "invalid email" or something; we don't want to expose if actual emails exist or not. + + return redirect()->route('login')->with('status', __('Your password has successfully been reset, :name!', ['name' => $user->username])); + } + + protected function broker(): mixed + { + return Password::broker(config('fortify.passwords')); + } +} diff --git a/app/Http/Controllers/CatalogController.php b/app/Http/Controllers/CatalogController.php new file mode 100644 index 0000000..d92d64b --- /dev/null +++ b/app/Http/Controllers/CatalogController.php @@ -0,0 +1,13 @@ +get(); + return view('forum.index')->with('categories', $categories); + } + + public function category(Request $request, $id) + { + $category = ForumCategory::where('id', $id)->first(); + $categories = ForumCategory::orderBy('priority', 'desc')->get(); + return view('forum.category')->with(['category' => $category, 'categories' => $categories]); + } + + public function thread(Request $request, $id) + { + $thread = ForumThread::where('id', $id)->first(); + $categories = ForumCategory::orderBy('priority', 'desc')->get(); + return view('forum.thread')->with(['thread' => $thread, 'categories' => $categories]); + } +} diff --git a/app/Http/Controllers/GamesController.php b/app/Http/Controllers/GamesController.php new file mode 100644 index 0000000..025ff89 --- /dev/null +++ b/app/Http/Controllers/GamesController.php @@ -0,0 +1,13 @@ + en_US becomes en_US => English + + if (!isset($locales[$locale])) + { + $locale = config('app.fallback_locale'); + } + + app()->setLocale($locale); + session()->put('locale', $locale); + + return redirect()->back(); + } + + public function document($page) + { + // we can use view()->exists but it's unsafe w/ user input + $documents = ['privacy', 'rules', 'statistics', 'tos']; + if (!in_array($page, $documents)) + { + return abort(404); + } + + return view("document.{$page}"); + } +} diff --git a/app/Http/Controllers/ItemController.php b/app/Http/Controllers/ItemController.php new file mode 100644 index 0000000..aaafa97 --- /dev/null +++ b/app/Http/Controllers/ItemController.php @@ -0,0 +1,25 @@ +canConfigure(), 404); + + return view('item.configure', compact('asset')); + } +} diff --git a/app/Http/Controllers/Roblox/FastFlagController.php b/app/Http/Controllers/Roblox/FastFlagController.php new file mode 100644 index 0000000..457725a --- /dev/null +++ b/app/Http/Controllers/Roblox/FastFlagController.php @@ -0,0 +1,25 @@ +version ?? "2016"; + + if (!in_array($version, self::versions)) { + return abort(400); + } + + $flags = Storage::disk('resources')->get((sprintf('flags/ClientAppSettings/%s.json', $version))); + + return response()->make($flags)->header('Content-Type', 'application/json'); + } +} diff --git a/app/Http/Controllers/Roblox/MiscellaneousScriptController.php b/app/Http/Controllers/Roblox/MiscellaneousScriptController.php new file mode 100644 index 0000000..1a5310e --- /dev/null +++ b/app/Http/Controllers/Roblox/MiscellaneousScriptController.php @@ -0,0 +1,14 @@ +text(ScriptBuilder::from('Gameserver')->sign()); + } +} diff --git a/app/Http/Controllers/Roblox/OnlinePlayController.php b/app/Http/Controllers/Roblox/OnlinePlayController.php new file mode 100644 index 0000000..01488f4 --- /dev/null +++ b/app/Http/Controllers/Roblox/OnlinePlayController.php @@ -0,0 +1,120 @@ +input('placeId'); + $machineAddress = $request->input('server'); + $machinePort = $request->input('serverPort'); + + $parameters = [ + ... ScriptBuilder::defaultParameters(), + 'PlaceID' => -1 + ]; + + // TODO: generate screenshot and video info when placeid parameter is not -1 (@pizzaboxer) + if ($request->has('jobID')) + { + // TODO: we probably won't use job ids for joinscript generation anyway (@pizzaboxer) + // Carrot: why? + + $jobId = $request->input('jobID'); + } + else + { + if (is_numeric($placeId)) + { + $parameters['PlaceID'] = $placeId; + } + + // make sure the machine address given is a local ip + // this probably isn't necessary? eh + if (is_ipv4($machineAddress)) + { + $parameters['MachineAddress'] = $machineAddress; + } + + if (is_port($machinePort)) + { + $parameters['MachinePort'] = $machinePort; + } + } + + /* "ScreenShotInfo":"Crossroads%0d%0aA+fun+game+by+Player%0d%0aBuilt+in+ROBLOX%2c+the+free+online+building+game.+%0d%0ahttp%3a%2f%2fwww.roblox.com%2fCrossroads-place%3fid%3d1818%0d%0aMore+about+this+level%3a%0d%0aThe+classic+ROBLOX+level+is+back!" */ + /* "VideoInfo":"GamesROBLOX, video, free game, online virtual world */ + + $scripts = []; + + switch ($request->route()->getName()) + { + case 'client.online.join': + $scripts[] = 'Join'; + break; + case 'client.online.group-build': + $scripts[] = 'GroupBuild'; + break; + } + + $scripts[] = 'MultiplayerSharedScript'; + + return response()->text(ScriptBuilder::from($scripts)->render($parameters)->sign()); + } + + public function singleplayer(Request $request) + { + $placeId = $request->input('placeId'); + $uploadingTo = $request->input('upload'); + + $parameters = ScriptBuilder::defaultParameters(); + + if (is_numeric($placeId)) + { + $parameters['IsVisit'] = true; + $parameters['PlaceID'] = $placeId; + $parameters['AssetUrl'] = $parameters['BaseUrl'] . "/asset/?id=" . $placeId; + } + + if (Auth::check()) + { + $user = $request->user(); + + $parameters['PlayerName'] = $request->user()->username; + $parameters['PlayerID'] = $request->user()->id; + $parameters['PlayerAppearance'] = $parameters['BaseUrl'] . '/Asset/CharacterFetch.ashx?userId=' . $parameters['PlayerID'] . '&placeId=' . $parameters['PlaceID']; + $parameters['PlayerSSC'] = 'false'; + $parameters['ClientPresenceUrl'] = $parameters['BaseUrl'] . "/Game/ClientPresence.ashx?PlaceID=" . $parameters['PlaceID']; + + if (is_numeric($uploadingTo)) + { + $parameters['UploadUrl'] = $parameters['BaseUrl'] . "/Data/Upload.ashx?assetid=" . $uploadingTo; + } + } + else + { + $parameters['PlayerName'] = 'Guest ' . rand(0, 9999); + $parameters['PlayerAppearance'] = $parameters['BaseUrl'] . '/Asset/CharacterFetch.ashx?userId=1&placeId=' . $parameters['PlaceID']; + } + + $scripts = ['SingleplayerSharedScript']; + + switch ($request->route()->getName()) + { + case 'client.online.visit': + $scripts[] = 'Visit'; + break; + case 'client.online.solo': + $scripts[] = 'PlaySolo'; + break; + } + + return response()->text(ScriptBuilder::from($scripts)->render($parameters)->sign()); + } +} diff --git a/app/Http/Controllers/Roblox/StaticAssetController.php b/app/Http/Controllers/Roblox/StaticAssetController.php new file mode 100644 index 0000000..23d5c56 --- /dev/null +++ b/app/Http/Controllers/Roblox/StaticAssetController.php @@ -0,0 +1,33 @@ +text('0 0 0 0'); + } + + public function chatFilter() + { + return response()->text('True'); + } + + public function keepAlivePinger() + { + // TODO: make this functional? + // supposedly this is to preserve the user's online presence when the client is open + // i'm not entirely sure what the response is supposed to be? archived pages just show 8 (for logged out users) + // but when you're logged it shows a unique number on each request (presumably random? - https://archive.froast.io/forum/32957261) + + return response()->text('8'); + } + + public function respondWithOK() + { + return response()->text('OK'); + } +} diff --git a/app/Http/Controllers/Roblox/StudioController.php b/app/Http/Controllers/Roblox/StudioController.php new file mode 100644 index 0000000..5f1bc12 --- /dev/null +++ b/app/Http/Controllers/Roblox/StudioController.php @@ -0,0 +1,35 @@ +input('PlaceID'); + $parameters = ScriptBuilder::defaultParameters(); + + if (is_numeric($placeId)) + { + $parameters['PlaceID'] = $placeId; + $parameters['AssetUrl'] = $parameters['BaseUrl'] . "/asset/?id=" . $placeId; + $parameters['ClientPresenceUrl'] = $parameters['BaseUrl'] . "/Game/ClientPresence.ashx?PlaceID=" . $placeId . "&LocationType=Studio"; + } + + return response()->text(ScriptBuilder::from(['SingleplayerSharedScript', 'Edit'])->render($parameters)->sign()); + } + + public function studio(Request $request) + { + $parameters = [ + 'BaseUrl' => "http://" . $request->getHost(), + 'StarterScriptID' => 37801172 + ]; + + return response()->text(ScriptBuilder::from('Studio')->render($parameters)->sign()); + } +} diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php new file mode 100644 index 0000000..2dcd4a8 --- /dev/null +++ b/app/Http/Controllers/UsersController.php @@ -0,0 +1,21 @@ +friends()->count(); + return view('users.profile', compact('user', 'num_friends')); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100644 index 0000000..647d7f4 --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,72 @@ + + */ + protected $middleware = [ + \App\Http\Middleware\TrustHosts::class, + \App\Http\Middleware\TrustProxies::class, + \App\Http\Middleware\BlockBannedIpAddresses::class, + \Illuminate\Http\Middleware\HandleCors::class, + \App\Http\Middleware\PreventRequestsDuringMaintenance::class, + \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, + \App\Http\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + ]; + + /** + * The application's route middleware groups. + * + * @var array> + */ + protected $middlewareGroups = [ + 'web' => [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\Session\Middleware\AuthenticateSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + \App\Http\Middleware\UpdateCurrentIpAddress::class, + \App\Http\Middleware\Localization::class, + \App\Http\Middleware\IsBanned::class, + \App\Http\Middleware\EnsureEmailIsVerified::class, + ], + + 'api' => [ + 'throttle:api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'admin' => \App\Http\Middleware\AdminGuard::class, + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.arbiter' => \App\Http\Middleware\AuthenticateArbiter::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + ]; +} diff --git a/app/Http/Livewire/Account/ModerationHistory.php b/app/Http/Livewire/Account/ModerationHistory.php new file mode 100644 index 0000000..a581fbb --- /dev/null +++ b/app/Http/Livewire/Account/ModerationHistory.php @@ -0,0 +1,41 @@ +may(Users::roleset(), Users::VIEW_BAN_HISTORY), 401); + } + + public function render() + { + $user = Auth::user(); + + $bans = Ban::where('user_id', $user->id)->get(); + $bans = paginate($bans, 15); + + return view('livewire.account.moderation-history', [ + 'bans' => $bans + ]); + } +} diff --git a/app/Http/Livewire/Account/TwoFactorAuthentication.php b/app/Http/Livewire/Account/TwoFactorAuthentication.php new file mode 100644 index 0000000..5f4c91c --- /dev/null +++ b/app/Http/Livewire/Account/TwoFactorAuthentication.php @@ -0,0 +1,34 @@ + ['max:1000'], + ]; + + public function __construct() + { + abort_unless(Auth::check(), 401); + } + + public function mount() + { + $this->blurb = Auth::user()->blurb; + } + + public function updated($property) + { + $this->validateOnly($property); + } + + public function submit() + { + $this->validate(); + + /** @var \App\Models\User */ + $user = Auth::user(); + + if (RateLimiter::tooManyAttempts('update-blurb:' . $user->id, 1)) + { + $wait = RateLimiter::availableIn('update-blurb:' . $user->id); + return $this->addError('blurb', __('Please wait :time before updating your blurb.', ['time' => seconds2human($wait)]));; + } + + RateLimiter::hit('update-blurb:' . $user->id, 300); + + $user->update(['blurb' => $this->blurb]); + + $this->dispatchBrowserEvent('success', __('Your blurb has been updated.')); + } + + public function render() + { + return view('livewire.account.update-blurb'); + } +} diff --git a/app/Http/Livewire/Account/UpdatePassword.php b/app/Http/Livewire/Account/UpdatePassword.php new file mode 100644 index 0000000..d39b512 --- /dev/null +++ b/app/Http/Livewire/Account/UpdatePassword.php @@ -0,0 +1,74 @@ +validateOnly($property); + } + + /** + * @param User $user + * @return array + */ + public function rules(User $user): array + { + return [ + 'current_password' => ['required', new IsCurrentPassword($user)], + 'password' => $this->passwordRules($user->username, $user->email), + 'password_confirmation' => $this->passwordConfirmationRules() + ]; + } + + public function render() + { + return view('livewire.account.update-password'); + } + + public function submit() + { + /** @var \App\Models\User */ + $user = Auth::user(); + + $data = $this->validate($this->rules($user)); + $user->updatePassword($data['password'], Request::ip(), Request::userAgent(), $data['current_password']); + + return redirect()->route('account')->with('status', __('Your password has been updated!')); + } +} diff --git a/app/Http/Livewire/Account/UpdateUsername.php b/app/Http/Livewire/Account/UpdateUsername.php new file mode 100644 index 0000000..6eb20f4 --- /dev/null +++ b/app/Http/Livewire/Account/UpdateUsername.php @@ -0,0 +1,73 @@ +validateOnly($property); + } + + /** + * @param User $user + * @return array + */ + public function rules(User $user): array + { + return [ + 'new_username' => $this->usernameRules('username'), + 'current_password' => ['required', new IsCurrentPassword($user)], + ]; + } + + public function render() + { + return view('livewire.account.update-username'); + } + + public function submit() + { + /** @var \App\Models\User */ + $user = Auth::user(); + $data = $this->validate($this->rules($user)); + + if (!$user->hasEnoughMoney(config('tadah.username_change_cost'))) + { + return $this->dispatchBrowserEvent('alert', __('You do not have enough money to change your username.')); + } + + $user->updateUsername($data['new_username'], Request::ip(), Request::userAgent()); + + return redirect()->route('account')->with('status', __('Your username has been successfully updated!')); + } +} diff --git a/app/Http/Livewire/Admin/ActionLog.php b/app/Http/Livewire/Admin/ActionLog.php new file mode 100644 index 0000000..a68c387 --- /dev/null +++ b/app/Http/Livewire/Admin/ActionLog.php @@ -0,0 +1,50 @@ + ['except' => ''], + ]; + + public function __construct() + { + abort_unless(Auth::check(), 401); + + /** @var \App\Models\User */ + $user = Auth::user(); + abort_unless($user->isSuperAdmin(), 401); + } + + public function updatingSearch() + { + $this->resetPage(); + } + + public function render() + { + $logs = Action::search($this->search)->get()->sortByDesc('created_at'); + + return view('livewire.admin.action-log')->with('logs', paginate($logs, 15)); + } +} diff --git a/app/Http/Livewire/Admin/Alert.php b/app/Http/Livewire/Admin/Alert.php new file mode 100644 index 0000000..56fe863 --- /dev/null +++ b/app/Http/Livewire/Admin/Alert.php @@ -0,0 +1,94 @@ + ['required', 'max:512'], + 'color' => ['required', 'regex:/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/'], + 'expiry' => ['date', 'after:today'], + ]; + } + + public function updated($property) + { + $this->validateOnly($property); + } + + public function __construct() + { + abort_unless(Auth::check(), 401); + + /** @var \App\Models\User */ + $user = Auth::user(); + abort_unless($user->isSuperAdmin(), 401); + } + + public function mount() + { + $this->text = Cache::get('alert')?->text ?? ''; + $this->color = Cache::get('alert')?->color ?? ''; + $this->expiry = Cache::get('expiry')?->expiry->format('m/d/Y') ?? ''; + } + + public function submit() + { + $data = $this->validate(); + + if (!empty($data['expiry'])) + { + Cache::remember('alert', (Carbon::parse($data['expiry'])->timestamp - Carbon::now()->timestamp), function() use ($data) { + return (object) [ + 'text' => $data['text'], + 'color' => $data['color'], + 'expiry' => Carbon::parse($data['expiry']), + ]; + }); + } + else + { + Cache::put('alert', (object) [ + 'text' => $data['text'], + 'color' => $data['color'], + ]); + } + + Action::log(Request::user(), Actions::SiteAlert); + + return $this->dispatchBrowserEvent('reload'); + } + + public function render() + { + return view('livewire.admin.alert'); + } +} diff --git a/app/Http/Livewire/Admin/Ban/IpAddress.php b/app/Http/Livewire/Admin/Ban/IpAddress.php new file mode 100644 index 0000000..ce79109 --- /dev/null +++ b/app/Http/Livewire/Admin/Ban/IpAddress.php @@ -0,0 +1,147 @@ + ['required', 'max:255'], + 'internal_reason' => ['max:255'], + ]; + + public function __construct() + { + abort_unless(Auth::check(), 401); + + /** @var \App\Models\User */ + $user = Auth::user(); + abort_unless($user->may(Users::roleset(), Users::MODERATION_IP_ADDRESS_BAN), 401); + } + + public function updated($property) + { + $this->validateOnly($property); + } + + public function render() + { + return view('livewire.admin.ban.ip-address'); + } + + public function submit() + { + $data = $this->validate(); + $to_ban = []; + + /** + * Identifier whereabout check; + * + * 1. First check if the identifier is a e-mail address by seeing if it contains an '@' character in it. Get the IPs of the users that have this e-mail address and add them to $to_ban. + * 2. If the identifier wasn't an e-mail address, we proceed to check if it is an IPv6 address, by seeing if it contains a period. If it does, return an error. + * 3. If it wasn't an IPv6 address, then we check to see if it is a username (by seeing if it is alphanumeric and less than 20 characters.) If it matches this check but no users exist, we boot them out. We add the IPs of the user to the $to_ban array. + * 4. If it wasn't a username, check if it's an IPv4. If it isn't, boot them out. If it is, add it to $to_ban. + */ + + if (Str::contains($data['identifier'], '@')) + { + if (is_null($users = User::whereEncrypted('email', '=', $data['identifier'])->get())) + { + return $this->addError('identifier', __('No users exist with this e-mail address.')); + } + + foreach ($users as $user) + { + if ($user->isSuperAdmin()) + { + return $this->addError('identifier', __('No users exist with that username.')); + } + + $to_ban[] = $user->register_ip; + $to_ban[] = $user->last_ip; + } + } + elseif (Str::contains($data['identifier'], ':')) + { + return $this->addError('identifier', __('IPv6 addresses are not supported.')); + } + elseif (ctype_alnum($data['identifier'])) + { + if (is_null($user = User::where('username', $data['identifier'])->first()) ) + { + return $this->addError('identifier', __('No users exist with that username.')); + } + + if ($user->isSuperAdmin()) + { + return $this->addError('identifier', __('You may not ban superadmins.')); + } + + $to_ban[] = $user->register_ip; + $to_ban[] = $user->last_ip; + } + else + { + if (!filter_var($data['identifier'], FILTER_VALIDATE_IP)) + { + return $this->addError('identifier', __('Please enter a valid IPv4 address.')); + } + + $to_ban[] = $data['identifier']; + } + + $to_ban = array_unique($to_ban); + + if (in_array(Request::ip(), $to_ban)) + { + return $this->dispatchBrowserEvent('error', __('You cannot ban yourself.')); + } + + $count = 0; + + foreach ($to_ban as $banned_ip) + { + if (!is_null($existing = IpAddressBan::whereEncrypted('ip_address', '=', $banned_ip)->first())) + { + if ($existing->is_active) + { + continue; + } + } + + $count++; + + IpAddressBan::create(array_filter([ + 'ip_address' => $banned_ip, + 'moderator_id' => Request::user()->id, + 'internal_reason' => $data['internal_reason'], + 'criterium' => $data['identifier'] + ], null, ARRAY_FILTER_USE_BOTH)); + Action::log(Request::user(), Actions::AddIPBan); + } + + return $this->dispatchBrowserEvent('success', __(':amount IP(s) have been banned. Please check the ban list to see who got affected.', ['amount' => number_format($count)])); + } +} diff --git a/app/Http/Livewire/Admin/Ban/IpAddressSearch.php b/app/Http/Livewire/Admin/Ban/IpAddressSearch.php new file mode 100644 index 0000000..9acc780 --- /dev/null +++ b/app/Http/Livewire/Admin/Ban/IpAddressSearch.php @@ -0,0 +1,49 @@ +may(Users::roleset(), Users::MODERATION_VIEW_IP_ADDRESS_BAN_LIST), 401); + } + + public function updatingSearch() + { + $this->resetPage(); + } + + public function render() + { + if (empty(trim($this->search))) + { + $bans = IpAddressBan::orderBy('created_at', 'DESC'); + } + else + { + $bans = IpAddressBan::whereEncrypted('ip_address', '=', $this->search); + } + + return view('livewire.admin.ban.ip-address-search')->with('bans', paginate($bans->get(), 15)); + } +} diff --git a/app/Http/Livewire/Admin/Ban/Pardon.php b/app/Http/Livewire/Admin/Ban/Pardon.php new file mode 100644 index 0000000..634ab6a --- /dev/null +++ b/app/Http/Livewire/Admin/Ban/Pardon.php @@ -0,0 +1,71 @@ +may(Users::roleset(), Users::MODERATION_PARDON_BAN), 401); + } + + public function updated($property) + { + $this->validateOnly($property); + } + + /** + * @return array + */ + public function rules(): array + { + return [ + 'username' => ['required', Rule::exists(User::class)], + 'pardon_reason' => ['required', 'max:255'] + ]; + } + + public function render() + { + return view('livewire.admin.ban.pardon'); + } + + public function submit() + { + $data = $this->validate(); + $user = User::where('username', $data['username'])->first(); + + if (!$user->isBanned()) + { + return $this->addError('username', __('This user is not currently banned.')); + } + + Request::user()->pardon($user, $data['pardon_reason']); + Action::log(Request::user(), Actions::PardonedUser, $user); + + return $this->dispatchBrowserEvent('success', __('Successfully pardoned ban for user :username!', ['username' => $user->username])); + } +} diff --git a/app/Http/Livewire/Admin/Ban/PardonIpAddress.php b/app/Http/Livewire/Admin/Ban/PardonIpAddress.php new file mode 100644 index 0000000..6fc62e1 --- /dev/null +++ b/app/Http/Livewire/Admin/Ban/PardonIpAddress.php @@ -0,0 +1,65 @@ + ['required', 'ipv4'], + ]; + + public function __construct() + { + abort_unless(Auth::check(), 401); + + /** @var \App\Models\User */ + $user = Auth::user(); + abort_unless($user->may(Users::roleset(), Users::MODERATION_PARDON_IP_ADDRESS_BAN), 401); + } + + public function updated($property) + { + $this->validateOnly($property); + } + + public function render() + { + return view('livewire.admin.ban.pardon-ip-address'); + } + + public function submit() + { + $data = $this->validate(); + + if (is_null($ban = IpAddressBan::whereEncrypted('ip_address', '=', $data['ip_address'])->where('is_active', true)->first())) + { + return $this->addError('ip_address', __('That IP is not currently banned.')); + } + + Request::user()->pardonIpAddressBan($ban); + Action::log(Request::user(), Actions::RemoveIPBan); + + return $this->dispatchBrowserEvent('success', __('Successfully pardoned ban for IP :ip!', ['ip' => $ban->ip_address])); + } +} diff --git a/app/Http/Livewire/Admin/Ban/Search.php b/app/Http/Livewire/Admin/Ban/Search.php new file mode 100644 index 0000000..747b567 --- /dev/null +++ b/app/Http/Livewire/Admin/Ban/Search.php @@ -0,0 +1,51 @@ + ['except' => ''], + ]; + + public function __construct() + { + abort_unless(Auth::check(), 401); + + /** @var \App\Models\User */ + $user = Auth::user(); + abort_unless($user->may(Users::roleset(), Users::MODERATION_VIEW_BAN_LIST), 401); + } + + public function updatingSearch() + { + $this->resetPage(); + } + + public function render() + { + $bans = Ban::search($this->search)->get(); + + $this->dispatchBrowserEvent('admin-hook-details'); + + return view('livewire.admin.ban.search')->with('bans', paginate($bans, 15)); + } +} diff --git a/app/Http/Livewire/Admin/Ban/User.php b/app/Http/Livewire/Admin/Ban/User.php new file mode 100644 index 0000000..4eb10fb --- /dev/null +++ b/app/Http/Livewire/Admin/Ban/User.php @@ -0,0 +1,165 @@ +may(Users::roleset(), Users::MODERATION_GENERAL_BAN), 401); + } + + /** + * @return array + */ + public function rules(): array + { + return [ + 'username' => ['required', Rule::exists(UserModel::class)], + 'moderator_note' => ['required', 'max:255'], + 'internal_reason' => ['required', 'max:255'], + 'duration_preset' => ['required', Rule::in([0, 1, 2, 3, 4, 5, 6, 7])], + 'offensive_item' => ['nullable'], + 'custom_expiry_date' => ['required_if:duration_preset,6', 'date', 'after:today', 'nullable'], + ]; + } + + public function render() + { + return view('livewire.admin.ban.user'); + } + + public function updated($property) + { + $this->validateOnly($property); + } + + public function submit() + { + $data = $this->validate(); + $user = UserModel::where('username', $data['username'])->first(); + + if ($user->isBanned()) + { + return $this->addError('username', __('That user is already banned.')); + } + + if ($user->username == Request::user()->username) + { + return $this->addError('username', __('You may not moderate yourself.')); + } + + if ($user->isSuperAdmin()) + { + return $this->addError('username', __('You may not moderate superadmins.')); + } + + $is_warning = $data['duration_preset'] == 0; + $is_poison_ban = $data['duration_preset'] == 7; + $expiry_date = null; + + if (!$is_warning && !$is_poison_ban) + { + $expiry_date = match($data['duration_preset']) + { + '1' => Carbon::now()->addDays(1), // 1 day + '2' => Carbon::now()->addDays(3), // 3 days + '3' => Carbon::now()->addDays(7), // 7 days + '4' => Carbon::now()->addDays(14), // 14 days + '5' => null, // Account Deletion + '6' => Carbon::parse($data['custom_expiry_date']) // Custom Date + }; + } + + if ($is_warning) + { + Request::user()->punish($user, [ + 'internal_reason' => $data['internal_reason'], + 'moderator_note' => $data['moderator_note'], + 'offensive_item' => $data['offensive_item'], + 'is_warning' => true, + ]); + + Action::log(Request::user(), Actions::WarnedUser, $user); + } + else + { + $ban = Request::user()->punish($user, [ + 'internal_reason' => $data['internal_reason'], + 'moderator_note' => $data['moderator_note'], + 'offensive_item' => $data['offensive_item'], + 'expiry_date' => $expiry_date, + 'is_appealable' => !empty($this->is_appealable), + ]); + + if (Request::user()->may(Users::roleset(), Users::MODERATION_POISON_BAN) && $is_poison_ban) + { + $user->ban->poison(); + + Action::log(Request::user(), Actions::PoisonBannedUser, $user); + } + else + { + if ($expiry_date) + { + Action::log(Request::user(), Actions::TempBannedUser, $ban); + } + else + { + Action::log(Request::user(), Actions::PermBannedUser, $user); + } + } + } + + return $this->dispatchBrowserEvent('success', __('Successfully punished user :username!', ['username' => $user->username])); + } +} diff --git a/app/Http/Livewire/Admin/GameServer/All.php b/app/Http/Livewire/Admin/GameServer/All.php new file mode 100644 index 0000000..038aca7 --- /dev/null +++ b/app/Http/Livewire/Admin/GameServer/All.php @@ -0,0 +1,62 @@ +may(GameServers::roleset(), GameServers::VIEW), 401); + } + + public function mount($gameServers) + { + $this->game_servers = $gameServers; + } + + /** + * @return array + */ + public function getListeners(): array + { + $listeners = []; + + foreach ($this->game_servers as $game_server) + { + $listeners["echo-private:game-servers.{$game_server->uuid},GameServer\\StateChange"] = '$refresh'; + $listeners["echo-private:game-servers.{$game_server->uuid},GameServer\\NewPlaceJob"] = '$refresh'; + $listeners["echo-private:game-servers.{$game_server->uuid},GameServer\\NewThumbnailJob"] = '$refresh'; + } + + return $listeners; + } + + public function render() + { + $servers = paginate($this->game_servers, 15); + + return view('livewire.admin.game-server.all', compact('servers')); + } +} diff --git a/app/Http/Livewire/Admin/GameServer/Create.php b/app/Http/Livewire/Admin/GameServer/Create.php new file mode 100644 index 0000000..ca85055 --- /dev/null +++ b/app/Http/Livewire/Admin/GameServer/Create.php @@ -0,0 +1,124 @@ +may(GameServers::roleset(), GameServers::CREATE), 401); + } + + public function updated($property) + { + $this->validateOnly($property); + } + + /** + * @return array + */ + public function rules(): array + { + return [ + 'ip_address' => ['required', new IsSiprNameOrIpAddress()], // Rule::unique(GameServer::class) + 'maximum_place_jobs' => ['required', 'integer', 'numeric', 'min:5'], + 'maximum_thumbnail_jobs' => ['required', 'integer', 'numeric', 'min:5'], + 'port' => ['required', 'integer', 'numeric', 'min:0', 'max:65535'], + 'vnc_port' => ['min:0', 'max:65535', 'nullable'], + 'vnc_password' => ['min:0', 'max:512', 'nullable'], + ]; + } + + public function render() + { + return view('livewire.admin.game-server.create'); + } + + public function submit() + { + $data = $this->validate(); + + if (!is_null(GameServer::whereEncrypted('ip_address', '=', $data['ip_address'])->first())) + { + $this->addError('ip_address', __('A game server already exists with that IP address.')); + } + + if (!isset($data['vnc_port']) && !empty($this->has_vnc)) + { + $this->addError('vnc_port', __('Please specify a VNC port.')); + } + + if (!isset($data['vnc_password']) && !empty($this->has_vnc)) + { + $this->addError('vnc_password', __('Please specify a VNC password.')); + } + + if (!$this->getErrorBag()->isEmpty()) + { + return; + } + + $game_server = GameServer::create(array_filter([ + 'uuid' => uuid(), + 'ip_address' => $data['ip_address'], + 'port' => $data['port'], + 'access_key' => GameServer::generateAccessKey(), + 'maximum_place_jobs' => $data['maximum_place_jobs'], + 'maximum_thumbnail_jobs' => $data['maximum_thumbnail_jobs'], + 'has_vnc' => !empty($this->has_vnc), + 'vnc_port' => $data['vnc_port'] ?? null, + 'vnc_password' => $data['vnc_password'] ?? null, + ], null, ARRAY_FILTER_USE_BOTH)); + Action::log(Request::user(), Actions::CreatedGameServer, $game_server); + + return redirect()->route('admin.game-server.view', $game_server->uuid)->with('success', __('Successfully created game server!')); + } +} diff --git a/app/Http/Livewire/Admin/GameServer/Delete.php b/app/Http/Livewire/Admin/GameServer/Delete.php new file mode 100644 index 0000000..822e827 --- /dev/null +++ b/app/Http/Livewire/Admin/GameServer/Delete.php @@ -0,0 +1,49 @@ +gameServer = $gameServer; + } + + public function __construct() + { + abort_unless(Auth::check(), 401); + + /** @var \App\Models\User */ + $user = Auth::user(); + abort_unless($user->may(GameServers::roleset(), GameServers::MANAGE), 401); + } + + public function render() + { + return view('livewire.admin.game-server.delete'); + } + + public function submit() + { + $this->gameServer->delete(); + Action::log(Request::user(), Actions::DeletedGameServer, $this->gameServer); + + return redirect()->route('admin.game-server.all')->with('success', __('Successfully deleted game server!')); + } +} diff --git a/app/Http/Livewire/Admin/GameServer/Manage.php b/app/Http/Livewire/Admin/GameServer/Manage.php new file mode 100644 index 0000000..a70fe28 --- /dev/null +++ b/app/Http/Livewire/Admin/GameServer/Manage.php @@ -0,0 +1,146 @@ +gameServer = $gameServer; + + $this->ip_address = $this->gameServer->ip_address; + $this->maximum_place_jobs = $this->gameServer->maximum_place_jobs; + $this->maximum_thumbnail_jobs = $this->gameServer->maximum_thumbnail_jobs; + $this->port = $this->gameServer->port; + $this->has_vnc = $this->gameServer->has_vnc; + $this->vnc_port = $this->gameServer->vnc_port; + $this->vnc_password = $this->gameServer->vnc_password; + } + + public function updated($property) + { + $this->validateOnly($property); + } + + public function __construct() + { + abort_unless(Auth::check(), 401); + + /** @var \App\Models\User */ + $user = Auth::user(); + abort_unless($user->may(GameServers::roleset(), GameServers::MANAGE), 401); + } + + public function render() + { + return view('livewire.admin.game-server.manage'); + } + + /** + * @return array + */ + public function rules(): array + { + return [ + 'ip_address' => ['required', new IsSiprNameOrIpAddress()], // Rule::unique(GameServer::class) + 'maximum_place_jobs' => ['required', 'integer', 'numeric', 'min:5'], + 'maximum_thumbnail_jobs' => ['required', 'integer', 'numeric', 'min:5'], + 'port' => ['required', 'integer', 'numeric', 'min:0', 'max:65535'], + 'vnc_port' => ['min:0', 'max:65535', 'nullable'], + 'vnc_password' => ['min:0', 'max:512', 'nullable'], + ]; + } + + public function submit() + { + $data = $this->validate(); + + if (is_null($server = GameServer::whereEncrypted('ip_address', '=', $data['ip_address'])->first())) + { + if (!$server->is($this->gameServer)) + { + $this->addError('ip_address', __('A game server already exists with that IP address.')); + } + } + + if (!isset($data['vnc_port']) && !empty($this->has_vnc)) + { + $this->addError('vnc_port', __('Please specify a VNC port.')); + } + + if (!isset($data['vnc_password']) && !empty($this->has_vnc)) + { + $this->addError('vnc_password', __('Please specify a VNC password.')); + } + + if (!$this->getErrorBag()->isEmpty()) + { + return; + } + + $this->gameServer->update(array_filter([ + 'ip_address' => $this->ip_address, + 'maximum_place_jobs' => $this->maximum_place_jobs, + 'maximum_thumbnail_jobs' => $this->maximum_thumbnail_jobs, + 'port' => $this->port, + 'has_vnc' => $this->has_vnc, + 'vnc_port' => $data['vnc_port'] ?? null, + 'vnc_password' => $data['vnc_password'] ?? null, + ], null, ARRAY_FILTER_USE_BOTH)); + Action::log(Request::user(), Actions::ModifiedGameServer, $this->gameServer); + + return $this->dispatchBrowserEvent('success', __('Successfully updated game server!')); + } +} diff --git a/app/Http/Livewire/Admin/User/AssociatedAccounts.php b/app/Http/Livewire/Admin/User/AssociatedAccounts.php new file mode 100644 index 0000000..56b26e4 --- /dev/null +++ b/app/Http/Livewire/Admin/User/AssociatedAccounts.php @@ -0,0 +1,46 @@ +may(Users::roleset(), Users::MODERATION_VIEW_ASSOCIATED_ACCOUNTS), 401); + } + + /** + * @param mixed $accounts + */ + public function mount(mixed $accounts) + { + $this->accounts = $accounts; + } + + public function render() + { + return view('livewire.admin.user.associated-accounts')->with('accounts', $this->accounts->paginate(10)); + } +} diff --git a/app/Http/Livewire/Admin/User/ModerationHistory.php b/app/Http/Livewire/Admin/User/ModerationHistory.php new file mode 100644 index 0000000..3449d85 --- /dev/null +++ b/app/Http/Livewire/Admin/User/ModerationHistory.php @@ -0,0 +1,49 @@ +user = $user; + } + + public function __construct() + { + abort_unless(Auth::check(), 401); + + /** @var \App\Models\User */ + $user = Auth::user(); + abort_unless($user->may(Users::roleset(), Users::MODERATION_VIEW_BAN_HISTORY), 401); + } + + public function render() + { + $bans = Ban::where('user_id', $this->user->id); + + return view('livewire.admin.user.moderation-history')->with('bans', $bans->paginate(15)); + } +} diff --git a/app/Http/Livewire/Auth/Register.php b/app/Http/Livewire/Auth/Register.php new file mode 100644 index 0000000..aa3ce28 --- /dev/null +++ b/app/Http/Livewire/Auth/Register.php @@ -0,0 +1,187 @@ + false, + 'email' => false, + 'password' => false, + 'password_confirmation' => false, + 'key' => false, + 'tos' => false, + 'age' => false, + ]; + + public function __construct() + { + abort_if(Auth::check(), 401); + abort_unless(is_null(PoisonedIpAddress::whereEncrypted('ip_address', '=', Request::ip())->first()), 404); + } + + /** + * @return array + */ + public function rules(): array + { + $rules = [ + 'username' => $this->usernameRules(), + 'email' => $this->emailRules(), + 'password' => $this->passwordRules($this->username, $this->email), + 'password_confirmation' => $this->passwordConfirmationRules(), + 'tos' => ['required', 'min:1'], + 'age' => ['required', 'min:1'], + ]; + + if (config('tadah.invite_keys_required')) + { + $rules['key'] = ['required', 'string', new IsValidInviteKey()]; + } + + return $rules; + } + + public function data() + { + return $this->unwrapDataForValidation($this->prepareForValidation($this->getDataForValidation($this->rules()))); + } + + public function render() + { + $bag = $this->getErrorBag(); + + $icon = function ($field) use ($bag) { + if ($field == 'documents') + { + return match (true) + { + $bag->has('tos') || $bag->has('age') => 'fa-xmark', + !$bag->has('tos') && !$bag->has('age') && $this->input_began['tos'] && $this->input_began['age'] => 'fa-check', + default => 'fa-hyphen' + }; + } + + return match(true) + { + $bag->has($field) && $this->input_began[$field] => 'fa-xmark', + !$bag->has($field) && $this->input_began[$field] => 'fa-check', + default => 'fa-hyphen' + }; + }; + + $status = function ($field) use ($bag) { + return match(true) + { + $bag->has($field) && $this->input_began[$field] => 'is-invalid', + !$bag->has($field) && $this->input_began[$field] && $field != 'tos' && $field != 'age' => 'is-valid', + default => null + }; + }; + + $feedback = function ($field) use ($icon) { + return match($icon($field)) { + 'fa-xmark' => 't_error-feedback', + 'fa-check' => 't_success-feedback', + 'fa-hyphen' => 't_disabled-feedback' + }; + }; + + return view('livewire.auth.register', compact('icon', 'status', 'feedback')); + } + + public function updated($property) + { + if ($property == 'captcha') + { + return; + } + + $this->input_began[$property] = true; + + $validator = validator($this->data(), $this->rules()); + $this->dispatchBrowserEvent('validated', !$validator->fails()); + + $this->validateOnly($property); + } + + public function register() + { + $captchaValidation = validator(['captcha' => $this->captcha], ['captcha' => ['required', recaptchaRuleName()]]); + + if ($captchaValidation->fails()) + { + return $this->dispatchBrowserEvent('fatal', __('The captcha challenge failed. Please try again.')); + } + + $primaryValidation = validator($this->data(), $this->rules()); + if ($primaryValidation->fails()) + { + return $this->dispatchBrowserEvent('fatal', __('An unexpected error occurred. Please try again.')); + } + + if (!is_null(PoisonedIpAddress::whereEncrypted('ip_address', '=', Request::ip())->first())) + { + return abort(404); + } + + User::register($primaryValidation->validated(), Request::ip()); + + return $this->dispatchBrowserEvent('register-complete'); + } +} diff --git a/app/Http/Livewire/Dashboard/BestFriends.php b/app/Http/Livewire/Dashboard/BestFriends.php new file mode 100644 index 0000000..7a53c8b --- /dev/null +++ b/app/Http/Livewire/Dashboard/BestFriends.php @@ -0,0 +1,19 @@ + ['required', 'min:3', 'max:140'], + ]; + + public function __construct() + { + abort_unless(Auth::check(), 401); + } + + public function load() + { + $this->loading = false; + } + + public function share() + { + $this->validate(); + + /** @var \App\Models\User */ + $user = Auth::user(); + $key = ('create-feed-post:' . $user->id); + + if (RateLimiter::tooManyAttempts($key, 1)) + { + $wait = RateLimiter::availableIn($key); + return $this->addError('status', __('Please wait :time before updating your status.', ['time' => seconds2human($wait, true)]));; + } + + RateLimiter::hit('create-feed-post:' . Auth::user()->id, 300); + + $status = Status::create([ + 'content' => $this->status, + 'creator_id' => $user->id + ]); + + $user->updateStatus($status); + } + + public function updated($property) + { + $this->validateOnly($property); + } + + public function render() + { + /** @var \App\Models\User */ + $user = Auth::user(); + $posts = collect([]); + + $this->status = $user->status?->content ?? ''; + + if ($this->loading) + { + return view('livewire.dashboard.feed', compact('posts', 'user')); + } + + // ... merge users own posts + $posts = $posts->merge(Status::where('creator_id', $user->id)->get()); + + // ... merge posts from friends + $friends = $user->friends()->pluck('id')->all(); + $posts = $posts->merge(Status::whereIn('creator_id', $friends)->get()); + + // ... merge posts from groups + // TODO + + // ... sort + $posts = $posts->sortByDesc('id'); + + return view('livewire.dashboard.feed', compact('posts', 'user')); + } +} diff --git a/app/Http/Livewire/Dashboard/RecentlyPlayedGames.php b/app/Http/Livewire/Dashboard/RecentlyPlayedGames.php new file mode 100644 index 0000000..8bd0f11 --- /dev/null +++ b/app/Http/Livewire/Dashboard/RecentlyPlayedGames.php @@ -0,0 +1,19 @@ + 'render']; + + public function __construct() + { + abort_unless(Auth::check(), 401); + } + + public function render() + { + if ($this->selected_type) + { + abort_unless($this->selected_type->isDevelopType(), 401); + + $assets = Asset::where('creator_id', Auth::user()->id) + ->where('creator_type', CreatorType::User->value) + ->where('type', $this->selected_type->value) + ->orderBy('created_at', 'desc') + ->get(); + } + else + { + abort_unless($this->selected_page, 401); + + if ($this->selected_page == DevelopPage::Games) + { + $assets = Universe::where('creator_id', Auth::user()->id) + ->where('creator_type', CreatorType::User->value) + ->orderBy('created_at', 'desc') + ->get(); + } + } + + return view('livewire.develop.assets', [ + 'assets' => paginate($assets, 10), + 'selected_type' => $this->selected_type, + 'selected_page' => $this->selected_page + ]); + } +} diff --git a/app/Http/Livewire/Develop/Create.php b/app/Http/Livewire/Develop/Create.php new file mode 100644 index 0000000..cbaa37c --- /dev/null +++ b/app/Http/Livewire/Develop/Create.php @@ -0,0 +1,185 @@ +selected_type->isDevelopCreatable(), 404); + } + + /** + * @return array + */ + protected function rules(): array + { + return [ + 'asset_name' => ['required', 'min:3', 'max:50'], + 'asset_file' => ['required', ... $this->selected_type->rules()] + ]; + } + + public function upload() + { + $this->validate(); + + if (RateLimiter::tooManyAttempts('create-asset:' . Auth::user()->id, 1)) + { + $wait = RateLimiter::availableIn('create-asset:' . Auth::user()->id); + $this->dispatchBrowserEvent('error', __('Please wait :time before creating a new :asset_type.', ['time' => seconds2human($wait), 'asset_type' => $this->selected_type->fullname()])); + return; + } + + // static thumbnail processing + if (in_array($this->selected_type, [AssetType::TShirt, AssetType::Decal])) + { + try + { + $image = new SimpleImage($this->asset_file->getRealPath()); + } + catch(\Exception $exception) + { + $this->addError('asset_file', __('Failed to process image, it might be corrupted?')); + return; + } + + if ($this->selected_type == AssetType::TShirt) + { + $imageData = new SimpleImage(); + $imageData->fromNew($image->getWidth(), $image->getWidth()); + + $assetThumbnail = new SimpleImage(resource_path('img/tshirt-template.png')); + $assetThumbnail->resize(420, 420); + + // fit the image in a 1:1 canvas, 420x420 max + $imageData->resize($image->getWidth()); + $imageData->overlay($image, 'top'); + if ($image->getWidth() > 420) $imageData->resize(420, 420); + + // image thumbnail must be 420x420 + $imageThumbnail = clone $imageData; + $imageThumbnail->resize(420, 420); + + // asset thumbnail is image thumbnail overlayed onto t-shirt template + $assetThumbnailOverlay = clone $imageThumbnail; + $assetThumbnailOverlay->resize(250, 250); + $assetThumbnail->overlay($assetThumbnailOverlay, 'center', 1); + } + else if ($this->selected_type == AssetType::Decal) + { + // image retains original ratio, original size is retained if under 420x420 + $imageData = clone $image; + $imageData->bestFit(420, 420); + + // image and asset thumbnails are the image resized to 420x420 + $imageThumbnail = clone $image; + $imageThumbnail->resize(420, 420); + $assetThumbnail = clone $imageThumbnail; + } + + $imageData = $imageData->toString(); + $imageThumbnail = $imageThumbnail->toString(); + $assetThumbnail = $assetThumbnail->toString(); + + RateLimiter::hit('create-asset:' . Auth::user()->id, 30); + + $imageAsset = Asset::create([ + 'name' => $this->asset_name, + 'description' => $this->selected_type->fullname() . ' ' . AssetType::Image->name, + 'type' => AssetType::Image->value, + 'creator_id' => Auth::user()->id + ]); + + $imageAsset->initialize($imageData, $imageThumbnail); + + $document = simplexml_load_file(resource_path(sprintf('xml/%s.xml', $this->selected_type->name))); + $document->xpath("//url")[0][0] = sprintf('%s/asset/?id=%d', config('app.url'), $imageAsset->id); + // we need to remove the first line that contains the XML declaration + $assetData = $document->asXML(); + $assetData = preg_replace('/^.+\n/', '', $assetData); + } + else + { + if ($this->selected_type == AssetType::Audio) + { + $assetThumbnail = file_get_contents(resource_path('img/audio.png')); + $assetData = $this->asset_file->get(); + } + + if ($this->selected_type == AssetType::Animation) + { + $assetThumbnail = file_get_contents(resource_path('img/animation.png')); + $assetData = $this->asset_file->get(); + } + + RateLimiter::hit('create-asset:' . Auth::user()->id, 30); + } + + $asset = Asset::create([ + 'name' => $this->asset_name, + 'description' => $this->selected_type->fullname(), + 'type' => $this->selected_type->value, + 'image_id' => $imageAsset->id ?? null, + 'creator_id' => Auth::user()->id + ]); + + $asset->initialize($assetData, $assetThumbnail); + + if (in_array($this->selected_type, [AssetType::TShirt, AssetType::Decal])) + { + Cdn::save($imageData); + Cdn::save($imageThumbnail, 'png'); + } + + Cdn::save($assetData); + Cdn::save($assetThumbnail, 'png'); + + $this->dispatchBrowserEvent('success', __('Successfully created :asset_type.', ["asset_type" => __($this->selected_type->fullname())])); + + $this->emitTo('develop.assets', 'assetCreated'); + } + + public function updated($property) + { + $this->validateOnly($property); + } + + public function render() + { + return view('livewire.develop.create')->with('selected_type', $this->selected_type); + } +} diff --git a/app/Http/Livewire/Develop/Panel.php b/app/Http/Livewire/Develop/Panel.php new file mode 100644 index 0000000..21152ef --- /dev/null +++ b/app/Http/Livewire/Develop/Panel.php @@ -0,0 +1,64 @@ +isDevelopType()) + { + $this->reset('selected_type'); + $this->reset('selected_page'); + } + + $this->selected_type = $type; + $this->selected_page = false; + } + + public function setPage($enum_value) + { + $page = DevelopPage::tryFrom($enum_value); + + if (is_null($page)) + { + $this->reset('selected_type'); + $this->reset('selected_page'); + } + + $this->selected_type = false; + $this->selected_page = $page; + } + + public function render() + { + return view('livewire.develop.panel', [ + 'types' => AssetType::developTypes(), + 'pages' => DevelopPage::developPages(), + 'selected_type' => $this->selected_type, + 'selected_page' => $this->selected_page + ]); + } +} diff --git a/app/Http/Livewire/Forum/Create.php b/app/Http/Livewire/Forum/Create.php new file mode 100644 index 0000000..6c20435 --- /dev/null +++ b/app/Http/Livewire/Forum/Create.php @@ -0,0 +1,13 @@ +thread->id)->orderBy('created_at', 'desc')->get(); + + return view('livewire.forum.replies')->with('replies', paginate($replies, 10)); + } +} \ No newline at end of file diff --git a/app/Http/Livewire/Forum/Thread.php b/app/Http/Livewire/Forum/Thread.php new file mode 100644 index 0000000..cf04244 --- /dev/null +++ b/app/Http/Livewire/Forum/Thread.php @@ -0,0 +1,30 @@ +with('thread', $this->thread); + } + + public function delete() + { + if (Auth::user()->may(Forums::roleset(), Forums::GLOBAL_DELETE_POSTS)) { + $this->thread->delete(); + + return redirect(route('forum')); + } + } +} diff --git a/app/Http/Livewire/Forum/Threads.php b/app/Http/Livewire/Forum/Threads.php new file mode 100644 index 0000000..7cd2111 --- /dev/null +++ b/app/Http/Livewire/Forum/Threads.php @@ -0,0 +1,49 @@ + ['except' => ''], + ]; + + public function render() + { + $threads = []; + + if ($this->search) { + $threads = ForumThread::search($this->search)->get(); + } elseif ($this->category) { + $threads = ForumThread::where('category_id', '=', $this->category->id)->orderBy('updated_at', 'desc')->get(); + } else { + $threads = ForumThread::orderBy('updated_at', 'desc')->get(); + } + + return view('livewire.forum.threads')->with('threads', paginate($threads, 10)); + } +} diff --git a/app/Http/Livewire/Games/Search.php b/app/Http/Livewire/Games/Search.php new file mode 100644 index 0000000..9d96a79 --- /dev/null +++ b/app/Http/Livewire/Games/Search.php @@ -0,0 +1,46 @@ +sort = PlaceSort::tryFrom($enum_value) ?? PlaceSort::MostPopular; + } + + public function setGenre($enum_value) + { + $this->genre = AssetGenre::tryFrom($enum_value) ?? AssetGenre::All; + } + + public function render() + { + return view('livewire.games.search', [ + 'sorts' => PlaceSort::cases(), + 'genres' => AssetGenre::cases(), + 'selected_sort' => $this->sort, + 'selected_genre' => $this->genre + ]); + } +} diff --git a/app/Http/Livewire/Item/Comments.php b/app/Http/Livewire/Item/Comments.php new file mode 100644 index 0000000..3a1489b --- /dev/null +++ b/app/Http/Livewire/Item/Comments.php @@ -0,0 +1,23 @@ +asset->comments_enabled, 404); + } + + public function render() + { + return view('livewire.item.comments'); + } +} diff --git a/app/Http/Livewire/Item/Configure.php b/app/Http/Livewire/Item/Configure.php new file mode 100644 index 0000000..a3a66a2 --- /dev/null +++ b/app/Http/Livewire/Item/Configure.php @@ -0,0 +1,118 @@ + ['required', 'string', 'min:3', 'max:50'], + 'description' => ['required', 'string', 'max:1000'], + 'genre' => [new Enum(AssetGenre::class)], + // 'price' => ['integer', 'min:0', 'max:1000'], + ]; + } + + public function mount() + { + abort_unless($this->asset->canConfigure(), 404); + + $this->name = $this->asset->name; + $this->description = $this->asset->description; + $this->genre = $this->asset->genre->value; + $this->sell = $this->asset->is_for_sale; + $this->price = $this->asset->price; + $this->comments = $this->asset->comments_enabled; + } + + public function updated($property) + { + $this->validateOnly($property); + } + + public function submit() + { + $this->withValidator(function (Validator $validator) { + $validator->sometimes('price', ['required', 'integer', 'min:0', 'max:1000'], function ($input){ + return !is_null($this->sell); + }); + })->validate(); + + $this->asset->name = $this->name; + $this->asset->description = $this->description; + $this->asset->genre = $this->genre; + $this->asset->comments_enabled = $this->comments ?? false; + + if ($this->asset->type->isSellable()) + { + $this->asset->is_for_sale = $this->sell ?? false; + + if ($this->asset->type == AssetType::Model) + { + $this->asset->is_public_domain = $this->asset->is_for_sale; + } + + if ($this->sell && !$this->asset->type->isFree()) + { + $this->asset->price = $this->price; + } + } + + $this->asset->save(); + + $this->dispatchBrowserEvent('success', __('Successfully updated :asset_type.', ["asset_type" => __($this->asset->type->fullname())])); + } + + public function render() + { + $genres = AssetGenre::cases(); + + return view('livewire.item.configure', compact('genres')); + } +} diff --git a/app/Http/Livewire/Layout/SearchBar.php b/app/Http/Livewire/Layout/SearchBar.php new file mode 100644 index 0000000..bdf38c9 --- /dev/null +++ b/app/Http/Livewire/Layout/SearchBar.php @@ -0,0 +1,28 @@ +take(4)->get(); + return $users; + } + + public function render() + { + $users = $this->searchUsers($this->search); + return view('livewire.layout.search-bar')->with('users', $users); + } +} \ No newline at end of file diff --git a/app/Http/Livewire/Users/FriendButton.php b/app/Http/Livewire/Users/FriendButton.php new file mode 100644 index 0000000..cc3cf05 --- /dev/null +++ b/app/Http/Livewire/Users/FriendButton.php @@ -0,0 +1,99 @@ +id, $this->user->id); + + if (!is_null($friendship)) + { + if ($friendship->accepted) + { + $this->dispatchBrowserEvent('error', __('You are already friends with this user.')); + } + else if ($friendship->receiver_id == Auth::user()->id) + { + $this->dispatchBrowserEvent('error', __('You already have an incoming friend request from this user.')); + } + else + { + $this->dispatchBrowserEvent('error', __('You have already sent a friend request to this user.')); + } + + + return; + } + + if (RateLimiter::tooManyAttempts('submit-friend-request:' . Auth::user()->id, 1)) + { + $wait = RateLimiter::availableIn('submit-friend-request:' . Auth::user()->id); + $this->dispatchBrowserEvent('error', __('Please wait :time before sending another friend request.', ['time' => seconds2human($wait)])); + return; + } + + RateLimiter::hit('submit-friend-request:' . Auth::user()->id, 60); + + Friendship::create([ + 'requester_id' => Auth::user()->id, + 'receiver_id' => $this->user->id + ]); + } + + public function accept() + { + $friendship = Friendship::getMutual(Auth::user()->id, $this->user->id); + + if (is_null($friendship) || $friendship->receiver_id != Auth::user()->id) + { + $this->dispatchBrowserEvent('error', __('You don\'t currently have a pending friend request from this user.')); + return; + } + + if ($friendship->accepted) + { + $this->dispatchBrowserEvent('error', __('You are already friends with this user!')); + return; + } + + $friendship->update(['accepted' => true]); + } + + public function revoke() + { + $friendship = Friendship::getMutual(Auth::user()->id, $this->user->id); + + if (is_null($friendship)) + { + $this->dispatchBrowserEvent('error', __('You don\'t have an existing friend connection with this user.')); + return; + } + + $friendship->delete(); + } + + public function render() + { + $user = $this->user; + $friendship = Friendship::getMutual(Auth::user()->id, $this->user->id); + return view('livewire.users.friend-button', compact('user', 'friendship')); + } +} diff --git a/app/Http/Livewire/Users/Search.php b/app/Http/Livewire/Users/Search.php new file mode 100644 index 0000000..e6681b4 --- /dev/null +++ b/app/Http/Livewire/Users/Search.php @@ -0,0 +1,45 @@ + ['except' => ''], + ]; + + public function updatingSearch() + { + $this->resetPage(); + } + + public function render() + { + $users = User::search($this->search)->get(); + if (empty(trim($this->search))) + { + $users = $users->shuffle(); + } + + return view('livewire.users.search')->with('users', paginate($users, 12)); + } +} diff --git a/app/Http/Middleware/AdminGuard.php b/app/Http/Middleware/AdminGuard.php new file mode 100644 index 0000000..cb78486 --- /dev/null +++ b/app/Http/Middleware/AdminGuard.php @@ -0,0 +1,27 @@ +user()->may(Admin::roleset(), Admin::VIEW_PANEL)) + { + return abort(404); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..e9860bd --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,22 @@ +expectsJson()) + { + return route('login'); + } + } +} diff --git a/app/Http/Middleware/AuthenticateArbiter.php b/app/Http/Middleware/AuthenticateArbiter.php new file mode 100644 index 0000000..9e49145 --- /dev/null +++ b/app/Http/Middleware/AuthenticateArbiter.php @@ -0,0 +1,30 @@ +bearerToken())) + { + return abort(404); + } + + $game_server = GameServer::whereEncrypted('access_key', '=', $request->bearerToken())->firstOrFail(); + $request->merge(compact('game_server')); + + return $next($request); + } +} diff --git a/app/Http/Middleware/BlockBannedIpAddresses.php b/app/Http/Middleware/BlockBannedIpAddresses.php new file mode 100644 index 0000000..4764448 --- /dev/null +++ b/app/Http/Middleware/BlockBannedIpAddresses.php @@ -0,0 +1,32 @@ +environment('production')) + { + return $next($request); + } + + if (in_array($request->ip(), Cache::store('octane')->get('banned_ip_addresses') ?? [])) + { + return response()->make('Access Denied', 403); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..867695b --- /dev/null +++ b/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/EnsureEmailIsVerified.php b/app/Http/Middleware/EnsureEmailIsVerified.php new file mode 100644 index 0000000..9795b79 --- /dev/null +++ b/app/Http/Middleware/EnsureEmailIsVerified.php @@ -0,0 +1,43 @@ +route()->getName(), $whitelisted)) + { + return $next($request); + } + + if ($request->user() && !$request->user()->hasVerifiedEmail()) + { + return $request->expectsJson() ? abort(403, 'Your email address is not verified.') : redirect()->route('verification.notice'); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/IsBanned.php b/app/Http/Middleware/IsBanned.php new file mode 100644 index 0000000..31b4504 --- /dev/null +++ b/app/Http/Middleware/IsBanned.php @@ -0,0 +1,38 @@ +user()->isBanned() && !in_array(Route::currentRouteName(), $whitelist)) + { + return redirect()->route('account.disabled'); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/Localization.php b/app/Http/Middleware/Localization.php new file mode 100644 index 0000000..a982c3b --- /dev/null +++ b/app/Http/Middleware/Localization.php @@ -0,0 +1,28 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 0000000..eefa3aa --- /dev/null +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,34 @@ +check()) + { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/ToolGuard.php b/app/Http/Middleware/ToolGuard.php new file mode 100644 index 0000000..d6f515d --- /dev/null +++ b/app/Http/Middleware/ToolGuard.php @@ -0,0 +1,32 @@ +user()->isSuperAdmin()) + { + return abort(404); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..88cadca --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php new file mode 100644 index 0000000..bf494fe --- /dev/null +++ b/app/Http/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ + + */ + public function hosts(): array + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..3dedccf --- /dev/null +++ b/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ +|?string + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var int + */ + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; +} diff --git a/app/Http/Middleware/UpdateCurrentIpAddress.php b/app/Http/Middleware/UpdateCurrentIpAddress.php new file mode 100644 index 0000000..eddd626 --- /dev/null +++ b/app/Http/Middleware/UpdateCurrentIpAddress.php @@ -0,0 +1,27 @@ +user()->setLastIpAddress($request->ip()); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..9e86521 --- /dev/null +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Listeners/GameServer/AppendConsoleOutput.php b/app/Listeners/GameServer/AppendConsoleOutput.php new file mode 100644 index 0000000..c3a0c32 --- /dev/null +++ b/app/Listeners/GameServer/AppendConsoleOutput.php @@ -0,0 +1,19 @@ +game_server->appendToLog('console', [$event->severity, $event->timestamp, $event->output, $event->blur]); + } +} diff --git a/app/Listeners/GameServer/ChangeState.php b/app/Listeners/GameServer/ChangeState.php new file mode 100644 index 0000000..d8901aa --- /dev/null +++ b/app/Listeners/GameServer/ChangeState.php @@ -0,0 +1,19 @@ +game_server->setState($event->state); + } +} diff --git a/app/Listeners/GameServer/Ping.php b/app/Listeners/GameServer/Ping.php new file mode 100644 index 0000000..56fccfb --- /dev/null +++ b/app/Listeners/GameServer/Ping.php @@ -0,0 +1,19 @@ +game_server->ping(); + } +} diff --git a/app/Listeners/SendEmailVerificationNotification.php b/app/Listeners/SendEmailVerificationNotification.php new file mode 100644 index 0000000..029552a --- /dev/null +++ b/app/Listeners/SendEmailVerificationNotification.php @@ -0,0 +1,27 @@ +user instanceof MustVerifyEmail && ! $event->user->hasVerifiedEmail()) + { + $event->user->sendEmailVerificationNotification(); + } + } +} diff --git a/app/Models/Action.php b/app/Models/Action.php new file mode 100644 index 0000000..5a4d826 --- /dev/null +++ b/app/Models/Action.php @@ -0,0 +1,159 @@ + + */ + protected $fillable = [ + 'doer_id', + 'action', + 'target_id' + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'action' => Actions::class + ]; + + /** + * Log an action by an administrator. + * + * @var array + */ + public static function log($user, $action, $target = null) + { + if ($target) { + return self::create([ + 'doer_id' => $user->id, + 'action' => $action->value, + 'target_id' => $target->id + ]); + } else { + return self::create([ + 'doer_id' => $user->id, + 'action' => $action->value + ]); + } + } + + /** + * The person who had done the action. + */ + public function doer() + { + return $this->belongsTo(User::class, 'doer_id'); + } + + /** + * The person who had done the action. + */ + public function target() + { + return $this->belongsTo(User::class, 'action_user_id'); + } + + /** + * Format the localized log string properly. + */ + public function format() + { + $string = __($this->action->text()); + + if ($this->action == Actions::WarnedUser || + $this->action == Actions::PermBannedUser || + $this->action == Actions::PoisonBannedUser || + $this->action == Actions::PardonedUser) { + $user = User::where('id', '=', $this->target_id)->first(); + + if ($user) { + $name = $user->username; + + $string = __($this->action->text(), ['name' => $name]); + } else { + $string = __('Moderated a user.'); + } + } + + if ($this->action == Actions::ChangedUserPermissions) { + $user = User::where('id', '=', $this->target_id)->first(); + + if ($user) { + $name = $user->username; + + $string = __($this->action->text(), ['name' => $name]); + } else { + $string = __('Changed permissions for a user.'); + } + } + + if ($this->action == Actions::TempBannedUser) { + $ban = Ban::where('id', '=', $this->target_id)->first(); + + if ($ban) { + $name = $ban->user->username; + $date = $ban->expiry_date; + + $string = __($this->action->text(), ['name' => $name, 'date' => $date]); + } else { + $string = __('Moderated a user.'); + } + } + + if ($this->action == Actions::CreatedGameServer || + $this->action == Actions::DeletedGameServer || + $this->action == Actions::ModifiedGameServer) { + $gameServer = GameServer::where('id', '=', $this->target_id)->withTrashed()->first(); + + if ($gameServer) { + $ip_address = $gameServer->ip_address; + + $string = __($this->action->text(), ['ip' => $ip_address]); + } else { + $string = __('Modified a game server.'); + } + } + + if ($this->action == Actions::ApprovedAsset || + $this->action == Actions::DeniedAsset || + $this->action == Actions::ModeratedAsset) { + $asset = Asset::where('id', '=', $this->target_id)->withTrashed()->first(); + + if ($asset) { + $name = $asset->name; + $type = $asset->type; + $id = $asset->id; + + $string = __($this->action->text(), ['name' => $name, 'type' => $type, 'id' => $id]); + } else { + $string = __('Modified an asset.'); + } + } + + return $string; + } + + public function toSearchableArray() + { + return [ 'username' => $this->doer->username ]; + } +} diff --git a/app/Models/Asset.php b/app/Models/Asset.php new file mode 100644 index 0000000..1de90fb --- /dev/null +++ b/app/Models/Asset.php @@ -0,0 +1,185 @@ + + */ + protected $fillable = [ + 'name', + 'description', + 'type', + 'genre', + 'version_id', + 'image_id', + 'creator_id', + 'creator_type', + 'is_for_sale', + 'is_public_domain', + 'comments_enabled', + 'moderation', + 'price', + 'gear_attributes', + 'sales', + 'favorites', + 'upvotes', + 'downvotes', + + 'universe_id', + 'max_players', + 'client_version', + 'access', + 'chat_style', + 'is_start_place', + 'is_boosters_club_only', + 'visits' + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'type' => AssetType::class, + 'genre' => AssetGenre::class, + 'creator_type' => CreatorType::class, + ]; + + /** + * Gets the creator of this asset. + */ + public function creator() + { + return $this->belongsTo(User::class, 'creator_id'); + } + + /** + * Gets the current version of this asset. + */ + public function version() + { + return $this->belongsTo(AssetVersion::class, 'version_id'); + } + + /** + * Gets all the versions of this asset. + */ + public function versions() + { + return $this->hasMany(AssetVersion::class, 'asset_id'); + } + + /** + * Gets all the comments of this asset. + */ + public function comments() + { + return $this->hasMany(AssetComment::class, 'asset_id'); + } + + /** + * Gets all the owners of this asset. + */ + public function owners() + { + return $this->hasMany(AssetOwnership::class, 'asset_id'); + } + + /** + * Gets the asset ownership info of the current user. + * + * @return AssetOwnership + */ + public function ownership(): AssetOwnership + { + $userId = Auth::user()->id; + return $this->owners()->where('user_id', $userId)->first(); + } + + /** + * Checks if the current user can configure the asset. + * + * @return bool + */ + public function canConfigure(): bool + { + if ($this->creator_type == CreatorType::User) + { + return $this->creator_id == Auth::user()->id; + } + + return false; + } + + /** + * Initializes the asset on creation. + * + * @param string $file + * @param ?string $thumbnail_icon + */ + public function initialize(string $file, string $thumbnail_icon = null) + { + $this->createVersion($file, $thumbnail_icon); + $this->addOwner(Auth::user()->id); + } + + /** + * Creates a new version of the asset. + * A render request is made if no thumbnail icon is provided. + * + * @param string $file + * @param ?string $thumbnail_icon + * @return AssetVersion + */ + public function createVersion(string $file, string $thumbnail_icon = null): AssetVersion + { + $cdn_file_hash = Cdn::hash($file); + $cdn_thumbnail_icon_hash = Cdn::hash($thumbnail_icon); + + $lastVersion = AssetVersion::select('version')->where('asset_id', $this->id)->orderByDesc('id')->limit(1)->value('version') ?? 0; + + $assetVersion = AssetVersion::create([ + 'asset_id' => $this->id, + 'version' => $lastVersion + 1, + 'cdn_file_hash' => $cdn_file_hash, + 'cdn_thumbnail_icon_hash' => $cdn_thumbnail_icon_hash + ]); + + $this->update(['version_id' => $assetVersion->id]); + + // TODO: request thumbnail render if icon hash is not provided + + return $assetVersion; + } + + /** + * Adds a new owner of the asset. + * + * @param int $user_id + * @return AssetOwnership + */ + public function addOwner(int $user_id): AssetOwnership + { + return AssetOwnership::create([ + 'asset_id' => $this->id, + 'user_id' => $user_id + ]); + } +} diff --git a/app/Models/AssetComment.php b/app/Models/AssetComment.php new file mode 100644 index 0000000..1681cf3 --- /dev/null +++ b/app/Models/AssetComment.php @@ -0,0 +1,38 @@ + + */ + protected $fillable = [ + 'asset_id', + 'creator_id', + 'content' + ]; + + /** + * The asset associated with this comment. + */ + public function asset() + { + return $this->belongsTo(Asset::class, 'asset_id'); + } + + /** + * The user associated with this comment. + */ + public function user() + { + return $this->belongsTo(User::class, 'creator_id'); + } +} diff --git a/app/Models/AssetOwnership.php b/app/Models/AssetOwnership.php new file mode 100644 index 0000000..f89846c --- /dev/null +++ b/app/Models/AssetOwnership.php @@ -0,0 +1,38 @@ + + */ + protected $fillable = [ + 'asset_id', + 'user_id', + 'wearing' + ]; + + /** + * Gets the asset that's owned. + */ + public function asset() + { + return $this->belongsTo(Asset::class, 'asset_id'); + } + + /** + * Gets the user that owns the asset. + */ + public function user() + { + return $this->belongsTo(User::class, 'user_id'); + } +} diff --git a/app/Models/AssetVersion.php b/app/Models/AssetVersion.php new file mode 100644 index 0000000..f6316e4 --- /dev/null +++ b/app/Models/AssetVersion.php @@ -0,0 +1,53 @@ + + */ + protected $fillable = [ + 'asset_id', + 'version', + 'cdn_thumbnail_icon_hash', + 'cdn_thumbnail_widescreen_hash', + 'cdn_file_hash' + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'cdn_thumbnail_icon_hash', + 'cdn_thumbnail_widescreen_hash', + 'cdn_file_hash' + ]; + + /** + * The asset associated with this version. + */ + public function asset() + { + return $this->belongsTo(Asset::class, 'asset_id'); + } + + /** + * The thumbnail of this version. + * + * @param bool $widescreen + * @return string + */ + public function thumbnail(bool $widescreen = false): string + { + return Cdn::getUrl(sprintf('%s.png', $this->cdn_thumbnail_icon_hash), $widescreen); + } +} diff --git a/app/Models/Badge.php b/app/Models/Badge.php new file mode 100644 index 0000000..2090d33 --- /dev/null +++ b/app/Models/Badge.php @@ -0,0 +1,27 @@ + + */ + protected $fillable = [ + 'name', + 'description', + ]; + + /** + * Gets the creator of this badge. + */ + public function creator() + { + return $this->belongsTo(User::class, 'creator'); + } +} diff --git a/app/Models/Ban.php b/app/Models/Ban.php new file mode 100644 index 0000000..df347d8 --- /dev/null +++ b/app/Models/Ban.php @@ -0,0 +1,170 @@ + + */ + protected $fillable = [ + 'moderator_id', + 'user_id', + 'internal_reason', + 'moderator_note', + 'offensive_item', + 'expiry_date', + 'is_appealable', + 'is_poison_ban', + 'patient_zero', + 'is_warning', + 'has_been_pardoned', + 'pardon_internal_reason', + 'pardoner_id', + 'is_active', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'expiry_date' => 'datetime' + ]; + + /** + * Poisons the ban by banning the IP addresses and users of this account and all accounts associated with it. + */ + public function poison() + { + if (count($this->poisonedIpAddresses) != 0) + { + return; + } + + $this->update([ + 'is_poison_ban' => true, + 'patient_zero' => $this->user_id, + ]); + + PoisonedIpAddress::create([ + 'ip_address' => $this->user->register_ip_address, + 'tied_to' => $this->id, + ]); + + PoisonedIpAddress::create([ + 'ip_address' => $this->user->last_ip_address, + 'tied_to' => $this->id, + ]); + + foreach ($this->user->getAssociatedAccounts() as $user) + { + $user->update(['current_ban_id' => $this->id]); + + PoisonedIpAddress::create([ + 'ip_address' => '127.0.0.1', + 'tied_to' => $this->id, + ]); + + PoisonedIpAddress::create([ + 'ip_address' => $user->register_ip, + 'tied_to' => $this->id, + ]); + } + } + + /** + * Unpoisons the ban. + */ + public function cure() + { + if (!$this->is_poison_ban) + { + return; + } + + foreach ($this->poisonedIpAddresses as $ip_address) + { + $ip_address->delete(); + } + + foreach ($this->user->getAssociatedAccounts() as $user) + { + $user->update(['current_ban_id' => null]); + } + } + + /** + * The IP addresses associated with this ban that are not allowed to create an account. + */ + public function poisonedIpAddresses() + { + return $this->hasMany(PoisonedIpAddress::class, 'tied_to', 'id'); + } + + /** + * Lifts the ban. If this is a poison ban, the ban gets cured. + */ + public function lift() + { + $this->update([ + 'is_active' => false + ]); + + $this->user->update([ + 'current_ban_id' => null + ]); + + if ($this->is_poison_ban) + { + $this->cure(); + } + } + + /** + * The user that has been banned. + */ + public function user() + { + return $this->hasOne(User::class, 'id', 'user_id'); + } + + /** + * The moderator that performed this ban. + */ + public function moderator() + { + return $this->hasOne(User::class, 'id', 'moderator_id'); + } + + /** + * The moderator that pardoned this ban (if any.) + */ + public function pardoner() + { + return $this->hasOne(User::class, 'id', 'pardoner_id'); + } + + /** + * The user that was originally poisoned banned associated with this ban. + */ + public function patientZero() + { + return $this->hasOne(User::class, 'id', 'patient_zero'); + } + + public function toSearchableArray() + { + return [ 'username' => $this->user->username ]; + } +} diff --git a/app/Models/ForumCategory.php b/app/Models/ForumCategory.php new file mode 100644 index 0000000..82b32d1 --- /dev/null +++ b/app/Models/ForumCategory.php @@ -0,0 +1,41 @@ + + */ + protected $fillable = [ + 'name', + 'description', + 'priority', + 'color', + 'superadmins_only' + ]; + + /** + * The threads that belong to this category. + */ + public function threads() + { + return $this->hasMany(ForumThread::class, 'category_id'); + } + + /** + * The threads that belong to this category. + */ + public function replies() + { + return $this->hasMany(ForumReply::class, 'category_id'); + } +} diff --git a/app/Models/ForumReply.php b/app/Models/ForumReply.php new file mode 100644 index 0000000..1f1cbac --- /dev/null +++ b/app/Models/ForumReply.php @@ -0,0 +1,36 @@ + + */ + protected $fillable = [ + 'body', + 'author_id', + 'thread_id', + 'stickied' + ]; + + /** + * The author of this thread. + */ + public function author() + { + return $this->belongsTo(User::class, 'author_id'); + } + + public function thread() + { + return $this->belongsTo(ForumThread::class, 'thread_id'); + } +} diff --git a/app/Models/ForumThread.php b/app/Models/ForumThread.php new file mode 100644 index 0000000..5589bd9 --- /dev/null +++ b/app/Models/ForumThread.php @@ -0,0 +1,50 @@ + + */ + protected $fillable = [ + 'title', + 'body', + 'author_id', + 'category_id', + 'stickied', + 'locked', + 'views' + ]; + + /** + * The author of this thread. + */ + public function author() + { + return $this->belongsTo(User::class, 'author_id'); + } + + /** + * The category this thread belongs to. + */ + public function category() + { + return $this->belongsTo(ForumCategory::class, 'category_id'); + } + + /** + * The replies of this thread. + */ + public function replies() + { + return $this->hasMany(ForumReply::class, 'thread_id'); + } +} diff --git a/app/Models/Friendship.php b/app/Models/Friendship.php new file mode 100644 index 0000000..8d54f5f --- /dev/null +++ b/app/Models/Friendship.php @@ -0,0 +1,50 @@ + + */ + protected $fillable = [ + 'requester_id', + 'receiver_id', + 'accepted' + ]; + + /** + * Gets a mutual relationship between two users. + * + * @param int $firstUserId + * @param int $secondUserId + * @return Friendship + */ + public static function getMutual(int $firstUserId, int $secondUserId) + { + return self::whereIn('requester_id', [$firstUserId, $secondUserId])->whereIn('receiver_id', [$firstUserId, $secondUserId])->first(); + } + + /** + * The user that made the friend request. + */ + public function requester() + { + return $this->belongsTo(User::class, 'requester_id'); + } + + /** + * The user that received the friend request. + */ + public function receiver() + { + return $this->belongsTo(User::class, 'receiver_id'); + } +} diff --git a/app/Models/GameServer.php b/app/Models/GameServer.php new file mode 100644 index 0000000..86d1d13 --- /dev/null +++ b/app/Models/GameServer.php @@ -0,0 +1,293 @@ + + */ + protected $fillable = [ + 'uuid', + 'access_key', + 'ip_address', + 'port', + 'maximum_place_jobs', + 'maximum_thumbnail_jobs', + 'is_set_up', + 'has_vnc', + 'vnc_port', + 'vnc_password', + 'friendly_name', + 'utc_offset', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'access_key', + 'access_key_index', + 'ip_address', + 'ip_address_index', + 'vnc_port', + 'vnc_password', + 'friendly_name', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'access_key' => CipherSweetEncrypted::class, + 'ip_address' => CipherSweetEncrypted::class, + 'vnc_port' => 'encrypted', + 'vnc_password' => 'encrypted', + 'friendly_name' => 'encrypted', + ]; + + /** + * Unformatted log keys for any game server. + * + * @return array + */ + public static array $logKeys = [ + 'console' => 'game_server_logs_%s', + 'ram' => 'game_server_ram_usage_%s', + 'cpu' => 'game_server_cpu_usage_%s', + 'network' => 'game_server_network_usage_%s', + 'access' => 'game_server_access_%s', + 'state' => 'game_server_state_%s', + ]; + + /** + * Gets a log key associated for this game server. + * + * @param string $key + * @return ?string + */ + public function logKey(string $key): ?string + { + if (empty(self::$logKeys[$key])) + { + return null; + } + + return sprintf(self::$logKeys[$key], $this->uuid); + } + + /** + * Initializes all logs keys. + */ + public function initLogKeys() + { + foreach (array_keys(self::$logKeys) as $key) + { + Cache::put($this->logKey($key), null); + } + } + + /** + * Updates the state last ping. + */ + public function ping() + { + Cache::put($this->logKey('state'), [ + 'last_ping' => time(), + 'state' => GameServerState::Online + ]); + } + + /** + * The complete log of this game server. + * + * @param string $key + * @return mixed + */ + public function retrieveCompleteLog(string $key): mixed + { + return Cache::get($this->logKey($key)); + } + + /** + * Appends to one of the log files of this game server. + * + * @param string $key + * @param mixed $message + */ + public function appendToLog(string $key, mixed $message) + { + $lock = Cache::lock($this->logKey($key), 10); + + try + { + $lock->block(5); + + $log = $this->retrieveCompleteLog($key); + if (empty($log)) + { + $log = []; + } + + $timestamp = time(); + + $log['latest'] = $timestamp; + $log[$timestamp] = $message; + + Cache::put($this->logKey($key), $log); + + $lock->release(); + } + finally + { + optional($lock)->release(); + } + } + + /** + * Gets the latest log entry of this game server for a given key. + * + * @param string $key + * @return mixed + */ + public function getLatestLogEntry(string $key): mixed + { + $log = $this->retrieveCompleteLog($key); + + return $log[$log['latest']]; + } + + /** + * Wipes all the logs of this game server. + */ + public function wipeLogs() + { + foreach (array_keys(self::$logKeys) as $key) + { + Cache::forget($this->logKey($key)); + } + + $this->initLogKeys(); + } + + /** + * Wipes a specific log file for this game server. + * + * @param string $key + */ + public function wipeLog(string $key) + { + Cache::forget($this->logKey($key)); + } + + /** + * The places this game server is allowed to access. + * + * @return array + */ + public function allowedPlaces(): array + { + return Cache::get($this->logKey('access')) ?? []; + } + + /** + * Allows this game server to access a place. + * + * @param int $place_id + */ + public function allow(int $place_id) + { + $access = $this->allowedPlaces(); + $access[] = $place_id; + + Cache::store($this->logKey('access')); + } + + /** + * Gets the current state of this game server. + * + * @return GameServerState + */ + public function state(): GameServerState + { + if (is_null($state = Cache::get($this->logKey('state')))) + { + $this->setState(GameServerState::Offline); + return GameServerState::Offline; + } + + if ($state['state'] == GameServerState::Online && (time() - $state['last_ping']) >= 60) + { + $this->setState(GameServerState::Offline); + return GameServerState::Offline; + } + + return $state['state']; + } + + /** + * Sets the current state of this game server. + * + * @param GameServerState $state + */ + public function setState(GameServerState $state) + { + if ($state == GameServerState::Offline) + { + $this->wipeLogs(); + } + + Cache::put($this->logKey('state'), [ + 'last_ping' => time(), + 'state' => $state + ]); + } + + /** + * Gets all running place jobs of this game server. + * + * @return array + */ + public function getRunningPlaceJobs(): array + { + return []; + } + + /** + * Gets all running thumbnail jobs of this game server. + * + * @return array + */ + public function getRunningThumbnailJobs(): array + { + return []; + } + + /** + * Generates a random access key. + * + * @return string + */ + public static function generateAccessKey(): string + { + return bin2hex(random_bytes(32)); + } +} diff --git a/app/Models/InviteKey.php b/app/Models/InviteKey.php new file mode 100644 index 0000000..419a572 --- /dev/null +++ b/app/Models/InviteKey.php @@ -0,0 +1,87 @@ + + */ + protected $fillable = [ + 'creator_id', + 'token', + 'uses', + 'max_uses', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'token', + 'token_index', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'token' => CipherSweetEncrypted::class, + ]; + + /** + * The creator of this invite key. + */ + public function creator() + { + return $this->belongsTo(User::class, 'creator_id'); + } + + /** + * Uses this invite key once. + */ + public function use() + { + $this->update(['uses' => $this->uses + 1]); + } + + /** + * Whether or not this invite key is valid. + * + * @return bool + */ + public function isValid(): bool + { + return $this->uses < $this->max_uses; + } + + /** + * Generates a new invite key and returns the token for it. + * + * @param int $creator_id + * @param int $max_uses + * @return string + */ + public static function generate(int $creator_id, int $max_uses): string + { + $token = uuid(); + + self::create(compact('creator_id', 'token', 'max_uses')); + + return $token; + } +} diff --git a/app/Models/IpAddressBan.php b/app/Models/IpAddressBan.php new file mode 100644 index 0000000..3523ea4 --- /dev/null +++ b/app/Models/IpAddressBan.php @@ -0,0 +1,77 @@ + + */ + protected $fillable = [ + 'ip_address', + 'moderator_id', + 'criterium', + 'pardoner_id', + 'has_been_pardoned', + 'internal_reason', + 'is_active', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'ip_address' => CipherSweetEncrypted::class, + 'criterium' => 'encrypted', + ]; + + /** + * The event map for the model. + * + * @var array + */ + protected $dispatchesEvents = [ + 'saved' => IpAddressBanModified::class, + 'updated' => IpAddressBanModified::class, + 'deleting' => IpAddressBanModified::class, + 'deleted' => IpAddressBanModified::class, + ]; + + /** + * Gets the moderator of this IP address ban. + */ + public function moderator() + { + return $this->belongsTo(User::class, 'moderator_id'); + } + + /** + * Gets the moderator who pardoned this IP address ban (if any.) + */ + public function pardoner() + { + return $this->belongsTo(User::class, 'pardoner_id'); + } + + /** + * Lifts the IP address ban. + */ + public function lift() + { + $this->update([ + 'is_active' => false + ]); + } +} diff --git a/app/Models/PlaceJob.php b/app/Models/PlaceJob.php new file mode 100644 index 0000000..86a4eea --- /dev/null +++ b/app/Models/PlaceJob.php @@ -0,0 +1,10 @@ + + */ + protected $fillable = [ + 'ip_address', + 'tied_to', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'ip_address', + 'ip_address_index', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'ip_address' => CipherSweetEncrypted::class, + ]; +} diff --git a/app/Models/Status.php b/app/Models/Status.php new file mode 100644 index 0000000..0f01de0 --- /dev/null +++ b/app/Models/Status.php @@ -0,0 +1,30 @@ + + */ + protected $fillable = [ + 'creator_id', + 'creator_type', + 'content' + ]; + + /** + * The creator of this status. + */ + public function creator() + { + return $this->belongsTo(User::class, 'creator_id'); + } +} diff --git a/app/Models/ThumbnailJob.php b/app/Models/ThumbnailJob.php new file mode 100644 index 0000000..27daac4 --- /dev/null +++ b/app/Models/ThumbnailJob.php @@ -0,0 +1,10 @@ + + */ + protected $fillable = [ + 'creator_id', + 'creator_type', + 'start_place_id', + 'name', + 'version', + 'privileges', + 'privacy', + 'unlisted' + ]; + + /** + * The creator of this universe. + */ + public function creator() + { + return $this->belongsTo(User::class, 'creator_id'); + } + + /** + * The start place of this universe. + */ + public function start_place() + { + return $this->belongsTo(Asset::class, 'start_place_id'); + } +} diff --git a/app/Models/User.php b/app/Models/User.php new file mode 100644 index 0000000..3c92a86 --- /dev/null +++ b/app/Models/User.php @@ -0,0 +1,683 @@ + + */ + protected $fillable = [ + 'username', + 'past_usernames', + 'blurb', + 'email', + 'password', + 'last_ip_address', + 'register_ip_address', + 'activity', + 'current_ban_id', + 'permissions', + 'superadmin', + 'discord_id', + 'current_status_id', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'email', + 'email_index', + 'password', + 'register_ip_address', + 'register_ip_address_index', + 'last_ip_address', + 'last_ip_address_index', + 'remember_token', + 'discord_id', + 'discord_id_index', + 'discord_linked_at', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'past_usernames' => 'array', + 'email' => CipherSweetEncrypted::class, + 'email_verified_at' => 'datetime', + 'register_ip_address' => CipherSweetEncrypted::class, + 'last_ip_address' => CipherSweetEncrypted::class, + 'activity' => 'array', + 'permissions' => 'array', + 'discord_id' => CipherSweetEncrypted::class, + 'discord_linked_at' => 'datetime', + ]; + + /** + * Sends an account security notification to the email address associated with this account. + * + * @param string $what + * @param string $ip_address + * @param string $userAgent + */ + private function securityNotification(string $what, string $ip_address, string $userAgent) + { + $this->notify(new AccountSecurityNotification( + $what, + $ip_address, + $userAgent, + $this + )); + } + + /** + * Whether or not the user is online on a given place. + * + * @param string $place + * @return bool + */ + public function isOnline(string $place): bool + { + return is_online($this->activity[$place]); + } + + /** + * The timestamp of when the user was last seen on a given place. + * + * @param string $place + * @return int + */ + public function lastSeen(string $place): int + { + return $this->activity[$place]; + } + + /** + * The amount of seconds relative to when the user was last seen on a given place. + * + * @param string $place + * @return int + */ + public function lastSeenRelative(string $place): int + { + return time() - $this->activity[$place]; + } + + /** + * If the user has enough money to perform a given purchase. + * + * @param int $amount + * @return bool + */ + public function hasEnoughMoney(int $amount): bool + { + return true; + } + + /** + * Spends a certain amount of the users account balance on a given item or thing. + * + * @param int $amount + * @param mixed $on + */ + public function spend(int $amount, mixed $on) + { + + } + + /** + * Gets the current Discord account for this user. + * + * @return ?DiscordUser + */ + public function discordAccount(): ?DiscordUser + { + if (is_null($this->discord_id)) + { + return null; + } + + return new DiscordUser($this->discord_id); + } + + /** + * Gets this users current status. + */ + public function status() + { + return $this->hasOne(Status::class, 'creator_id', 'current_status_id'); + } + + /** + * Sets this users current status. + * + * @param Status $status + */ + public function updateStatus(Status $status) + { + $this->update(['current_status_id' => $status->id]); + } + + /** + * Gets the users friends. + * + * @return Collection + */ + public function friends(): Collection + { + return Friendship::where(function ($query) { + $query->where('requester_id', $this->id)->orWhere('receiver_id', $this->id); + })->where('accepted', true)->get(); + } + + /** + * Gets the users incoming friend requests. + * + * @return Collection + */ + public function friendRequests(): Collection + { + return Friendship::where(function ($query) { + $query->Where('receiver_id', $this->id); + })->where('accepted', false)->get(); + } + + /** + * The user's threads. + */ + public function threads() + { + return $this->hasMany(ForumThread::class, 'author_id'); + } + + /** + * The user's replies. + */ + public function replies() + { + return $this->hasMany(ForumReply::class, 'author_id'); + } + + /** + * Updates this user's username. + * + * @param string $new_username + * @param string $ip_address + * @param string $user_agent + */ + public function updateUsername(string $new_username, string $ip_address, string $user_agent) + { + $this->spend(config('tadah.username_change_cost'), sprintf('Username change from %s to %s', $this->username, $new_username)); + + $this->securityNotification( + sprintf('Your username has been changed to **%s** for **%s %s**.', $new_username, config('tadah.username_change_cost'), config('tadah.currency_name')), + $ip_address, + $user_agent + ); + + $history = $this->past_usernames ?? (object) []; + $history[$this->username] = time(); + $this->update(['past_usernames' => $history]); + + $this->update(['username' => $new_username]); + } + + /** + * Updates this user's email address. + * + * @param string $new_email + * @param string $ip_address + * @param string $user_agent + */ + public function updateEmail(string $new_email, string $ip_address, string $user_agent) + { + $this->securityNotification('Your email has been changed to **' . $new_email. '**.', $ip_address, $user_agent); + $this->update(['email' => $new_email, 'email_verified_at' => null]); + } + + /** + * Updates this user's password. + * + * @param string $new_password + * @param string $ip_address + * @param string $user_agent + * @param ?string $current_password + */ + public function updatePassword(string $new_password, string $ip_address, string $user_agent, ?string $current_password = null) + { + $this->securityNotification('Your password has been reset.', $ip_address, $user_agent); + + if (is_null($current_password)) + { + Auth::logoutOtherDevices($current_password); + } + + $this->forceFill([ + 'password' => Hash::make($new_password) + ])->setRememberToken(Str::random(60)); + + $this->save(); + } + + /** + * Whether or not this username has ever changed their username in the past. + * + * @return bool + */ + public function hasChangedUsername(): bool + { + return !empty($this->past_usernames); + } + + /** + * Gets the most recent usernames of this user's username change history. + * + * @param int $amount = 3 + * @return array + */ + public function mostRecentUsernames(int $amount = 3): array + { + if (!$this->hasChangedUsername()) + { + return [ $this->username ]; + } + + // flip it so that it changes from "username" => "timestamp" + $flipped = array_flip($this->past_usernames); + $timestamps = array_keys($flipped); + + // sort the timestamps, so we get the newest usernames first + sort($timestamps); + $chunk = array_slice($timestamps, 0, $amount); + + // now, using the flipped array, access the top timestamps to get our username + $usernames = []; + for ($i = 0; $i < $amount; $i++) + { + if (!isset($chunk[$i])) + { + break; + } + + $usernames[] = $flipped[$chunk[$i]]; + } + + return $usernames; + } + + /** + * Gets the most recent username from the username change history. + * + * @return string + */ + public function mostRecentUsername(): string + { + return $this->mostRecentUsernames(1)[0]; + } + + /** + * Whether or not this user is permitted to do a certain action. + * + * @param string $roleset + * @param int $flag + * @param bool $forget_superadmin = false + * @return bool + */ + public function may(string $roleset, int $flag, bool $forget_superadmin = false): bool + { + return ($this->permissions[$roleset] & $flag) != 0 || (!$forget_superadmin && $this->isSuperAdmin()); + } + + /** + * Allows this user to do something on a specific roleset. + * + * @param string $roleset + * @param int $flag + */ + public function allow(string $roleset, int $flag) + { + $permissions = $this->permissions; + $permissions[$roleset] &= $flag; + + $this->update(['permissions', $permissions]); + } + + /** + * Removes a permission from this user's roleset. + * + * @param string $roleset + * @param int $flag + */ + public function deny(string $roleset, int $flag) + { + $this->allow($roleset, ~$flag); + } + + /** + * Whether or not this user is a superadmin. + * + * @return bool + */ + public function isSuperAdmin(): bool + { + return $this->superadmin === true; + } + + /** + * Whether or not this user is banned. + * + * @return bool + */ + public function isBanned(): bool + { + if (!is_null($this->current_ban_id)) + { + if ($this->ban->is_active) + { + return true; + } + } + + return false; + } + + /** + * The current ban associated with this user (if any.) + */ + public function ban() + { + return $this->belongsTo(Ban::class, 'current_ban_id'); + } + + /** + * Punishes another user. + * + * @param User $user + * @param array $data + */ + public function punish(User $user, array $data) + { + $ban = Ban::create(array_merge([ + 'moderator_id' => $this->id, + 'user_id' => $user->id, + ], $data)); + + $user->update(['current_ban_id' => $ban->id]); + + return $ban; + } + + /** + * Pardons another user. + * + * @param User $user + * @param string $internal_reason + */ + public function pardon(User $user, string $internal_reason) + { + $user->ban->update([ + 'has_been_pardoned' => true, + 'pardoner_id' => $this->id, + 'pardon_internal_reason' => $internal_reason, + ]); + + $user->ban->lift(); + } + + /** + * Pardons an IP address ban. + * + * @param IpAddressBan $ip_address_ban + */ + public function pardonIpAddressBan(IpAddressBan $ip_address_ban) + { + $ip_address_ban->update([ + 'has_been_pardoned' => true, + 'pardoner_id' => $this->id, + ]); + + $ip_address_ban->lift(); + } + + /** + * All associated accounts with this user. + * + * @return mixed + */ + public function getAssociatedAccounts(): mixed + { + return self::whereEncrypted('register_ip_address', '=', $this->register_ip_address) + ->orWhereEncrypted('last_ip_address', '=', $this->last_ip_address); + } + + /** + * Whether or not this user has linked a Discord account yet. + * + * @return bool + */ + public function hasLinkedDiscordAccount(): bool + { + return !is_null($this->discord_id) && !is_null($this->discord_linked_at); + } + + /** + * Whether or not this user has verified their email address. + * + * @return bool + */ + public function hasVerifiedEmail(): bool + { + return !is_null($this->email_verified_at); + } + + /** + * Links a Discord account to this user. + * + * @param int $discord_id + */ + public function linkDiscordAccount(int $discord_id) + { + $this->update([ + 'discord_id' => $discord_id, + 'discord_linked_at' => now() + ]); + } + + /** + * Unlinks the currently linked Discord account. + */ + public function unlinkDiscordAccount() + { + $this->update([ + 'discord_id' => null, + 'discord_linked_at' => null + ]); + } + + /** + * Forcefully sets the permissions object of this user. + * + * @param object|array $permissions + */ + public function forceSetPermissions(object|array $permissions) + { + $this->update(compact('permissions')); + } + + /** + * Sets the last IP address of this user. + * + * @param string $ip_address + */ + public function setLastIpAddress(string $ip_address) + { + $this->update([ + 'last_ip_address' => $ip_address + ]); + } + + /** + * The default activity to be used on any given user. + * + * @return array + */ + public static function defaultActivity(): array + { + $activity = []; + + foreach (['website', 'studio'] as $place) + { + $activity[$place] = time(); + } + + return $activity; + } + + /** + * The default permissions to be used on any given user. + * + * @return array + */ + public static function defaultPermissions(): array + { + $permissions = []; + $rolesets = Roles::allRolesets(); + + foreach ($rolesets as $roleset) + { + $flags = 0; + + switch ($roleset) + { + case Places::roleset(): + $flags |= Places::CREATION; + break; + case SelfHostedServers::roleset(): + $flags |= SelfHostedServers::CREATION; + break; + case Economy::roleset(): + $flags |= Economy::CREATE_ASSETS + | Economy::SELL_ASSETS + | Economy::COMMENTS; + break; + case Users::roleset(): + $flags |= Users::UPDATE_BLURB + | Users::SEND_FRIEND_REQUESTS + | Users::SEND_MESSAGES + | Users::VIEW_BAN_HISTORY; + break; + case Forums::roleset(): + $flags |= Forums::CREATE_THREADS + | Forums::CREATE_REPLIES; + break; + } + + $permissions[$roleset] = $flags; + } + + return $permissions; + } + + /** + * Creates a new user. + * + * @param object|array $input + * @param string $ip_address + * + * @return User + */ + public static function register($input, $ip_address) + { + if (!is_object($input)) + { + $input = (object) $input; + } + + if (config('tadah.invite_keys_required')) + { + if (is_null($input->key)) + { + throw new \Exception('Invite key required'); + } + + $invite_key = InviteKey::whereEncrypted('token', '=', $input->key)->first(); + $invite_key->use(); + } + + $user = self::create([ + 'username' => $input->username, + 'email' => $input->email, + 'password' => Hash::make($input->password), + 'last_ip_address' => $ip_address, + 'register_ip_address' => $ip_address, + 'activity' => self::defaultActivity(), + 'permissions' => self::defaultPermissions(), + ]); + + Auth::login($user); + event(new Registered($user)); + + return $user; + } + + /** + * Create a factory of users for testing + * + * @return \Illuminate\Database\Eloquent\Factories\Factory + */ + protected static function factory() + { + return UserFactory::new(); + } + + /** + * Searchable fields + * + * @return array + */ + public function toSearchableArray() + { + return [ + 'username' => $this->username, + ]; + } +} diff --git a/app/Notifications/AccountSecurityNotification.php b/app/Notifications/AccountSecurityNotification.php new file mode 100644 index 0000000..86f7f87 --- /dev/null +++ b/app/Notifications/AccountSecurityNotification.php @@ -0,0 +1,126 @@ +what = $what; + $this->ip_address = $ip_address; + $this->user_agent = $user_agent; + $this->user = $user; + } + + /** + * The password broker used for account resets. + */ + protected function broker() + { + return Password::broker(config('fortify.passwords')); + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via(mixed $notifiable): array + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + $token = ''; + + $this->broker()->sendResetLink(['email' => $this->user->getRawOriginal('email')], function ($_, $_token) use (&$token) { + $token = $_token; + }); + + $details = ''; + + if (($location = geolocate($this->ip_address)) !== false) + { + $details = sprintf('This action occurred from %s, %s (IP: %s) on device "%s".', $location->territory, $location->country, $this->ip_address, $this->user_agent); + } + else + { + $details = sprintf('This action occurred from IP "%s" on device "%s".', $this->ip_address, $this->user_agent); + } + + $link = route('password.reset', ['token' => $token]) . '?email=' . urlencode($this->user->email); + + return (new MailMessage) + ->subject('Important Security Notification for ' . $this->user->username) + ->greeting('Hello!') + ->line($this->what) + ->line($details) + ->line('If this wasn\'t you, reset your password now.') + ->action('Reset Password', $link); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray(mixed $notifiable): array + { + return [ + 'what' => $this->what, + 'ip_address' => $this->ip_address, + 'user_agent' => $this->user_agent, + 'user' => $this->user->id + ]; + } +} diff --git a/app/Proto/AssetType.php b/app/Proto/AssetType.php new file mode 100644 index 0000000..f06ee54 --- /dev/null +++ b/app/Proto/AssetType.php @@ -0,0 +1,73 @@ +Tadah.AssetType + */ +class AssetType +{ + /** + * Generated from protobuf enum CLOTHING = 0; + */ + const CLOTHING = 0; + /** + * Generated from protobuf enum HEAD = 1; + */ + const HEAD = 1; + /** + * Generated from protobuf enum MESH = 2; + */ + const MESH = 2; + /** + * Generated from protobuf enum PLACE = 3; + */ + const PLACE = 3; + /** + * Generated from protobuf enum USER = 4; + */ + const USER = 4; + /** + * Generated from protobuf enum HEADSHOT = 5; + */ + const HEADSHOT = 5; + /** + * Generated from protobuf enum XML = 6; + */ + const XML = 6; + + private static $valueToName = [ + self::CLOTHING => 'CLOTHING', + self::HEAD => 'HEAD', + self::MESH => 'MESH', + self::PLACE => 'PLACE', + self::USER => 'USER', + self::HEADSHOT => 'HEADSHOT', + self::XML => 'XML', + ]; + + public static function name($value) + { + if (!isset(self::$valueToName[$value])) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no name defined for value %s', __CLASS__, $value)); + } + return self::$valueToName[$value]; + } + + + public static function value($name) + { + $const = __CLASS__ . '::' . strtoupper($name); + if (!defined($const)) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no value defined for name %s', __CLASS__, $name)); + } + return constant($const); + } +} + diff --git a/app/Proto/ClientVersion.php b/app/Proto/ClientVersion.php new file mode 100644 index 0000000..5100116 --- /dev/null +++ b/app/Proto/ClientVersion.php @@ -0,0 +1,53 @@ +Tadah.ClientVersion + */ +class ClientVersion +{ + /** + * Generated from protobuf enum NONE = 0; + */ + const NONE = 0; + /** + * Generated from protobuf enum TAIPEI = 2011; + */ + const TAIPEI = 2011; + /** + * Generated from protobuf enum TAMPA = 2016; + */ + const TAMPA = 2016; + + private static $valueToName = [ + self::NONE => 'NONE', + self::TAIPEI => 'TAIPEI', + self::TAMPA => 'TAMPA', + ]; + + public static function name($value) + { + if (!isset(self::$valueToName[$value])) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no name defined for value %s', __CLASS__, $value)); + } + return self::$valueToName[$value]; + } + + + public static function value($name) + { + $const = __CLASS__ . '::' . strtoupper($name); + if (!defined($const)) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no value defined for name %s', __CLASS__, $name)); + } + return constant($const); + } +} + diff --git a/app/Proto/Operation.php b/app/Proto/Operation.php new file mode 100644 index 0000000..def5429 --- /dev/null +++ b/app/Proto/Operation.php @@ -0,0 +1,73 @@ +Tadah.Operation + */ +class Operation +{ + /** + * Generated from protobuf enum OPEN_JOB = 0; + */ + const OPEN_JOB = 0; + /** + * Generated from protobuf enum CLOSE_JOB = 1; + */ + const CLOSE_JOB = 1; + /** + * Generated from protobuf enum EXECUTE_SCRIPT = 2; + */ + const EXECUTE_SCRIPT = 2; + /** + * Generated from protobuf enum RENEW_TAMPA_JOB_LEASE = 3; + */ + const RENEW_TAMPA_JOB_LEASE = 3; + /** + * Generated from protobuf enum CLOSE_ALL_JOBS = 4; + */ + const CLOSE_ALL_JOBS = 4; + /** + * Generated from protobuf enum CLOSE_ALL_TAMPA_PROCESSES = 5; + */ + const CLOSE_ALL_TAMPA_PROCESSES = 5; + /** + * Generated from protobuf enum THUMBNAIL = 6; + */ + const THUMBNAIL = 6; + + private static $valueToName = [ + self::OPEN_JOB => 'OPEN_JOB', + self::CLOSE_JOB => 'CLOSE_JOB', + self::EXECUTE_SCRIPT => 'EXECUTE_SCRIPT', + self::RENEW_TAMPA_JOB_LEASE => 'RENEW_TAMPA_JOB_LEASE', + self::CLOSE_ALL_JOBS => 'CLOSE_ALL_JOBS', + self::CLOSE_ALL_TAMPA_PROCESSES => 'CLOSE_ALL_TAMPA_PROCESSES', + self::THUMBNAIL => 'THUMBNAIL', + ]; + + public static function name($value) + { + if (!isset(self::$valueToName[$value])) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no name defined for value %s', __CLASS__, $value)); + } + return self::$valueToName[$value]; + } + + + public static function value($name) + { + $const = __CLASS__ . '::' . strtoupper($name); + if (!defined($const)) { + throw new UnexpectedValueException(sprintf( + 'Enum %s has no value defined for name %s', __CLASS__, $name)); + } + return constant($const); + } +} + diff --git a/app/Proto/Response.php b/app/Proto/Response.php new file mode 100644 index 0000000..6fcffdf --- /dev/null +++ b/app/Proto/Response.php @@ -0,0 +1,139 @@ +Tadah.Response + */ +class Response extends \Google\Protobuf\Internal\Message +{ + /** + * Generated from protobuf field .Tadah.Operation operation = 1; + */ + protected $operation = 0; + /** + * Generated from protobuf field bool success = 2; + */ + protected $success = false; + /** + * Generated from protobuf field string message = 3; + */ + protected $message = ''; + /** + * Generated from protobuf field string data = 4; + */ + protected $data = ''; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int $operation + * @type bool $success + * @type string $message + * @type string $data + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Resources\Tadah::initOnce(); + parent::__construct($data); + } + + /** + * Generated from protobuf field .Tadah.Operation operation = 1; + * @return int + */ + public function getOperation() + { + return $this->operation; + } + + /** + * Generated from protobuf field .Tadah.Operation operation = 1; + * @param int $var + * @return $this + */ + public function setOperation($var) + { + GPBUtil::checkEnum($var, \App\Proto\Operation::class); + $this->operation = $var; + + return $this; + } + + /** + * Generated from protobuf field bool success = 2; + * @return bool + */ + public function getSuccess() + { + return $this->success; + } + + /** + * Generated from protobuf field bool success = 2; + * @param bool $var + * @return $this + */ + public function setSuccess($var) + { + GPBUtil::checkBool($var); + $this->success = $var; + + return $this; + } + + /** + * Generated from protobuf field string message = 3; + * @return string + */ + public function getMessage() + { + return $this->message; + } + + /** + * Generated from protobuf field string message = 3; + * @param string $var + * @return $this + */ + public function setMessage($var) + { + GPBUtil::checkString($var, True); + $this->message = $var; + + return $this; + } + + /** + * Generated from protobuf field string data = 4; + * @return string + */ + public function getData() + { + return $this->data; + } + + /** + * Generated from protobuf field string data = 4; + * @param string $var + * @return $this + */ + public function setData($var) + { + GPBUtil::checkString($var, True); + $this->data = $var; + + return $this; + } + +} + diff --git a/app/Proto/Signal.php b/app/Proto/Signal.php new file mode 100644 index 0000000..fdccc65 --- /dev/null +++ b/app/Proto/Signal.php @@ -0,0 +1,193 @@ +Tadah.Signal + */ +class Signal extends \Google\Protobuf\Internal\Message +{ + /** + * Generated from protobuf field .google.protobuf.Timestamp nonce = 1; + */ + protected $nonce = null; + /** + * Generated from protobuf field string jobId = 2; + */ + protected $jobId = ''; + /** + * Generated from protobuf field .Tadah.Operation operation = 3; + */ + protected $operation = 0; + /** + * Generated from protobuf field .Tadah.ClientVersion version = 4; + */ + protected $version = 0; + /** + * Generated from protobuf field repeated .Tadah.Signal.Place place = 5; + */ + private $place; + /** + * Generated from protobuf field repeated .Tadah.Signal.Thumbnail thumbnail = 6; + */ + private $thumbnail; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type \Google\Protobuf\Timestamp $nonce + * @type string $jobId + * @type int $operation + * @type int $version + * @type \App\Proto\Signal\Place[]|\Google\Protobuf\Internal\RepeatedField $place + * @type \App\Proto\Signal\Thumbnail[]|\Google\Protobuf\Internal\RepeatedField $thumbnail + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Resources\Tadah::initOnce(); + parent::__construct($data); + } + + /** + * Generated from protobuf field .google.protobuf.Timestamp nonce = 1; + * @return \Google\Protobuf\Timestamp + */ + public function getNonce() + { + return $this->nonce; + } + + /** + * Generated from protobuf field .google.protobuf.Timestamp nonce = 1; + * @param \Google\Protobuf\Timestamp $var + * @return $this + */ + public function setNonce($var) + { + GPBUtil::checkMessage($var, \Google\Protobuf\Timestamp::class); + $this->nonce = $var; + + return $this; + } + + /** + * Generated from protobuf field string jobId = 2; + * @return string + */ + public function getJobId() + { + return $this->jobId; + } + + /** + * Generated from protobuf field string jobId = 2; + * @param string $var + * @return $this + */ + public function setJobId($var) + { + GPBUtil::checkString($var, True); + $this->jobId = $var; + + return $this; + } + + /** + * Generated from protobuf field .Tadah.Operation operation = 3; + * @return int + */ + public function getOperation() + { + return $this->operation; + } + + /** + * Generated from protobuf field .Tadah.Operation operation = 3; + * @param int $var + * @return $this + */ + public function setOperation($var) + { + GPBUtil::checkEnum($var, \App\Proto\Operation::class); + $this->operation = $var; + + return $this; + } + + /** + * Generated from protobuf field .Tadah.ClientVersion version = 4; + * @return int + */ + public function getVersion() + { + return $this->version; + } + + /** + * Generated from protobuf field .Tadah.ClientVersion version = 4; + * @param int $var + * @return $this + */ + public function setVersion($var) + { + GPBUtil::checkEnum($var, \App\Proto\ClientVersion::class); + $this->version = $var; + + return $this; + } + + /** + * Generated from protobuf field repeated .Tadah.Signal.Place place = 5; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getPlace() + { + return $this->place; + } + + /** + * Generated from protobuf field repeated .Tadah.Signal.Place place = 5; + * @param \App\Proto\Signal\Place[]|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setPlace($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \App\Proto\Signal\Place::class); + $this->place = $arr; + + return $this; + } + + /** + * Generated from protobuf field repeated .Tadah.Signal.Thumbnail thumbnail = 6; + * @return \Google\Protobuf\Internal\RepeatedField + */ + public function getThumbnail() + { + return $this->thumbnail; + } + + /** + * Generated from protobuf field repeated .Tadah.Signal.Thumbnail thumbnail = 6; + * @param \App\Proto\Signal\Thumbnail[]|\Google\Protobuf\Internal\RepeatedField $var + * @return $this + */ + public function setThumbnail($var) + { + $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \App\Proto\Signal\Thumbnail::class); + $this->thumbnail = $arr; + + return $this; + } + +} + diff --git a/app/Proto/Signal/Place.php b/app/Proto/Signal/Place.php new file mode 100644 index 0000000..633028f --- /dev/null +++ b/app/Proto/Signal/Place.php @@ -0,0 +1,115 @@ +Tadah.Signal.Place + */ +class Place extends \Google\Protobuf\Internal\Message +{ + /** + * Generated from protobuf field uint32 placeId = 1; + */ + protected $placeId = 0; + /** + * Generated from protobuf field string script = 2; + */ + protected $script = ''; + /** + * Generated from protobuf field uint32 expirationInSeconds = 3; + */ + protected $expirationInSeconds = 0; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int $placeId + * @type string $script + * @type int $expirationInSeconds + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Resources\Tadah::initOnce(); + parent::__construct($data); + } + + /** + * Generated from protobuf field uint32 placeId = 1; + * @return int + */ + public function getPlaceId() + { + return $this->placeId; + } + + /** + * Generated from protobuf field uint32 placeId = 1; + * @param int $var + * @return $this + */ + public function setPlaceId($var) + { + GPBUtil::checkUint32($var); + $this->placeId = $var; + + return $this; + } + + /** + * Generated from protobuf field string script = 2; + * @return string + */ + public function getScript() + { + return $this->script; + } + + /** + * Generated from protobuf field string script = 2; + * @param string $var + * @return $this + */ + public function setScript($var) + { + GPBUtil::checkString($var, True); + $this->script = $var; + + return $this; + } + + /** + * Generated from protobuf field uint32 expirationInSeconds = 3; + * @return int + */ + public function getExpirationInSeconds() + { + return $this->expirationInSeconds; + } + + /** + * Generated from protobuf field uint32 expirationInSeconds = 3; + * @param int $var + * @return $this + */ + public function setExpirationInSeconds($var) + { + GPBUtil::checkUint32($var); + $this->expirationInSeconds = $var; + + return $this; + } + +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(Place::class, \App\Proto\Signal_Place::class); + diff --git a/app/Proto/Signal/Thumbnail.php b/app/Proto/Signal/Thumbnail.php new file mode 100644 index 0000000..450c1cf --- /dev/null +++ b/app/Proto/Signal/Thumbnail.php @@ -0,0 +1,115 @@ +Tadah.Signal.Thumbnail + */ +class Thumbnail extends \Google\Protobuf\Internal\Message +{ + /** + * Generated from protobuf field .Tadah.AssetType type = 1; + */ + protected $type = 0; + /** + * Generated from protobuf field uint32 assetId = 2; + */ + protected $assetId = 0; + /** + * Generated from protobuf field string accessKey = 3; + */ + protected $accessKey = ''; + + /** + * Constructor. + * + * @param array $data { + * Optional. Data for populating the Message object. + * + * @type int $type + * @type int $assetId + * @type string $accessKey + * } + */ + public function __construct($data = NULL) { + \GPBMetadata\Resources\Tadah::initOnce(); + parent::__construct($data); + } + + /** + * Generated from protobuf field .Tadah.AssetType type = 1; + * @return int + */ + public function getType() + { + return $this->type; + } + + /** + * Generated from protobuf field .Tadah.AssetType type = 1; + * @param int $var + * @return $this + */ + public function setType($var) + { + GPBUtil::checkEnum($var, \App\Proto\AssetType::class); + $this->type = $var; + + return $this; + } + + /** + * Generated from protobuf field uint32 assetId = 2; + * @return int + */ + public function getAssetId() + { + return $this->assetId; + } + + /** + * Generated from protobuf field uint32 assetId = 2; + * @param int $var + * @return $this + */ + public function setAssetId($var) + { + GPBUtil::checkUint32($var); + $this->assetId = $var; + + return $this; + } + + /** + * Generated from protobuf field string accessKey = 3; + * @return string + */ + public function getAccessKey() + { + return $this->accessKey; + } + + /** + * Generated from protobuf field string accessKey = 3; + * @param string $var + * @return $this + */ + public function setAccessKey($var) + { + GPBUtil::checkString($var, True); + $this->accessKey = $var; + + return $this; + } + +} + +// Adding a class alias for backwards compatibility with the previous class name. +class_alias(Thumbnail::class, \App\Proto\Signal_Thumbnail::class); + diff --git a/app/Proto/Signal_Place.php b/app/Proto/Signal_Place.php new file mode 100644 index 0000000..0964ad5 --- /dev/null +++ b/app/Proto/Signal_Place.php @@ -0,0 +1,16 @@ +app->environment('production')) + { + $this->app->register(\Laravel\Telescope\TelescopeServiceProvider::class); + $this->app->register(TelescopeServiceProvider::class); + + $this->app->register(\Laravel\Horizon\HorizonServiceProvider::class); + $this->app->register(HorizonServiceProvider::class); + } + } + + /** + * I'm going to blow my head off + * + * @return void + */ + protected function schema() + { + Blueprint::macro('packed', function ($key) { + return $this->binary($key); + }); + } + + /** + * Bootstrap any application services. + * + * @return void + */ + public function boot() + { + Paginator::useBootstrapFive(); + + Blade::anonymousComponentNamespace('admin/components', 'admin'); + Blade::anonymousComponentNamespace('my/components', 'account'); + + Blade::if('may', function ($roleset, $role) { + /** @var \App\Models\User */ + $user = auth()->user(); + + return $user->may($roleset, $role); + }); + + Response::macro('text', function ($text) { + return Response::make($text, 200, ['Content-Type' => 'text/plain']); + }); + + Response::macro('pack', function ($data) { + return Response::make(msgpack_pack($data), 200, ['Content-Type' => 'application/x-msgpack']); + }); + + schema(); + + if (!app()->runningInConsole() && $this->app->environment('production')) + { + Octane::tick('ip-address-ban-refresher', fn() => IpAddressBanManager::refresh()) + ->seconds(60 * 30) + ->immediate(); + } + } +} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php new file mode 100644 index 0000000..22b77e6 --- /dev/null +++ b/app/Providers/AuthServiceProvider.php @@ -0,0 +1,30 @@ + + */ + protected $policies = [ + // 'App\Models\Model' => 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..395c518 --- /dev/null +++ b/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ +> + */ + protected $listen = [ + Registered::class => [ + Listeners\SendEmailVerificationNotification::class, + ], + + Events\GameServer\ConsoleOutput::class => [ + Listeners\GameServer\AppendConsoleOutput::class, + ], + + Events\GameServer\ResourceReport::class => [ + Listeners\GameServer\Ping::class + ], + + Events\GameServer\StateChange::class => [ + Listeners\GameServer\ChangeState::class + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + // + } +} diff --git a/app/Providers/FortifyServiceProvider.php b/app/Providers/FortifyServiceProvider.php new file mode 100644 index 0000000..67458f9 --- /dev/null +++ b/app/Providers/FortifyServiceProvider.php @@ -0,0 +1,89 @@ +email; + + return Limit::perMinute(5)->by($email . $request->ip()); + }); + + RateLimiter::for('two-factor', function (Request $request) { + return Limit::perMinute(5)->by($request->session()->get('login.id')); + }); + + Fortify::authenticateUsing(function (Request $request) { + // I have no idea if Fortify cares about $request so $request->validate isn't used + $validator = validator([recaptchaFieldName() => $request->input(recaptchaFieldName())], [recaptchaFieldName() => ['required', recaptchaRuleName()]]); + if ($validator->fails()) + { + abort(403); + } + + $user = User::where('username', $request->input(config('fortify.username')))->first(); + + if ($user && Hash::check($request->password, $user->password)) + { + return $user; + } + }); + + // Route names : https://github.com/laravel/fortify/blob/1.x/routes/routes.php + // Static functions : https://github.com/laravel/fortify/blob/1.x/src/Fortify.php + Fortify::loginView(function () { + return view('auth.login'); + }); + + Fortify::registerView(function () { + return view('auth.register'); + }); + + Fortify::verifyEmailView(function () { + return view('auth.verify-email'); + }); + + Fortify::requestPasswordResetLinkView(function () { + return view('auth.request-password'); + }); + + Fortify::resetPasswordView(function ($request) { + return view('auth.reset-password', ['request' => $request]); + }); + + Fortify::twoFactorChallengeView(function () { + return view('auth.2fa'); + }); + + Fortify::confirmPasswordView(function () { + return view('auth.confirm-password'); + }); + } +} diff --git a/app/Providers/HorizonServiceProvider.php b/app/Providers/HorizonServiceProvider.php new file mode 100644 index 0000000..d0fc520 --- /dev/null +++ b/app/Providers/HorizonServiceProvider.php @@ -0,0 +1,34 @@ +isSuperAdmin(); + }); + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..f9aacab --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,57 @@ +configureRateLimiting(); + + $this->routes(function () { + Route::prefix('api') + ->middleware('api') + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->group(base_path('routes/web.php')); + + Route::prefix('arbiter') + ->group(base_path('routes/arbiter.php')); + + require base_path('routes/roblox.php'); + }); + } + + /** + * Configure the rate limiters for the application. + * + * @return void + */ + protected function configureRateLimiting() + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); + }); + } +} diff --git a/app/Providers/TelescopeServiceProvider.php b/app/Providers/TelescopeServiceProvider.php new file mode 100644 index 0000000..25fefe8 --- /dev/null +++ b/app/Providers/TelescopeServiceProvider.php @@ -0,0 +1,70 @@ +hideSensitiveRequestDetails(); + + Telescope::filter(function (IncomingEntry $entry) { + if ($this->app->environment('local')) { + return true; + } + + return $entry->isReportableException() || + $entry->isFailedRequest() || + $entry->isFailedJob() || + $entry->isScheduledTask() || + $entry->hasMonitoredTag(); + }); + } + + /** + * Prevent sensitive request details from being logged by Telescope. + * + * @return void + */ + protected function hideSensitiveRequestDetails() + { + if ($this->app->environment('local')) { + return; + } + + Telescope::hideRequestParameters(['_token']); + + Telescope::hideRequestHeaders([ + 'cookie', + 'x-csrf-token', + 'x-xsrf-token', + ]); + } + + /** + * Register the Telescope gate. + * + * This gate determines who can access Telescope in non-local environments. + * + * @return void + */ + protected function gate() + { + Gate::define('viewTelescope', function ($user) { + return $user->isSuperAdmin(); + }); + } +} diff --git a/app/Roblox/Script/Script.php b/app/Roblox/Script/Script.php new file mode 100644 index 0000000..44a24a6 --- /dev/null +++ b/app/Roblox/Script/Script.php @@ -0,0 +1,176 @@ +lua = $lua; + } + + /** + * Renders the script. Note that you may not "un-render" a script. + * + * @param array $parameters + * @return Script + */ + public function render(array $parameters) : Script + { + foreach ($parameters as $key => $value) + { + if (gettype($value) == 'object') + { + $value = $value->name; + } + + $this->lua = str($this)->replace(('{{ ' . $key . ' }}'), (string) $value); + } + + return $this; + } + + /** + * Signs the script. Note that you may not "un-sign" a script. + * + * @param bool $addComment + * @return Script + */ + public function sign($addComment = true): Script + { + $this->signature = signer('roblox')->sign($this); + $this->prepend(str($this->signature)->wrap('%')); + + if ($addComment) + { + $this->prepend('--rbxsig'); + } + + return $this; + } + + /** + * Prepends value to the Lua script. + * + * @param string $code + * @return Script + */ + public function prepend(string $code): Script + { + $this->lua = $code . $this->lua; + + return $this; + } + + /** + * Appends value to the Lua script. + * + * @param string $code + * @return Script + */ + public function append(string $code): Script + { + $this->lua .= $code; + + return $this; + } + + /** + * Converts the script to its ASCII representation. + * + * @return array + */ + public function toAscii(): array + { + return unpack('C*', $this); + } + + /** + * Converts the script to its loadstring form. This is irreversible. + * + * @return Script + */ + public function loadstring(): Script + { + $this->lua = ('loadstring("\\' . implode('\\', $this->toAscii()) . '")()'); + + return $this; + } + + /** + * If this is a loadstring script, this returns the raw Lua code. This is irreversible. + * + * @return Script + * @throws \Exception + */ + public function unpack(): Script + { + if (!str_contains($this, 'loadstring(')) + { + throw new \Exception('Cannot unpack already unpacked script'); + } + + // startPosition gets the position of where "loadstring(" starts, adds length of "loadstring(" to get inside the function, and adds 1 to account for the quotation mark + // endPosition removes all text before the startPosition position and then gets the next occurrence of a ")()" (signifying the end of the function) and removes one to account for the quotation mark and string, then adds startPosition for original length + $startPosition = strpos($this, 'loadstring(') + strlen('loadstring(') + 1; + + if (strpos(substr($this, $startPosition), ')()') === false) + { + throw new \Exception('Malformed loadstring data'); + } + + $endPosition = $startPosition + (strpos(substr($this, $startPosition), ')()') - 1); + $code = substr($this, $startPosition, $endPosition - $startPosition); + + // Parse the code + $code = explode('\\', $code); + $lua = ''; + + array_shift($code); // Remove first empty element (since "\123\456", ['', '123', '456']) + + for ($i = 0; $i < count($code); $i++) + { + if (!is_numeric($code[$i])) + { + throw new \Exception('Malformed loadstring data'); + } + + $lua .= chr($code[$i]); + } + + $this->lua = $lua; + + return $this; + } + + /** + * As a string. + * + * @return string + */ + public function __toString(): string + { + return $this->lua; + } +} diff --git a/app/Roblox/Script/ScriptBuilder.php b/app/Roblox/Script/ScriptBuilder.php new file mode 100644 index 0000000..670b4cd --- /dev/null +++ b/app/Roblox/Script/ScriptBuilder.php @@ -0,0 +1,62 @@ + '', + 'BaseUrl' => config('app.url'), + 'ChatStyle' => ChatStyle::Classic, + 'ClientPresenceUrl' => '', + 'CreatorID' => 0, + 'CreatorType' => 'User', + 'IsTeleport' => 'false', + 'IsTest' => 'true', + 'IsVisit' => 'false', + 'JobID' => '', + 'MachineAddress' => 'localhost', + 'MachinePort' => 53640, + 'OfficialPlace' => false, + 'PlaceID' => 0, + 'PlayerAge' => 0, + 'PlayerAppearance' => '', + 'PlayerID' => 0, + 'PlayerMembership' => 'None', + 'PlayerName' => 'Player', + 'PlayerSSC' => true, + 'PlayerTicket' => '', + 'ScreenshotInfo' => '', + 'VideoInfo' => '', + 'UploadUrl' => '' + ]; + } + + /** + * Creates a script. + * + * @param array|string $scripts + * @return Script + */ + public static function from(array|string $scripts): Script + { + $built = ''; + $scripts = collect($scripts); + + $scripts->each(function ($script) use (&$built) { + $built .= Storage::disk('resources')->get('lua/' . $script . '.lua'); + }); + + return new Script($built); + } +} diff --git a/app/Roles/Admin.php b/app/Roles/Admin.php new file mode 100644 index 0000000..54a71d7 --- /dev/null +++ b/app/Roles/Admin.php @@ -0,0 +1,22 @@ +getConstants(); + } + + /** + * Get all roles in all rolesets. + * + * @return array + */ + public static function allRoles(): array + { + $rolesets = self::allRoleSets(); + $roles = []; + + foreach ($rolesets as $roleset) + { + $roles = array_merge($roles, self::rolesOfRoleset($roleset)); + } + + return $roles; + } +} diff --git a/app/Roles/SelfHostedServers.php b/app/Roles/SelfHostedServers.php new file mode 100644 index 0000000..504c550 --- /dev/null +++ b/app/Roles/SelfHostedServers.php @@ -0,0 +1,37 @@ +path() == '/' ? '/' : '/'.$request->path(); + return preg_match(preg_replace('/$/','i', $route->getCompiled()->getRegex()), rawurldecode($path)); + } +} diff --git a/app/Rules/IsAlphaNumeric.php b/app/Rules/IsAlphaNumeric.php new file mode 100644 index 0000000..ecc0525 --- /dev/null +++ b/app/Rules/IsAlphaNumeric.php @@ -0,0 +1,30 @@ +user->password); + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message(): string + { + return __('Wrong password.'); + } +} diff --git a/app/Rules/IsRobloxXml.php b/app/Rules/IsRobloxXml.php new file mode 100644 index 0000000..c9762a6 --- /dev/null +++ b/app/Rules/IsRobloxXml.php @@ -0,0 +1,53 @@ +hasFile() will not work + // so this is just assuming that the supplied value is an UploadedFile object + + $asset = $value->get(); + + libxml_use_internal_errors(true); + $document = simplexml_load_string($asset); + + if (!$document) + { + // invalid XML + libxml_clear_errors(); + return false; + } + + libxml_use_internal_errors(false); + + // now we just check for some nodes which **should** appear in all XML assets + if (!$document->getName() == 'roblox') return false; + if (count($document->xpath('//External')) < 2) return false; + if (!count($document->xpath('//Item'))) return false; + if (!count($document->xpath('//Properties'))) return false; + + return true; + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message(): string + { + return __('Not a valid Roblox XML asset.'); + } +} diff --git a/app/Rules/IsSiprNameOrIpAddress.php b/app/Rules/IsSiprNameOrIpAddress.php new file mode 100644 index 0000000..bd72c8d --- /dev/null +++ b/app/Rules/IsSiprNameOrIpAddress.php @@ -0,0 +1,39 @@ +first()); + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message(): string + { + return __('That email address is taken.'); + } +} diff --git a/app/Rules/IsValidInviteKey.php b/app/Rules/IsValidInviteKey.php new file mode 100644 index 0000000..a85db39 --- /dev/null +++ b/app/Rules/IsValidInviteKey.php @@ -0,0 +1,38 @@ +first(); + + if ($key && $key->isValid()) + { + return true; + } + + return false; + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message(): string + { + return __('Invalid invite key.'); + } +} diff --git a/app/Rules/IsValidSession.php b/app/Rules/IsValidSession.php new file mode 100644 index 0000000..38eda9e --- /dev/null +++ b/app/Rules/IsValidSession.php @@ -0,0 +1,44 @@ +where('user_id', $this->user->id) + ->where('id', decrypt($value)) + ->first() !== null; + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message(): string + { + return __('Invalid session.'); + } +} diff --git a/app/Signing/Signature.php b/app/Signing/Signature.php new file mode 100644 index 0000000..bf9885e --- /dev/null +++ b/app/Signing/Signature.php @@ -0,0 +1,59 @@ +raw = $signature; + $this->type = $type; + } + + /** + * As a Roblox comment. + * + * @return string + */ + public function asRobloxComment(): string + { + return ('--rbxsig' . str($this)->wrap('%')); + } + + /** + * As a string. + * + * @return string + */ + public function __toString(): string + { + return base64_encode($this->raw); + } +} diff --git a/app/Signing/Signer.php b/app/Signing/Signer.php new file mode 100644 index 0000000..dc1fc36 --- /dev/null +++ b/app/Signing/Signer.php @@ -0,0 +1,73 @@ +type = $type; + + $this->privateKey = $type->getPrivateKey(); + $this->publicKey = $type->getPublicKey(); + } + + /** + * Signs data. + * + * @param string $data + * @return Signature + */ + public function sign(string $data): Signature + { + // $signature appears out of thin air! + openssl_sign($data, $signature, $this->privateKey, $this->type->algorithm()); + + return new Signature($signature, $this->type); + } + + /** + * Verifies data. + * + * @param string $data + * @param string|Signature $signature + */ + public function verify(string $data, string|Signature $signature) + { + if (is_string($signature)) + { + $signature = new Signature($signature, $this->type); + } + + return (bool) openssl_verify($data, $signature->raw, $this->publicKey); + } +} diff --git a/app/Traits/EmailValidationRules.php b/app/Traits/EmailValidationRules.php new file mode 100644 index 0000000..dc21571 --- /dev/null +++ b/app/Traits/EmailValidationRules.php @@ -0,0 +1,16 @@ +title = $title; + $this->fluff = $fluff === 'on' || $fluff === true; + $this->data = $data; + } + + /** + * Get the view / contents that represents the component. + * + * @return \Illuminate\View\View + */ + public function render() + { + $context = [ + 'baseURL' => url('/') + ]; + + // Avoid generated routes + if (Route::has(Route::currentRouteName())) + { + $context['route'] = Route::currentRouteName(); + } + + if (Auth::check()) + { + /** @var \App\Models\User */ + $user = Auth::user(); + + $context['session'] = [ + 'id' => $user->id, + 'heartbeat' => ($user->hasVerifiedEmail() || !config('app.email_verification')) && !$user->isBanned() + ]; + } + + if (!empty($this->data)) + { + $context['data'] = $this->data; + } + + return view('layouts.app', compact('context')); + } +} diff --git a/app/View/Components/AuthLayout.php b/app/View/Components/AuthLayout.php new file mode 100644 index 0000000..39c7bb1 --- /dev/null +++ b/app/View/Components/AuthLayout.php @@ -0,0 +1,31 @@ +cascade(); + } + + return $interval->forHumans(['join' => true]); + } +} + +if (!function_exists('getInboxAddress')) +{ + /** + * Returns the project's mail inbox address. + * + * @return string + */ + function getInboxAddress(): string + { + return 'inbox@' . config('app.base_url'); + } +} + +if (!function_exists('countryCodeToEmoji')) +{ + /** + * Gets the flag emoji for a given country code. + * + * @param string $country_code + * @return string + */ + function countryCodeToEmoji(string $country_code): string + { + $country_code = strtoupper($country_code); + $flag = 0x1F1A5; + + $first = mb_convert_encoding('&#' . (ord($country_code[0]) + $flag) . ';', 'UTF-8', 'HTML-ENTITIES'); + $second = mb_convert_encoding('&#' . (ord($country_code[1]) + $flag) . ';', 'UTF-8', 'HTML-ENTITIES'); + + return $first . $second; + } +} + +if (!function_exists('geolocate')) +{ + /** + * Returns the country name, territory name, country code, and flag for a given IP address. If the IP address could not be successfully geolocated, returns false. + * + * @param string $ip_address + * @return bool|object + */ + function geolocate(string $ip_address): bool|object + { + if (($location = Location::get($ip_address)) !== false) + { + return (object) [ + 'country' => $location->countryName, + 'territory' => $location->regionName, + 'countryCode' => $location->countryCode, + 'flag' => countryCodeToEmoji($location->countryCode) + ]; + } + + return false; + } +} + +if (!function_exists('agent')) +{ + /** + * Returns a new Agent for a given user agent string. + * + * @param string $user_agent + * @return \App\Helpers\Agent + */ + function agent(string $user_agent): Agent + { + return new Agent(null, $user_agent); + } +} + +if (!function_exists('is_online')) +{ + /** + * Checks if a given timestamp is "online". + * + * @param int $timestamp + * @return bool + */ + function is_online(int $timestamp): bool + { + return time() - $timestamp <= 60; + } +} + +if (!function_exists('active_link')) +{ + /** + * Returns whether or not to highlight a route in the navigation bar by comparing the current request route. + * + * @param string $route + * @param int $segment + * @return bool + */ + function active_link(string $route, int $segment = 1): bool + { + return request()->segment($segment) == $route; + } +} + +if (!function_exists('paginate')) +{ + /** + * Paginates a given collection. + * + * @param \Illuminate\Support\Collection $collection + * @param int $show_per_page + * + * @return \Illuminate\Pagination\LengthAwarePaginator + */ + function paginate(Collection $collection, int $show_per_page): LengthAwarePaginator + { + return PaginationTransformer::paginate($collection, $show_per_page); + } +} + +if (!function_exists('safe_define')) +{ + /** + * Safely defines a constant by checking if it exists in the first place. + * + * @param string $key + * @param mixed $value + */ + function safe_define(string $key, mixed $value) + { + if (!defined($key)) + { + define($key, $value); + } + } +} + +if (!function_exists('sha256')) +{ + /** + * Returns a SHA256 checksum of given data. + * + * @param mixed $data + * @return string + */ + function sha256(mixed $data): string + { + return hash('sha256', $data); + } +} + +if (!function_exists('sha512')) +{ + /** + * Returns a SHA512 checksum of given data. + * + * @param mixed $data + * @return string + */ + function sha512(mixed $data): string + { + return hash('sha512', $data); + } +} + +if (!function_exists('uuid')) +{ + /** + * Returns a new randomly generated UUID. + * + * @return string + */ + function uuid(): string + { + return Str::uuid()->toString(); + } +} + +if (!function_exists('signer')) +{ + /** + * Acquires a signer. + * + * @param SignatureType|string $type + * @return Signer + */ + function signer(SignatureType|string $type): Signer + { + if (is_string($type)) + { + $type = SignatureType::tryFrom($type) ?? SignatureType::Roblox; + } + + return new Signer($type); + } +} + +if (!function_exists('is_base64')) +{ + /** + * Determines if a string is base64 or not. + * + * @param mixed $data + * @return bool + */ + function is_base64($data): bool + { + return base64_encode(base64_decode($data, true)) === $data; + } +} + +if (!function_exists('is_ipv4')) +{ + /** + * Determines if a string is a valid IPv4 address. + * + * @param mixed $data + * @return bool + */ + function is_ipv4(mixed $data): bool + { + return filter_var($data, FILTER_VALIDATE_IP) && !filter_var($data, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE); + } +} + +if (!function_exists('is_port')) +{ + /** + * Determines if a port is a valid port. + * + * @param mixed $data + * @return bool + */ + function is_port(mixed $data):bool + { + return is_numeric($data) && $data > 0 && $data < 65536; + } +} diff --git a/artisan b/artisan new file mode 100644 index 0000000..67a3329 --- /dev/null +++ b/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..037e17d --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..eae0de9 --- /dev/null +++ b/composer.json @@ -0,0 +1,103 @@ +{ + "name": "tadah/web", + "type": "project", + "description": "The Tadah Website", + "license": "AGPL-3.0", + "require": { + "php": "^8.1", + "arandilopez/laravel-profane": "dev-tadah as 0.5.0", + "biscolab/laravel-recaptcha": "^5.4", + "bjorn-voesten/ciphersweet-for-laravel": "dev-tadah as 1.3.0", + "claviska/simpleimage": "^3.7", + "google/protobuf": "^3.21", + "guzzlehttp/guzzle": "^7.4", + "http-interop/http-factory-guzzle": "^1.2", + "jenssegers/agent": "^2.6", + "laravel/fortify": "^1.13", + "laravel/framework": "^9.24", + "laravel/horizon": "^5.9", + "laravel/octane": "^1.3", + "laravel/scout": "^9.4", + "laravel/socialite": "^5.5", + "laravel/telescope": "^4.9", + "laravel/tinker": "^2.7", + "livewire/livewire": "^2.10", + "martinbean/socialite-discord-provider": "dev-tadah as 1.2.0", + "meilisearch/meilisearch-php": "^0.24", + "olssonm/laravel-zxcvbn": "dev-tadah as 4.5", + "propaganistas/laravel-disposable-email": "^2.1", + "pusher/pusher-php-server": "^7.0", + "spatie/color": "^1.5", + "stevebauman/location": "^6.5" + }, + "require-dev": { + "barryvdh/laravel-debugbar": "^3.7", + "fakerphp/faker": "^1.20", + "laravel/sail": "^1.15", + "nunomaduro/collision": "^6.2", + "nunomaduro/larastan": "^2.1", + "spatie/laravel-ignition": "^1.3" + }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/tadah-foss/ciphersweet-for-laravel.git" + }, + { + "type": "vcs", + "url": "https://github.com/tadah-foss/laravel-profane.git" + }, + { + "type": "vcs", + "url": "https://github.com/tadah-foss/laravel-zxcvbn.git" + }, + { + "type": "vcs", + "url": "https://github.com/tadah-foss/socialite-discord-provider.git" + } + ], + + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + }, + "files": [ + "app\\helpers.php" + ] + }, + "extra": { + "laravel": { + "dont-discover": [ + "laravel/telescope" + ] + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-update-cmd": [ + "@php artisan vendor:publish --tag=laravel-assets --ansi --force" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true, + "platform": { + "ext-pcntl": "8.1", + "ext-posix": "8.1" + } + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..b29cce8 --- /dev/null +++ b/composer.lock @@ -0,0 +1,9472 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "08204a59226ddd2d94ebcfd25d509f53", + "packages": [ + { + "name": "arandilopez/laravel-profane", + "version": "dev-tadah", + "source": { + "type": "git", + "url": "https://github.com/tadah-foss/laravel-profane.git", + "reference": "13bdf8e99920ded2aa6e112d7f22eb0737842321" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tadah-foss/laravel-profane/zipball/13bdf8e99920ded2aa6e112d7f22eb0737842321", + "reference": "13bdf8e99920ded2aa6e112d7f22eb0737842321", + "shasum": "" + }, + "require": { + "illuminate/support": ">=5.2|^6.0|^7.0|^8.0|^9.0" + }, + "require-dev": { + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^8.0|^8.5" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelProfane\\ProfaneServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelProfane\\": "src/", + "LaravelProfaneTests\\": "tests/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Arandi Lopez", + "email": "arandilopez.93@gmail.com" + } + ], + "description": "Laravel Profanity Valitador", + "support": { + "source": "https://github.com/tadah-foss/laravel-profane/tree/tadah" + }, + "time": "2022-08-12T22:33:47+00:00" + }, + { + "name": "bacon/bacon-qr-code", + "version": "2.0.7", + "source": { + "type": "git", + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "d70c840f68657ce49094b8d91f9ee0cc07fbf66c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/d70c840f68657ce49094b8d91f9ee0cc07fbf66c", + "reference": "d70c840f68657ce49094b8d91f9ee0cc07fbf66c", + "shasum": "" + }, + "require": { + "dasprid/enum": "^1.0.3", + "ext-iconv": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phly/keep-a-changelog": "^2.1", + "phpunit/phpunit": "^7 | ^8 | ^9", + "spatie/phpunit-snapshot-assertions": "^4.2.9", + "squizlabs/php_codesniffer": "^3.4" + }, + "suggest": { + "ext-imagick": "to generate QR code images" + }, + "type": "library", + "autoload": { + "psr-4": { + "BaconQrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "support": { + "issues": "https://github.com/Bacon/BaconQrCode/issues", + "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.7" + }, + "time": "2022-03-14T02:02:36+00:00" + }, + { + "name": "biscolab/laravel-recaptcha", + "version": "v5.4.0", + "source": { + "type": "git", + "url": "https://github.com/biscolab/laravel-recaptcha.git", + "reference": "1bab726402d5376553a439b88a0faa07e84488fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/biscolab/laravel-recaptcha/zipball/1bab726402d5376553a439b88a0faa07e84488fd", + "reference": "1bab726402d5376553a439b88a0faa07e84488fd", + "shasum": "" + }, + "require": { + "illuminate/routing": "^7.0|^8.0|^9.0", + "illuminate/support": "^7.0|^8.0|^9.0", + "php": "^7.3|^8.0" + }, + "require-dev": { + "orchestra/testbench": "5.*|6.*|^7.0", + "phpunit/phpunit": "^9.1" + }, + "suggest": { + "biscolab/laravel-authlog": "It allows to handle logged-in users and force log-out if needed" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Biscolab\\ReCaptcha\\ReCaptchaServiceProvider" + ], + "aliases": { + "ReCaptcha": "Biscolab\\ReCaptcha\\Facades\\ReCaptcha" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Biscolab\\ReCaptcha\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roberto Belotti", + "email": "roby.belotti@gmail.com", + "homepage": "https://biscolab.com", + "role": "Developer" + } + ], + "description": "Simple and painless Google reCAPTCHA package for Laravel framework", + "homepage": "https://biscolab.com/laravel-recaptcha", + "keywords": [ + "captcha", + "laravel", + "recaptcha", + "validation" + ], + "support": { + "issues": "https://github.com/biscolab/laravel-recaptcha/issues", + "source": "https://github.com/biscolab/laravel-recaptcha/tree/v5.4.0" + }, + "time": "2022-05-07T12:52:46+00:00" + }, + { + "name": "bjeavons/zxcvbn-php", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/bjeavons/zxcvbn-php.git", + "reference": "994928ae5b17ecff8baa2406832d37bdf01116c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bjeavons/zxcvbn-php/zipball/994928ae5b17ecff8baa2406832d37bdf01116c0", + "reference": "994928ae5b17ecff8baa2406832d37bdf01116c0", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.2 | ^8.0 | ^8.1", + "symfony/polyfill-mbstring": ">=1.3.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "*", + "phpunit/phpunit": "^8.5", + "squizlabs/php_codesniffer": "3.*" + }, + "suggest": { + "ext-gmp": "Required for optimized binomial calculations (also requires PHP >= 7.3)" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZxcvbnPhp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "See contributors", + "homepage": "https://github.com/bjeavons/zxcvbn-php" + } + ], + "description": "Realistic password strength estimation PHP library based on Zxcvbn JS", + "homepage": "https://github.com/bjeavons/zxcvbn-php", + "keywords": [ + "password", + "zxcvbn" + ], + "support": { + "issues": "https://github.com/bjeavons/zxcvbn-php/issues", + "source": "https://github.com/bjeavons/zxcvbn-php/tree/1.3.1" + }, + "time": "2021-12-21T18:37:02+00:00" + }, + { + "name": "bjorn-voesten/ciphersweet-for-laravel", + "version": "dev-tadah", + "source": { + "type": "git", + "url": "https://github.com/tadah-foss/ciphersweet-for-laravel.git", + "reference": "a72393c71ee28def05eae25fc0995732f4233899" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tadah-foss/ciphersweet-for-laravel/zipball/a72393c71ee28def05eae25fc0995732f4233899", + "reference": "a72393c71ee28def05eae25fc0995732f4233899", + "shasum": "" + }, + "require": { + "illuminate/config": "^9.0", + "illuminate/database": "^9.0", + "illuminate/support": "^9.0", + "paragonie/ciphersweet": "^3.0", + "php": "^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "BjornVoesten\\CipherSweet\\CipherSweetServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "BjornVoesten\\CipherSweet\\": "src/", + "BjornVoesten\\CipherSweet\\Seeds\\": "database/seeds/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bjorn Voesten", + "email": "bjorn-voesten@live.nl" + } + ], + "support": { + "source": "https://github.com/tadah-foss/ciphersweet-for-laravel/tree/tadah" + }, + "time": "2022-08-12T23:07:27+00:00" + }, + { + "name": "brick/math", + "version": "0.10.2", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/459f2781e1a08d52ee56b0b1444086e038561e3f", + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "4.25.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.10.2" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2022-08-10T22:54:19+00:00" + }, + { + "name": "claviska/simpleimage", + "version": "3.7.0", + "source": { + "type": "git", + "url": "https://github.com/claviska/SimpleImage.git", + "reference": "abd15ced313c7b8041d7d73d8d2398b4f2510cf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/claviska/SimpleImage/zipball/abd15ced313c7b8041d7d73d8d2398b4f2510cf1", + "reference": "abd15ced313c7b8041d7d73d8d2398b4f2510cf1", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "league/color-extractor": "0.3.*", + "php": ">=5.6.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "claviska": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Cory LaViska", + "homepage": "http://www.abeautifulsite.net/", + "role": "Developer" + } + ], + "description": "A PHP class that makes working with images as simple as possible.", + "support": { + "issues": "https://github.com/claviska/SimpleImage/issues", + "source": "https://github.com/claviska/SimpleImage/tree/3.7.0" + }, + "funding": [ + { + "url": "https://github.com/claviska", + "type": "github" + } + ], + "time": "2022-07-05T13:18:44+00:00" + }, + { + "name": "clue/stream-filter", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/clue/stream-filter.git", + "reference": "d6169430c7731d8509da7aecd0af756a5747b78e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/stream-filter/zipball/d6169430c7731d8509da7aecd0af756a5747b78e", + "reference": "d6169430c7731d8509da7aecd0af756a5747b78e", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "Clue\\StreamFilter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/php-stream-filter", + "keywords": [ + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" + ], + "support": { + "issues": "https://github.com/clue/stream-filter/issues", + "source": "https://github.com/clue/stream-filter/tree/v1.6.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-02-21T13:15:14+00:00" + }, + { + "name": "composer/ca-bundle", + "version": "1.3.3", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "30897edbfb15e784fe55587b4f73ceefd3c4d98c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/30897edbfb15e784fe55587b4f73ceefd3c4d98c", + "reference": "30897edbfb15e784fe55587b4f73ceefd3c4d98c", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.55", + "psr/log": "^1.0", + "symfony/phpunit-bridge": "^4.2 || ^5", + "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/ca-bundle/issues", + "source": "https://github.com/composer/ca-bundle/tree/1.3.3" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-07-20T07:14:26+00:00" + }, + { + "name": "dasprid/enum", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/DASPRiD/Enum.git", + "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/5abf82f213618696dda8e3bf6f64dd042d8542b2", + "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "^7 | ^8 | ^9", + "squizlabs/php_codesniffer": "^3.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "PHP 7.1 enum implementation", + "keywords": [ + "enum", + "map" + ], + "support": { + "issues": "https://github.com/DASPRiD/Enum/issues", + "source": "https://github.com/DASPRiD/Enum/tree/1.0.3" + }, + "time": "2020-10-02T16:03:48+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.14" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1" + }, + "time": "2021-08-13T13:06:58+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "vimeo/psalm": "^4.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:16:43+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.3.1", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/be85b3f05b46c39bbc0d95f6c071ddff669510fa", + "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.1" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2022-01-18T15:43:28+00:00" + }, + { + "name": "egulias/email-validator", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715", + "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.2", + "php": ">=7.2", + "symfony/polyfill-intl-idn": "^1.15" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^8.5.8|^9.3.3", + "vimeo/psalm": "^4" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2022-06-18T20:57:19+00:00" + }, + { + "name": "facade/ignition-contracts", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "support": { + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + }, + "time": "2020-10-16T08:27:54+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2022-02-20T15:07:15+00:00" + }, + { + "name": "geoip2/geoip2", + "version": "v2.13.0", + "source": { + "type": "git", + "url": "git@github.com:maxmind/GeoIP2-php.git", + "reference": "6a41d8fbd6b90052bc34dff3b4252d0f88067b23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/6a41d8fbd6b90052bc34dff3b4252d0f88067b23", + "reference": "6a41d8fbd6b90052bc34dff3b4252d0f88067b23", + "shasum": "" + }, + "require": { + "ext-json": "*", + "maxmind-db/reader": "~1.8", + "maxmind/web-service-common": "~0.8", + "php": ">=7.2" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "3.*", + "phpstan/phpstan": "*", + "phpunit/phpunit": "^8.0 || ^9.0", + "squizlabs/php_codesniffer": "3.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "GeoIp2\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Gregory J. Oschwald", + "email": "goschwald@maxmind.com", + "homepage": "https://www.maxmind.com/" + } + ], + "description": "MaxMind GeoIP2 PHP API", + "homepage": "https://github.com/maxmind/GeoIP2-php", + "keywords": [ + "IP", + "geoip", + "geoip2", + "geolocation", + "maxmind" + ], + "time": "2022-08-05T20:32:58+00:00" + }, + { + "name": "google/protobuf", + "version": "v3.21.5", + "source": { + "type": "git", + "url": "https://github.com/protocolbuffers/protobuf-php.git", + "reference": "70649d33d2b6e8fd0db6d9b6fffc7f46f01f1438" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/70649d33d2b6e8fd0db6d9b6fffc7f46f01f1438", + "reference": "70649d33d2b6e8fd0db6d9b6fffc7f46f01f1438", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": ">=5.0.0" + }, + "suggest": { + "ext-bcmath": "Need to support JSON deserialization" + }, + "type": "library", + "autoload": { + "psr-4": { + "Google\\Protobuf\\": "src/Google/Protobuf", + "GPBMetadata\\Google\\Protobuf\\": "src/GPBMetadata/Google/Protobuf" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "proto library for PHP", + "homepage": "https://developers.google.com/protocol-buffers/", + "keywords": [ + "proto" + ], + "support": { + "source": "https://github.com/protocolbuffers/protobuf-php/tree/v3.21.5" + }, + "time": "2022-08-09T19:53:56+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/a878d45c1914464426dc94da61c9e1d36ae262a8", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.28 || ^9.5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2022-07-30T15:56:11+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.4.5", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", + "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.9 || ^2.4", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.4-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.4.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-06-20T22:16:13+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:56:57+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "13388f00956b1503577598873fffb5ae994b5737" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/13388f00956b1503577598873fffb5ae994b5737", + "reference": "13388f00956b1503577598873fffb5ae994b5737", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.4.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2022-06-20T21:43:11+00:00" + }, + { + "name": "http-interop/http-factory-guzzle", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/http-interop/http-factory-guzzle.git", + "reference": "8f06e92b95405216b237521cc64c804dd44c4a81" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81", + "reference": "8f06e92b95405216b237521cc64c804dd44c4a81", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^1.7||^2.0", + "php": ">=7.3", + "psr/http-factory": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "^1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^9.5" + }, + "suggest": { + "guzzlehttp/psr7": "Includes an HTTP factory starting in version 2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Factory\\Guzzle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "An HTTP Factory using Guzzle PSR7", + "keywords": [ + "factory", + "http", + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/http-interop/http-factory-guzzle/issues", + "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0" + }, + "time": "2021-07-21T13:50:14+00:00" + }, + { + "name": "jaybizzle/crawler-detect", + "version": "v1.2.111", + "source": { + "type": "git", + "url": "https://github.com/JayBizzle/Crawler-Detect.git", + "reference": "d572ed4a65a70a2d2871dc5137c9c5b7e69745ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/d572ed4a65a70a2d2871dc5137c9c5b7e69745ab", + "reference": "d572ed4a65a70a2d2871dc5137c9c5b7e69745ab", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5.5|^6.5|^9.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Jaybizzle\\CrawlerDetect\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Beech", + "email": "m@rkbee.ch", + "role": "Developer" + } + ], + "description": "CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent", + "homepage": "https://github.com/JayBizzle/Crawler-Detect/", + "keywords": [ + "crawler", + "crawler detect", + "crawler detector", + "crawlerdetect", + "php crawler detect" + ], + "support": { + "issues": "https://github.com/JayBizzle/Crawler-Detect/issues", + "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.111" + }, + "time": "2022-03-15T22:19:01+00:00" + }, + { + "name": "jenssegers/agent", + "version": "v2.6.4", + "source": { + "type": "git", + "url": "https://github.com/jenssegers/agent.git", + "reference": "daa11c43729510b3700bc34d414664966b03bffe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jenssegers/agent/zipball/daa11c43729510b3700bc34d414664966b03bffe", + "reference": "daa11c43729510b3700bc34d414664966b03bffe", + "shasum": "" + }, + "require": { + "jaybizzle/crawler-detect": "^1.2", + "mobiledetect/mobiledetectlib": "^2.7.6", + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5.0|^6.0|^7.0" + }, + "suggest": { + "illuminate/support": "Required for laravel service providers" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + }, + "laravel": { + "providers": [ + "Jenssegers\\Agent\\AgentServiceProvider" + ], + "aliases": { + "Agent": "Jenssegers\\Agent\\Facades\\Agent" + } + } + }, + "autoload": { + "psr-4": { + "Jenssegers\\Agent\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jens Segers", + "homepage": "https://jenssegers.com" + } + ], + "description": "Desktop/mobile user agent parser with support for Laravel, based on Mobiledetect", + "homepage": "https://github.com/jenssegers/agent", + "keywords": [ + "Agent", + "browser", + "desktop", + "laravel", + "mobile", + "platform", + "user agent", + "useragent" + ], + "support": { + "issues": "https://github.com/jenssegers/agent/issues", + "source": "https://github.com/jenssegers/agent/tree/v2.6.4" + }, + "funding": [ + { + "url": "https://github.com/jenssegers", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/jenssegers/agent", + "type": "tidelift" + } + ], + "time": "2020-06-13T08:05:20+00:00" + }, + { + "name": "laminas/laminas-diactoros", + "version": "2.14.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-diactoros.git", + "reference": "6cb35f61913f06b2c91075db00f67cfd78869e28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/6cb35f61913f06b2c91075db00f67cfd78869e28", + "reference": "6cb35f61913f06b2c91075db00f67cfd78869e28", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0 || ~8.1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "conflict": { + "phpspec/prophecy": "<1.9.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-curl": "*", + "ext-dom": "*", + "ext-gd": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.9.0", + "laminas/laminas-coding-standard": "~2.3.0", + "php-http/psr7-integration-tests": "^1.1.1", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.17.0", + "vimeo/psalm": "^4.24.0" + }, + "type": "library", + "extra": { + "laminas": { + "config-provider": "Laminas\\Diactoros\\ConfigProvider", + "module": "Laminas\\Diactoros" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php", + "src/functions/create_uploaded_file.legacy.php", + "src/functions/marshal_headers_from_sapi.legacy.php", + "src/functions/marshal_method_from_sapi.legacy.php", + "src/functions/marshal_protocol_version_from_sapi.legacy.php", + "src/functions/marshal_uri_from_sapi.legacy.php", + "src/functions/normalize_server.legacy.php", + "src/functions/normalize_uploaded_files.legacy.php", + "src/functions/parse_cookie_header.legacy.php" + ], + "psr-4": { + "Laminas\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://laminas.dev", + "keywords": [ + "http", + "laminas", + "psr", + "psr-17", + "psr-7" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-diactoros/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-diactoros/issues", + "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", + "source": "https://github.com/laminas/laminas-diactoros" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-07-28T12:23:48+00:00" + }, + { + "name": "laravel/fortify", + "version": "v1.13.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/fortify.git", + "reference": "cde06120605b8bb038142b03425c67fc97d047d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/fortify/zipball/cde06120605b8bb038142b03425c67fc97d047d1", + "reference": "cde06120605b8bb038142b03425c67fc97d047d1", + "shasum": "" + }, + "require": { + "bacon/bacon-qr-code": "^2.0", + "ext-json": "*", + "illuminate/support": "^8.82|^9.0", + "php": "^7.3|^8.0", + "pragmarx/google2fa": "^7.0|^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^6.0|^7.0", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Fortify\\FortifyServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Fortify\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Backend controllers and scaffolding for Laravel authentication.", + "keywords": [ + "auth", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/fortify/issues", + "source": "https://github.com/laravel/fortify" + }, + "time": "2022-08-15T15:08:17+00:00" + }, + { + "name": "laravel/framework", + "version": "v9.25.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "e8af8c2212e3717757ea7f459a655a2e9e771109" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/e8af8c2212e3717757ea7f459a655a2e9e771109", + "reference": "e8af8c2212e3717757ea7f459a655a2e9e771109", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^2.0", + "dragonmantank/cron-expression": "^3.1", + "egulias/email-validator": "^3.1", + "ext-mbstring": "*", + "ext-openssl": "*", + "fruitcake/php-cors": "^1.2", + "laravel/serializable-closure": "^1.0", + "league/commonmark": "^2.2", + "league/flysystem": "^3.0.16", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.53.1", + "nunomaduro/termwind": "^1.13", + "php": "^8.0.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.2.2", + "symfony/console": "^6.0.3", + "symfony/error-handler": "^6.0", + "symfony/finder": "^6.0", + "symfony/http-foundation": "^6.0", + "symfony/http-kernel": "^6.0", + "symfony/mailer": "^6.0", + "symfony/mime": "^6.0", + "symfony/process": "^6.0", + "symfony/routing": "^6.0", + "symfony/var-dumper": "^6.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.198.1", + "doctrine/dbal": "^2.13.3|^3.1.4", + "fakerphp/faker": "^1.9.2", + "guzzlehttp/guzzle": "^7.2", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.4.4", + "orchestra/testbench-core": "^7.1", + "pda/pheanstalk": "^4.0", + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^9.5.8", + "predis/predis": "^1.1.9|^2.0", + "symfony/cache": "^6.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.198.1).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "ext-bcmath": "Required to use the multiple_of validation rule.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.2).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.4.4).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", + "predis/predis": "Required to use the predis connector (^1.1.9|^2.0).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2022-08-16T16:36:05+00:00" + }, + { + "name": "laravel/horizon", + "version": "v5.10.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/horizon.git", + "reference": "8cbdf156dbbc146be5527d0c5fae185a3d31fff0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/horizon/zipball/8cbdf156dbbc146be5527d0c5fae185a3d31fff0", + "reference": "8cbdf156dbbc146be5527d0c5fae185a3d31fff0", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-pcntl": "*", + "ext-posix": "*", + "illuminate/contracts": "^8.17|^9.0", + "illuminate/queue": "^8.17|^9.0", + "illuminate/support": "^8.17|^9.0", + "nesbot/carbon": "^2.17", + "php": "^7.3|^8.0", + "ramsey/uuid": "^4.0", + "symfony/error-handler": "^5.0|^6.0", + "symfony/process": "^5.0|^6.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^6.0|^7.0", + "phpunit/phpunit": "^9.0", + "predis/predis": "^1.1|^2.0" + }, + "suggest": { + "ext-redis": "Required to use the Redis PHP driver.", + "predis/predis": "Required when not using the Redis PHP driver (^1.1|^2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Horizon\\HorizonServiceProvider" + ], + "aliases": { + "Horizon": "Laravel\\Horizon\\Horizon" + } + } + }, + "autoload": { + "psr-4": { + "Laravel\\Horizon\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Dashboard and code-driven configuration for Laravel queues.", + "keywords": [ + "laravel", + "queue" + ], + "support": { + "issues": "https://github.com/laravel/horizon/issues", + "source": "https://github.com/laravel/horizon/tree/v5.10.0" + }, + "time": "2022-08-11T17:05:00+00:00" + }, + { + "name": "laravel/octane", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/octane.git", + "reference": "93dfdb57e721bceaf495bbe1c87d5d852d10e16b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/octane/zipball/93dfdb57e721bceaf495bbe1c87d5d852d10e16b", + "reference": "93dfdb57e721bceaf495bbe1c87d5d852d10e16b", + "shasum": "" + }, + "require": { + "laminas/laminas-diactoros": "^2.5", + "laravel/framework": "^8.81|^9.0", + "laravel/serializable-closure": "^1.0", + "nesbot/carbon": "^2.60", + "php": "^8.0", + "symfony/psr-http-message-bridge": "^2.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.2", + "mockery/mockery": "^1.4", + "nunomaduro/collision": "^5.10|^6.0", + "orchestra/testbench": "^6.16|^7.0", + "phpunit/phpunit": "^9.3", + "spiral/roadrunner": "^2.8.2" + }, + "bin": [ + "bin/roadrunner-worker", + "bin/swoole-server" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Octane\\OctaneServiceProvider" + ], + "aliases": { + "Octane": "Laravel\\Octane\\Facades\\Octane" + } + } + }, + "autoload": { + "psr-4": { + "Laravel\\Octane\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Supercharge your Laravel application's performance.", + "keywords": [ + "laravel", + "octane", + "roadrunner", + "swoole" + ], + "support": { + "issues": "https://github.com/laravel/octane/issues", + "source": "https://github.com/laravel/octane" + }, + "time": "2022-08-02T15:44:43+00:00" + }, + { + "name": "laravel/scout", + "version": "v9.4.10", + "source": { + "type": "git", + "url": "https://github.com/laravel/scout.git", + "reference": "45c7222ccd8f5d8ee069a85deeef799b7dcd79fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/scout/zipball/45c7222ccd8f5d8ee069a85deeef799b7dcd79fa", + "reference": "45c7222ccd8f5d8ee069a85deeef799b7dcd79fa", + "shasum": "" + }, + "require": { + "illuminate/bus": "^8.0|^9.0", + "illuminate/contracts": "^8.0|^9.0", + "illuminate/database": "^8.0|^9.0", + "illuminate/http": "^8.0|^9.0", + "illuminate/pagination": "^8.0|^9.0", + "illuminate/queue": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "php": "^7.3|^8.0" + }, + "require-dev": { + "meilisearch/meilisearch-php": "^0.19", + "mockery/mockery": "^1.0", + "orchestra/testbench": "^6.17|^7.0", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "algolia/algoliasearch-client-php": "Required to use the Algolia engine (^3.2).", + "meilisearch/meilisearch-php": "Required to use the MeiliSearch engine (^0.23)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Scout\\ScoutServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Scout\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Scout provides a driver based solution to searching your Eloquent models.", + "keywords": [ + "algolia", + "laravel", + "search" + ], + "support": { + "issues": "https://github.com/laravel/scout/issues", + "source": "https://github.com/laravel/scout" + }, + "time": "2022-07-19T14:34:57+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "09f0e9fb61829f628205b7c94906c28740ff9540" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/09f0e9fb61829f628205b7c94906c28740ff9540", + "reference": "09f0e9fb61829f628205b7c94906c28740ff9540", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "pestphp/pest": "^1.18", + "phpstan/phpstan": "^0.12.98", + "symfony/var-dumper": "^5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2022-05-16T17:09:47+00:00" + }, + { + "name": "laravel/socialite", + "version": "v5.5.4", + "source": { + "type": "git", + "url": "https://github.com/laravel/socialite.git", + "reference": "3eec261bf83690dd85812587457f093e3156dca6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/socialite/zipball/3eec261bf83690dd85812587457f093e3156dca6", + "reference": "3eec261bf83690dd85812587457f093e3156dca6", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/guzzle": "^6.0|^7.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", + "illuminate/http": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "league/oauth1-client": "^1.10.1", + "php": "^7.2|^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0", + "phpunit/phpunit": "^8.0|^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Socialite\\SocialiteServiceProvider" + ], + "aliases": { + "Socialite": "Laravel\\Socialite\\Facades\\Socialite" + } + } + }, + "autoload": { + "psr-4": { + "Laravel\\Socialite\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel wrapper around OAuth 1 & OAuth 2 libraries.", + "homepage": "https://laravel.com", + "keywords": [ + "laravel", + "oauth" + ], + "support": { + "issues": "https://github.com/laravel/socialite/issues", + "source": "https://github.com/laravel/socialite" + }, + "time": "2022-08-08T13:27:06+00:00" + }, + { + "name": "laravel/telescope", + "version": "v4.9.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/telescope.git", + "reference": "0368468e9f6d804032d18c009ed19c226572e6c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/telescope/zipball/0368468e9f6d804032d18c009ed19c226572e6c6", + "reference": "0368468e9f6d804032d18c009ed19c226572e6c6", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel/framework": "^8.37|^9.0", + "php": "^7.3|^8.0", + "symfony/var-dumper": "^5.0|^6.0" + }, + "require-dev": { + "ext-gd": "*", + "guzzlehttp/guzzle": "^6.0|^7.0", + "orchestra/testbench": "^6.0|^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Telescope\\TelescopeServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Telescope\\": "src/", + "Laravel\\Telescope\\Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Mohamed Said", + "email": "mohamed@laravel.com" + } + ], + "description": "An elegant debug assistant for the Laravel framework.", + "keywords": [ + "debugging", + "laravel", + "monitoring" + ], + "support": { + "issues": "https://github.com/laravel/telescope/issues", + "source": "https://github.com/laravel/telescope/tree/v4.9.2" + }, + "time": "2022-08-08T19:54:18+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.7.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "dff39b661e827dae6e092412f976658df82dbac5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/dff39b661e827dae6e092412f976658df82dbac5", + "reference": "dff39b661e827dae6e092412f976658df82dbac5", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.10.4|^0.11.1", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.7.2" + }, + "time": "2022-03-23T12:38:24+00:00" + }, + { + "name": "league/color-extractor", + "version": "0.3.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/color-extractor.git", + "reference": "837086ec60f50c84c611c613963e4ad2e2aec806" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/color-extractor/zipball/837086ec60f50c84c611c613963e4ad2e2aec806", + "reference": "837086ec60f50c84c611c613963e4ad2e2aec806", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "php": ">=5.4.0" + }, + "replace": { + "matthecat/colorextractor": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2", + "phpunit/phpunit": "~5" + }, + "type": "library", + "autoload": { + "psr-4": { + "": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathieu Lechat", + "email": "math.lechat@gmail.com", + "homepage": "http://matthecat.com", + "role": "Developer" + } + ], + "description": "Extract colors from an image as a human would do.", + "homepage": "https://github.com/thephpleague/color-extractor", + "keywords": [ + "color", + "extract", + "human", + "image", + "palette" + ], + "support": { + "issues": "https://github.com/thephpleague/color-extractor/issues", + "source": "https://github.com/thephpleague/color-extractor/tree/master" + }, + "time": "2016-12-15T09:30:02+00:00" + }, + { + "name": "league/commonmark", + "version": "2.3.5", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/84d74485fdb7074f4f9dd6f02ab957b1de513257", + "reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2022-07-29T10:59:45+00:00" + }, + { + "name": "league/config", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.90", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2021-08-14T12:15:32+00:00" + }, + { + "name": "league/flysystem", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "81aea9e5217084c7850cd36e1587ee4aad721c6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/81aea9e5217084c7850cd36e1587ee4aad721c6b", + "reference": "81aea9e5217084c7850cd36e1587ee4aad721c6b", + "shasum": "" + }, + "require": { + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.0", + "aws/aws-sdk-php": "^3.198.1", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^2.0", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11", + "sabre/dav": "^4.3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.2.1" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-08-14T20:48:34+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-04-17T13:12:02+00:00" + }, + { + "name": "league/oauth1-client", + "version": "v1.10.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/oauth1-client.git", + "reference": "d6365b901b5c287dd41f143033315e2f777e1167" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/d6365b901b5c287dd41f143033315e2f777e1167", + "reference": "d6365b901b5c287dd41f143033315e2f777e1167", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-openssl": "*", + "guzzlehttp/guzzle": "^6.0|^7.0", + "guzzlehttp/psr7": "^1.7|^2.0", + "php": ">=7.1||>=8.0" + }, + "require-dev": { + "ext-simplexml": "*", + "friendsofphp/php-cs-fixer": "^2.17", + "mockery/mockery": "^1.3.3", + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5||9.5" + }, + "suggest": { + "ext-simplexml": "For decoding XML-based responses." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev", + "dev-develop": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "League\\OAuth1\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Corlett", + "email": "bencorlett@me.com", + "homepage": "http://www.webcomm.com.au", + "role": "Developer" + } + ], + "description": "OAuth 1.0 Client Library", + "keywords": [ + "Authentication", + "SSO", + "authorization", + "bitbucket", + "identity", + "idp", + "oauth", + "oauth1", + "single sign on", + "trello", + "tumblr", + "twitter" + ], + "support": { + "issues": "https://github.com/thephpleague/oauth1-client/issues", + "source": "https://github.com/thephpleague/oauth1-client/tree/v1.10.1" + }, + "time": "2022-04-15T14:02:14+00:00" + }, + { + "name": "livewire/livewire", + "version": "v2.10.7", + "source": { + "type": "git", + "url": "https://github.com/livewire/livewire.git", + "reference": "fa0441bf82f1674beecb3a8ad8a4ae428736ed18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/livewire/livewire/zipball/fa0441bf82f1674beecb3a8ad8a4ae428736ed18", + "reference": "fa0441bf82f1674beecb3a8ad8a4ae428736ed18", + "shasum": "" + }, + "require": { + "illuminate/database": "^7.0|^8.0|^9.0", + "illuminate/support": "^7.0|^8.0|^9.0", + "illuminate/validation": "^7.0|^8.0|^9.0", + "league/mime-type-detection": "^1.9", + "php": "^7.2.5|^8.0", + "symfony/http-kernel": "^5.0|^6.0" + }, + "require-dev": { + "calebporzio/sushi": "^2.1", + "laravel/framework": "^7.0|^8.0|^9.0", + "mockery/mockery": "^1.3.1", + "orchestra/testbench": "^5.0|^6.0|^7.0", + "orchestra/testbench-dusk": "^5.2|^6.0|^7.0", + "phpunit/phpunit": "^8.4|^9.0", + "psy/psysh": "@stable" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Livewire\\LivewireServiceProvider" + ], + "aliases": { + "Livewire": "Livewire\\Livewire" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Caleb Porzio", + "email": "calebporzio@gmail.com" + } + ], + "description": "A front-end framework for Laravel.", + "support": { + "issues": "https://github.com/livewire/livewire/issues", + "source": "https://github.com/livewire/livewire/tree/v2.10.7" + }, + "funding": [ + { + "url": "https://github.com/livewire", + "type": "github" + } + ], + "time": "2022-08-08T13:52:53+00:00" + }, + { + "name": "martinbean/socialite-discord-provider", + "version": "dev-tadah", + "source": { + "type": "git", + "url": "https://github.com/tadah-foss/socialite-discord-provider.git", + "reference": "29049b92ca124ea8a679420b2c547bf6888d005b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tadah-foss/socialite-discord-provider/zipball/29049b92ca124ea8a679420b2c547bf6888d005b", + "reference": "29049b92ca124ea8a679420b2c547bf6888d005b", + "shasum": "" + }, + "require": { + "facade/ignition-contracts": "^1.0", + "laravel/socialite": "^4.0|^5.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "MartinBean\\Laravel\\Socialite\\DiscordServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "MartinBean\\Laravel\\Socialite\\": "src/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Martin Bean", + "email": "martin@martinbean.co.uk", + "homepage": "https://martinbean.co.uk" + } + ], + "description": "A Discord provider for Laravel Socialite.", + "keywords": [ + "discord", + "laravel", + "oauth", + "socialite" + ], + "support": { + "issues": "https://github.com/martinbean/socialite-discord-provider/issues", + "source": "https://github.com/martinbean/socialite-discord-provider" + }, + "time": "2022-08-12T22:43:44+00:00" + }, + { + "name": "maxmind-db/reader", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git", + "reference": "b1f3c0699525336d09cc5161a2861268d9f2ae5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/b1f3c0699525336d09cc5161a2861268d9f2ae5b", + "reference": "b1f3c0699525336d09cc5161a2861268d9f2ae5b", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "conflict": { + "ext-maxminddb": "<1.10.1,>=2.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "3.*", + "php-coveralls/php-coveralls": "^2.1", + "phpstan/phpstan": "*", + "phpunit/phpcov": ">=6.0.0", + "phpunit/phpunit": ">=8.0.0,<10.0.0", + "squizlabs/php_codesniffer": "3.*" + }, + "suggest": { + "ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder", + "ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder", + "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups" + }, + "type": "library", + "autoload": { + "psr-4": { + "MaxMind\\Db\\": "src/MaxMind/Db" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Gregory J. Oschwald", + "email": "goschwald@maxmind.com", + "homepage": "https://www.maxmind.com/" + } + ], + "description": "MaxMind DB Reader API", + "homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php", + "keywords": [ + "database", + "geoip", + "geoip2", + "geolocation", + "maxmind" + ], + "support": { + "issues": "https://github.com/maxmind/MaxMind-DB-Reader-php/issues", + "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.11.0" + }, + "time": "2021-10-18T15:23:10+00:00" + }, + { + "name": "maxmind/web-service-common", + "version": "v0.9.0", + "source": { + "type": "git", + "url": "https://github.com/maxmind/web-service-common-php.git", + "reference": "4dc5a3e8df38aea4ca3b1096cee3a038094e9b53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/4dc5a3e8df38aea4ca3b1096cee3a038094e9b53", + "reference": "4dc5a3e8df38aea4ca3b1096cee3a038094e9b53", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.0.3", + "ext-curl": "*", + "ext-json": "*", + "php": ">=7.2" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "3.*", + "phpstan/phpstan": "*", + "phpunit/phpunit": "^8.0 || ^9.0", + "squizlabs/php_codesniffer": "3.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "MaxMind\\Exception\\": "src/Exception", + "MaxMind\\WebService\\": "src/WebService" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Gregory Oschwald", + "email": "goschwald@maxmind.com" + } + ], + "description": "Internal MaxMind Web Service API", + "homepage": "https://github.com/maxmind/web-service-common-php", + "support": { + "issues": "https://github.com/maxmind/web-service-common-php/issues", + "source": "https://github.com/maxmind/web-service-common-php/tree/v0.9.0" + }, + "time": "2022-03-28T17:43:20+00:00" + }, + { + "name": "meilisearch/meilisearch-php", + "version": "v0.24.2", + "source": { + "type": "git", + "url": "https://github.com/meilisearch/meilisearch-php.git", + "reference": "7f7b350480bce4bc80efc9a613a820261a96ef8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/meilisearch/meilisearch-php/zipball/7f7b350480bce4bc80efc9a613a820261a96ef8b", + "reference": "7f7b350480bce4bc80efc9a613a820261a96ef8b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4 || ^8.0", + "php-http/client-common": "^2.0", + "php-http/discovery": "^1.7", + "php-http/httplug": "^2.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.0", + "guzzlehttp/guzzle": "^7.1", + "http-interop/http-factory-guzzle": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^9.5" + }, + "suggest": { + "guzzlehttp/guzzle": "Use Guzzle ^7 as HTTP client", + "http-interop/http-factory-guzzle": "Factory for guzzlehttp/guzzle" + }, + "type": "library", + "autoload": { + "psr-4": { + "MeiliSearch\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Clementine Urquizar", + "email": "clementine@meilisearch.com" + } + ], + "description": "PHP wrapper for the Meilisearch API", + "keywords": [ + "api", + "client", + "instant", + "meilisearch", + "php", + "search" + ], + "support": { + "issues": "https://github.com/meilisearch/meilisearch-php/issues", + "source": "https://github.com/meilisearch/meilisearch-php/tree/v0.24.2" + }, + "time": "2022-08-16T15:18:17+00:00" + }, + { + "name": "mobiledetect/mobiledetectlib", + "version": "2.8.39", + "source": { + "type": "git", + "url": "https://github.com/serbanghita/Mobile-Detect.git", + "reference": "0fd6753003fc870f6e229bae869cc1337c99bc45" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/0fd6753003fc870f6e229bae869cc1337c99bc45", + "reference": "0fd6753003fc870f6e229bae869cc1337c99bc45", + "shasum": "" + }, + "require": { + "php": ">=5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.35||~5.7" + }, + "type": "library", + "autoload": { + "psr-0": { + "Detection": "namespaced/" + }, + "classmap": [ + "Mobile_Detect.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Serban Ghita", + "email": "serbanghita@gmail.com", + "homepage": "http://mobiledetect.net", + "role": "Developer" + } + ], + "description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.", + "homepage": "https://github.com/serbanghita/Mobile-Detect", + "keywords": [ + "detect mobile devices", + "mobile", + "mobile detect", + "mobile detector", + "php mobile detect" + ], + "support": { + "issues": "https://github.com/serbanghita/Mobile-Detect/issues", + "source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.39" + }, + "time": "2022-02-17T19:24:25+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.8.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2022-07-24T11:55:47+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.61.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "bdf4f4fe3a3eac4de84dbec0738082a862c68ba6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bdf4f4fe3a3eac4de84dbec0738082a862c68ba6", + "reference": "bdf4f4fe3a3eac4de84dbec0738082a862c68ba6", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.0", + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2022-08-06T12:41:24+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df", + "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": ">=7.1 <8.2" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^0.12", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.2" + }, + "time": "2021-10-15T11:40:02+00:00" + }, + { + "name": "nette/utils", + "version": "v3.2.7", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/0af4e3de4df9f1543534beab255ccf459e7a2c99", + "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99", + "shasum": "" + }, + "require": { + "php": ">=7.2 <8.2" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "nette/tester": "~2.0", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.7" + }, + "time": "2022-01-24T11:29:14+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.14.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" + }, + "time": "2022-05-31T20:59:12+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v1.14.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "10065367baccf13b6e30f5e9246fa4f63a79eb1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/10065367baccf13b6e30f5e9246fa4f63a79eb1d", + "reference": "10065367baccf13b6e30f5e9246fa4f63a79eb1d", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "symfony/console": "^5.3.0|^6.0.0" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^1.0.", + "illuminate/console": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "laravel/pint": "^1.0.0", + "pestphp/pest": "^1.21.0", + "pestphp/pest-plugin-mock": "^1.0", + "phpstan/phpstan": "^1.4.6", + "phpstan/phpstan-strict-rules": "^1.1.0", + "symfony/var-dumper": "^5.2.7|^6.0.0", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v1.14.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2022-08-01T11:03:24+00:00" + }, + { + "name": "olssonm/laravel-zxcvbn", + "version": "dev-tadah", + "source": { + "type": "git", + "url": "https://github.com/tadah-foss/laravel-zxcvbn.git", + "reference": "3e6deadefbd86fc33e915d28df32336d5d03952f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tadah-foss/laravel-zxcvbn/zipball/3e6deadefbd86fc33e915d28df32336d5d03952f", + "reference": "3e6deadefbd86fc33e915d28df32336d5d03952f", + "shasum": "" + }, + "require": { + "bjeavons/zxcvbn-php": "^1.2", + "illuminate/support": "^7.0|^8.0|^9.0", + "php": "^7.3|^8.0" + }, + "require-dev": { + "orchestra/testbench": ">=4.0", + "phpunit/phpunit": "^8.0|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + }, + "laravel": { + "providers": [ + "Olssonm\\Zxcvbn\\ZxcvbnServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Olssonm\\Zxcvbn\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Olssonm\\Zxcvbn\\Test\\": "tests/" + } + }, + "scripts": { + "test": [ + "phpunit" + ] + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marcus Olsson", + "email": "contact@marcusolsson.me", + "homepage": "https://marcusolsson.me" + } + ], + "description": "Implementation of the zxcvbn project by @dropbox for Laravel. Uses zxcvbn-php by @bjeavons.", + "homepage": "https://github.com/olssonm/laravel-zxcvbn", + "keywords": [ + "laravel", + "olssonm", + "passwords", + "security", + "staple horse battery", + "validation", + "zxcvbn" + ], + "support": { + "source": "https://github.com/tadah-foss/laravel-zxcvbn/tree/tadah" + }, + "time": "2022-08-12T22:17:28+00:00" + }, + { + "name": "paragonie/ciphersweet", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/paragonie/ciphersweet.git", + "reference": "2e4606e8553ce7fcc9390753dfd6ead4a6f90f27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/ciphersweet/zipball/2e4606e8553ce7fcc9390753dfd6ead4a6f90f27", + "reference": "2e4606e8553ce7fcc9390753dfd6ead4a6f90f27", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-openssl": "*", + "paragonie/constant_time_encoding": "^1.0.4|^2", + "paragonie/sodium_compat": ">= 1.17 <2", + "php": "^5.5|^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^4|^5|^6|^7|^8|^9" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\CipherSweet\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com" + } + ], + "description": "Searchable field-level encryption library for CRM software", + "keywords": [ + "FIPS 140-2", + "crm", + "cryptography", + "encrypt", + "encryption", + "field-level encryption", + "libsodium", + "searchable encryption" + ], + "support": { + "issues": "https://github.com/paragonie/ciphersweet/issues", + "source": "https://github.com/paragonie/ciphersweet/tree/v3.2.1" + }, + "time": "2022-05-21T17:49:17+00:00" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v2.6.3", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "58c3f47f650c94ec05a151692652a868995d2938" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", + "reference": "58c3f47f650c94ec05a151692652a868995d2938", + "shasum": "" + }, + "require": { + "php": "^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^6|^7|^8|^9", + "vimeo/psalm": "^1|^2|^3|^4" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "time": "2022-06-14T06:56:20+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.100", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "shasum": "" + }, + "require": { + "php": ">= 7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" + }, + { + "name": "paragonie/sodium_compat", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/paragonie/sodium_compat.git", + "reference": "ac994053faac18d386328c91c7900f930acadf1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/ac994053faac18d386328c91c7900f930acadf1e", + "reference": "ac994053faac18d386328c91c7900f930acadf1e", + "shasum": "" + }, + "require": { + "paragonie/random_compat": ">=1", + "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9" + }, + "suggest": { + "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", + "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." + }, + "type": "library", + "autoload": { + "files": [ + "autoload.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com" + }, + { + "name": "Frank Denis", + "email": "jedisct1@pureftpd.org" + } + ], + "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists", + "keywords": [ + "Authentication", + "BLAKE2b", + "ChaCha20", + "ChaCha20-Poly1305", + "Chapoly", + "Curve25519", + "Ed25519", + "EdDSA", + "Edwards-curve Digital Signature Algorithm", + "Elliptic Curve Diffie-Hellman", + "Poly1305", + "Pure-PHP cryptography", + "RFC 7748", + "RFC 8032", + "Salpoly", + "Salsa20", + "X25519", + "XChaCha20-Poly1305", + "XSalsa20-Poly1305", + "Xchacha20", + "Xsalsa20", + "aead", + "cryptography", + "ecdh", + "elliptic curve", + "elliptic curve cryptography", + "encryption", + "libsodium", + "php", + "public-key cryptography", + "secret-key cryptography", + "side-channel resistant" + ], + "support": { + "issues": "https://github.com/paragonie/sodium_compat/issues", + "source": "https://github.com/paragonie/sodium_compat/tree/v1.17.1" + }, + "time": "2022-03-23T19:32:04+00:00" + }, + { + "name": "php-http/client-common", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/client-common.git", + "reference": "d135751167d57e27c74de674d6a30cef2dc8e054" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/client-common/zipball/d135751167d57e27c74de674d6a30cef2dc8e054", + "reference": "d135751167d57e27c74de674d6a30cef2dc8e054", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/httplug": "^2.0", + "php-http/message": "^1.6", + "php-http/message-factory": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "doctrine/instantiator": "^1.1", + "guzzlehttp/psr7": "^1.4", + "nyholm/psr7": "^1.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "phpspec/prophecy": "^1.10.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" + }, + "suggest": { + "ext-json": "To detect JSON responses with the ContentTypePlugin", + "ext-libxml": "To detect XML responses with the ContentTypePlugin", + "php-http/cache-plugin": "PSR-6 Cache plugin", + "php-http/logger-plugin": "PSR-3 Logger plugin", + "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\Common\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Common HTTP Client implementations and tools for HTTPlug", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "common", + "http", + "httplug" + ], + "support": { + "issues": "https://github.com/php-http/client-common/issues", + "source": "https://github.com/php-http/client-common/tree/2.5.0" + }, + "time": "2021-11-26T15:01:24+00:00" + }, + { + "name": "php-http/discovery", + "version": "1.14.3", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "31d8ee46d0215108df16a8527c7438e96a4d7735" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/31d8ee46d0215108df16a8527c7438e96a4d7735", + "reference": "31d8ee46d0215108df16a8527c7438e96a4d7735", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0" + }, + "require-dev": { + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1" + }, + "suggest": { + "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds installed HTTPlug implementations and PSR-7 message factories", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.14.3" + }, + "time": "2022-07-11T14:04:40+00:00" + }, + { + "name": "php-http/httplug", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "f640739f80dfa1152533976e3c112477f69274eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/f640739f80dfa1152533976e3c112477f69274eb", + "reference": "f640739f80dfa1152533976e3c112477f69274eb", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/promise": "^1.1", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.1", + "phpspec/phpspec": "^5.1 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/2.3.0" + }, + "time": "2022-02-21T09:52:22+00:00" + }, + { + "name": "php-http/message", + "version": "1.13.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/message.git", + "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message/zipball/7886e647a30a966a1a8d1dad1845b71ca8678361", + "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361", + "shasum": "" + }, + "require": { + "clue/stream-filter": "^1.5", + "php": "^7.1 || ^8.0", + "php-http/message-factory": "^1.0.2", + "psr/http-message": "^1.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.6", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0", + "laminas/laminas-diactoros": "^2.0", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "slim/slim": "^3.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "laminas/laminas-diactoros": "Used with Diactoros Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "files": [ + "src/filters.php" + ], + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", + "keywords": [ + "http", + "message", + "psr-7" + ], + "support": { + "issues": "https://github.com/php-http/message/issues", + "source": "https://github.com/php-http/message/tree/1.13.0" + }, + "time": "2022-02-11T13:41:14+00:00" + }, + { + "name": "php-http/message-factory", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/message-factory.git", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "stream", + "uri" + ], + "support": { + "issues": "https://github.com/php-http/message-factory/issues", + "source": "https://github.com/php-http/message-factory/tree/master" + }, + "time": "2015-12-19T14:08:53+00:00" + }, + { + "name": "php-http/promise", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", + "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2", + "phpspec/phpspec": "^5.1.2 || ^6.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.1.0" + }, + "time": "2020-07-07T09:29:14+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", + "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8", + "phpunit/phpunit": "^8.5.28 || ^9.5.21" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2022-07-30T15:51:26+00:00" + }, + { + "name": "pragmarx/google2fa", + "version": "v8.0.1", + "source": { + "type": "git", + "url": "https://github.com/antonioribeiro/google2fa.git", + "reference": "80c3d801b31fe165f8fe99ea085e0a37834e1be3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/80c3d801b31fe165f8fe99ea085e0a37834e1be3", + "reference": "80c3d801b31fe165f8fe99ea085e0a37834e1be3", + "shasum": "" + }, + "require": { + "paragonie/constant_time_encoding": "^1.0|^2.0", + "php": "^7.1|^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.18", + "phpunit/phpunit": "^7.5.15|^8.5|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "PragmaRX\\Google2FA\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Antonio Carlos Ribeiro", + "email": "acr@antoniocarlosribeiro.com", + "role": "Creator & Designer" + } + ], + "description": "A One Time Password Authentication package, compatible with Google Authenticator.", + "keywords": [ + "2fa", + "Authentication", + "Two Factor Authentication", + "google2fa" + ], + "support": { + "issues": "https://github.com/antonioribeiro/google2fa/issues", + "source": "https://github.com/antonioribeiro/google2fa/tree/v8.0.1" + }, + "time": "2022-06-13T21:57:56+00:00" + }, + { + "name": "propaganistas/laravel-disposable-email", + "version": "2.1.21", + "source": { + "type": "git", + "url": "https://github.com/Propaganistas/Laravel-Disposable-Email.git", + "reference": "535bbff459d94f1dd6565b6d250f0df7985c38df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Propaganistas/Laravel-Disposable-Email/zipball/535bbff459d94f1dd6565b6d250f0df7985c38df", + "reference": "535bbff459d94f1dd6565b6d250f0df7985c38df", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/cache": "^6.0|^7.0|^8.0|^9.0", + "illuminate/config": "^6.0|^7.0|^8.0|^9.0", + "illuminate/console": "^6.0|^7.0|^8.0|^9.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "illuminate/validation": "^6.0|^7.0|^8.0|^9.0", + "php": "^7.1|^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.3.3|^1.4.2", + "orchestra/testbench": "*", + "phpunit/phpunit": "*" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Propaganistas\\LaravelDisposableEmail\\DisposableEmailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Propaganistas\\LaravelDisposableEmail\\": "src/", + "Propaganistas\\LaravelDisposableEmail\\Tests\\": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Propaganistas", + "email": "Propaganistas@users.noreply.github.com" + } + ], + "description": "Disposable email validator", + "keywords": [ + "disposable", + "email", + "laravel", + "mail", + "temporary", + "throwaway", + "validator" + ], + "support": { + "issues": "https://github.com/Propaganistas/Laravel-Disposable-Email/issues", + "source": "https://github.com/Propaganistas/Laravel-Disposable-Email/tree/2.1.21" + }, + "time": "2022-07-01T02:07:38+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.11.8", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "f455acf3645262ae389b10e9beba0c358aa6994e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/f455acf3645262ae389b10e9beba0c358aa6994e", + "reference": "f455acf3645262ae389b10e9beba0c358aa6994e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.11.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.11.8" + }, + "time": "2022-07-28T14:25:11+00:00" + }, + { + "name": "pusher/pusher-php-server", + "version": "7.0.2", + "source": { + "type": "git", + "url": "https://github.com/pusher/pusher-http-php.git", + "reference": "af3eeaefc0c7959f5b3852f0a4dd5547245d33df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pusher/pusher-http-php/zipball/af3eeaefc0c7959f5b3852f0a4dd5547245d33df", + "reference": "af3eeaefc0c7959f5b3852f0a4dd5547245d33df", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "guzzlehttp/guzzle": "^7.2", + "paragonie/sodium_compat": "^1.6", + "php": "^7.3|^8.0", + "psr/log": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "overtrue/phplint": "^2.3", + "phpunit/phpunit": "^8.5|^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Pusher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Library for interacting with the Pusher REST API", + "keywords": [ + "events", + "messaging", + "php-pusher-server", + "publish", + "push", + "pusher", + "real time", + "real-time", + "realtime", + "rest", + "trigger" + ], + "support": { + "issues": "https://github.com/pusher/pusher-http-php/issues", + "source": "https://github.com/pusher/pusher-http-php/tree/7.0.2" + }, + "time": "2021-12-07T13:09:00+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8", + "symfony/polyfill-php81": "^1.23" + }, + "require-dev": { + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fakerphp/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.8", + "mockery/mockery": "^1.3", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", + "phpunit/phpunit": "^8.5 || ^9", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.2.2" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2021-10-10T03:01:02+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.4.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "373f7bacfcf3de038778ff27dcce5672ddbf4c8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/373f7bacfcf3de038778ff27dcce5672ddbf4c8a", + "reference": "373f7bacfcf3de038778ff27dcce5672ddbf4c8a", + "shasum": "" + }, + "require": { + "brick/math": "^0.8 || ^0.9 || ^0.10", + "ext-ctype": "*", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5 || ^9", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.4.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2022-08-05T17:58:37+00:00" + }, + { + "name": "spatie/color", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/spatie/color.git", + "reference": "d6e9b2766d8e24aab835e414248728762bd63530" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/color/zipball/d6e9b2766d8e24aab835e414248728762bd63530", + "reference": "d6e9b2766d8e24aab835e414248728762bd63530", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5||^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Color\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian De Deyne", + "email": "sebastian@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A little library to handle color conversions", + "homepage": "https://github.com/spatie/color", + "keywords": [ + "color", + "conversion", + "rgb", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/color/issues", + "source": "https://github.com/spatie/color/tree/1.5.2" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-06-24T21:50:06+00:00" + }, + { + "name": "stevebauman/location", + "version": "v6.5.0", + "source": { + "type": "git", + "url": "https://github.com/stevebauman/location.git", + "reference": "8ceac08537058138071534d49b17556cae2b656e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stevebauman/location/zipball/8ceac08537058138071534d49b17556cae2b656e", + "reference": "8ceac08537058138071534d49b17556cae2b656e", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "geoip2/geoip2": "^2.0", + "illuminate/support": "^5.0|^6.0|^7.0|^8.0|^9.0", + "php": ">=7.3" + }, + "require-dev": { + "mockery/mockery": "~0.9|^1.0", + "orchestra/testbench": "~3.2|~4.0|^6.0|^7.0", + "pestphp/pest": "^1.21" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Stevebauman\\Location\\LocationServiceProvider" + ], + "aliases": { + "Location": "Stevebauman\\Location\\Facades\\Location" + } + } + }, + "autoload": { + "psr-4": { + "Stevebauman\\Location\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Steve Bauman", + "email": "steven_bauman@outlook.com" + } + ], + "description": "Retrieve a user's location by their IP Address", + "keywords": [ + "IP", + "geo", + "geo-location", + "geoip", + "laravel", + "location", + "php" + ], + "support": { + "issues": "https://github.com/stevebauman/location/issues", + "source": "https://github.com/stevebauman/location/tree/v6.5.0" + }, + "time": "2022-05-12T13:11:31+00:00" + }, + { + "name": "symfony/console", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "43fcb5c5966b43c56bcfa481368d90d748936ab8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/43fcb5c5966b43c56bcfa481368d90d748936ab8", + "reference": "43fcb5c5966b43c56bcfa481368d90d748936ab8", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-22T14:17:57+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "0dd5e36b80e1de97f8f74ed7023ac2b837a36443" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/0dd5e36b80e1de97f8f74ed7023ac2b837a36443", + "reference": "0dd5e36b80e1de97f8f74ed7023ac2b837a36443", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T17:24:16+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "736e42db3fd586d91820355988698e434e1d8419" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/736e42db3fd586d91820355988698e434e1d8419", + "reference": "736e42db3fd586d91820355988698e434e1d8419", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-29T07:42:06+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-05T16:51:07+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/39696bff2c2970b3779a5cac7bf9f0b88fc2b709", + "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-29T07:42:06+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "b03712c93759a81fc243ecc18ec4637958afebdb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b03712c93759a81fc243ecc18ec4637958afebdb", + "reference": "b03712c93759a81fc243ecc18ec4637958afebdb", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-27T15:50:51+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "0692bc185a1dbb54864686a1fc6785667279da70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/0692bc185a1dbb54864686a1fc6785667279da70", + "reference": "0692bc185a1dbb54864686a1fc6785667279da70", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.1", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^6.1", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^6.1", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-29T12:59:10+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "b2db228a93278863d1567f90d7caf26922dbfede" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/b2db228a93278863d1567f90d7caf26922dbfede", + "reference": "b2db228a93278863d1567f90d7caf26922dbfede", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/http-kernel": "<5.4" + }, + "require-dev": { + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/messenger": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-27T15:50:51+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "9c0247994fc6584da8591ba64b2bffaace9df87d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/9c0247994fc6584da8591ba64b2bffaace9df87d", + "reference": "9c0247994fc6584da8591ba64b2bffaace9df87d", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-20T13:46:29+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v6.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "a3016f5442e28386ded73c43a32a5b68586dd1c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a3016f5442e28386ded73c43a32a5b68586dd1c4", + "reference": "a3016f5442e28386ded73c43a32a5b68586dd1c4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v6.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "433d05519ce6990bf3530fba6957499d327395c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-10T07:21:04+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/process", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/a6506e99cfad7059b1ab5cab395854a0a0c21292", + "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T17:24:16+00:00" + }, + { + "name": "symfony/psr-http-message-bridge", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/psr-http-message-bridge.git", + "reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34", + "reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0", + "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0" + }, + "require-dev": { + "nyholm/psr7": "^1.1", + "psr/log": "^1.1 || ^2 || ^3", + "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0", + "symfony/config": "^4.4 || ^5.0 || ^6.0", + "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0", + "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0", + "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", + "symfony/phpunit-bridge": "^5.4@dev || ^6.0" + }, + "suggest": { + "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-main": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\PsrHttpMessage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "PSR HTTP message bridge", + "homepage": "http://symfony.com", + "keywords": [ + "http", + "http-message", + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/symfony/psr-http-message-bridge/issues", + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-11-05T13:13:39+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "ef9108b3a88045b7546e808fb404ddb073dd35ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/ef9108b3a88045b7546e808fb404ddb073dd35ea", + "reference": "ef9108b3a88045b7546e808fb404ddb073dd35ea", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-20T15:00:40+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/925e713fe8fcacf6bc05e936edd8dd5441a21239", + "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-30T19:18:58+00:00" + }, + { + "name": "symfony/string", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "f35241f45c30bcd9046af2bb200a7086f70e1d6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/f35241f45c30bcd9046af2bb200a7086f70e1d6b", + "reference": "f35241f45c30bcd9046af2bb200a7086f70e1d6b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-27T15:50:51+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "b042e16087d298d08c1f013ff505d16c12a3b1be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/b042e16087d298d08c1f013ff505d16c12a3b1be", + "reference": "b042e16087d298d08c1f013ff505d16c12a3b1be", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.3|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-20T13:46:29+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/606be0f48e05116baef052f7f3abdb345c8e02cc", + "reference": "606be0f48e05116baef052f7f3abdb345c8e02cc", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T17:24:16+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.1.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "d5a5e44a2260c5eb5e746bf4f1fbd12ee6ceb427" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d5a5e44a2260c5eb5e746bf4f1fbd12ee6ceb427", + "reference": "d5a5e44a2260c5eb5e746bf4f1fbd12ee6ceb427", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<5.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.1.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-07-20T13:46:29+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c", + "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4" + }, + "time": "2021-12-08T09:12:39+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.4.1", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.4-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2021-12-12T23:22:04+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-03-08T17:03:00+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "barryvdh/laravel-debugbar", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-debugbar.git", + "reference": "3372ed65e6d2039d663ed19aa699956f9d346271" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/3372ed65e6d2039d663ed19aa699956f9d346271", + "reference": "3372ed65e6d2039d663ed19aa699956f9d346271", + "shasum": "" + }, + "require": { + "illuminate/routing": "^7|^8|^9", + "illuminate/session": "^7|^8|^9", + "illuminate/support": "^7|^8|^9", + "maximebf/debugbar": "^1.17.2", + "php": ">=7.2.5", + "symfony/finder": "^5|^6" + }, + "require-dev": { + "mockery/mockery": "^1.3.3", + "orchestra/testbench-dusk": "^5|^6|^7", + "phpunit/phpunit": "^8.5|^9.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\Debugbar\\ServiceProvider" + ], + "aliases": { + "Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Barryvdh\\Debugbar\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "PHP Debugbar integration for Laravel", + "keywords": [ + "debug", + "debugbar", + "laravel", + "profiler", + "webprofiler" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-debugbar/issues", + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.7.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2022-07-11T09:26:42+00:00" + }, + { + "name": "composer/class-map-generator", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/class-map-generator.git", + "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/1e1cb2b791facb2dfe32932a7718cf2571187513", + "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513", + "shasum": "" + }, + "require": { + "composer/pcre": "^2 || ^3", + "php": "^7.2 || ^8.0", + "symfony/finder": "^4.4 || ^5.3 || ^6" + }, + "require-dev": { + "phpstan/phpstan": "^1.6", + "phpstan/phpstan-deprecation-rules": "^1", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/filesystem": "^5.4 || ^6", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\ClassMapGenerator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Utilities to scan PHP code and generate class maps.", + "keywords": [ + "classmap" + ], + "support": { + "issues": "https://github.com/composer/class-map-generator/issues", + "source": "https://github.com/composer/class-map-generator/tree/1.0.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-06-19T11:31:27+00:00" + }, + { + "name": "composer/pcre", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.0.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-02-25T20:21:48+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/37f751c67a5372d4e26353bd9384bc03744ec77b", + "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "symfony/phpunit-bridge": "^4.4 || ^5.2" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.20-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.20.0" + }, + "time": "2022-07-20T13:12:54+00:00" + }, + { + "name": "filp/whoops", + "version": "2.14.5", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.14.5" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2022-01-07T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.15.4", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "853dea1fa866a52a93beccc4e5affdc49b98e7d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/853dea1fa866a52a93beccc4e5affdc49b98e7d5", + "reference": "853dea1fa866a52a93beccc4e5affdc49b98e7d5", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0", + "illuminate/contracts": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "php": "^7.3|^8.0" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2022-08-17T13:17:15+00:00" + }, + { + "name": "maximebf/debugbar", + "version": "v1.18.0", + "source": { + "type": "git", + "url": "https://github.com/maximebf/php-debugbar.git", + "reference": "0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6", + "reference": "0d44b75f3b5d6d41ae83b79c7a4bceae7fbc78b6", + "shasum": "" + }, + "require": { + "php": "^7.1|^8", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^2.6|^3|^4|^5|^6" + }, + "require-dev": { + "phpunit/phpunit": "^7.5.20 || ^9.4.2", + "twig/twig": "^1.38|^2.7|^3.0" + }, + "suggest": { + "kriswallsmith/assetic": "The best way to manage assets", + "monolog/monolog": "Log using Monolog", + "predis/predis": "Redis storage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "DebugBar\\": "src/DebugBar/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maxime Bouroumeau-Fuseau", + "email": "maxime.bouroumeau@gmail.com", + "homepage": "http://maximebf.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Debug bar in the browser for php application", + "homepage": "https://github.com/maximebf/php-debugbar", + "keywords": [ + "debug", + "debugbar" + ], + "support": { + "issues": "https://github.com/maximebf/php-debugbar/issues", + "source": "https://github.com/maximebf/php-debugbar/tree/v1.18.0" + }, + "time": "2021-12-27T18:49:48+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", + "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.5.0" + }, + "time": "2022-01-20T13:18:17+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v6.2.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "5f058f7e39278b701e455b3c82ec5298cf001d89" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/5f058f7e39278b701e455b3c82ec5298cf001d89", + "reference": "5f058f7e39278b701e455b3c82ec5298cf001d89", + "shasum": "" + }, + "require": { + "facade/ignition-contracts": "^1.0.2", + "filp/whoops": "^2.14.5", + "php": "^8.0.0", + "symfony/console": "^6.0.2" + }, + "require-dev": { + "brianium/paratest": "^6.4.1", + "laravel/framework": "^9.7", + "laravel/pint": "^0.2.1", + "nunomaduro/larastan": "^1.0.2", + "nunomaduro/mock-final-classes": "^1.1.0", + "orchestra/testbench": "^7.3.0", + "phpunit/phpunit": "^9.5.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "6.x-dev" + }, + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2022-06-27T16:11:16+00:00" + }, + { + "name": "nunomaduro/larastan", + "version": "v2.1.12", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/larastan.git", + "reference": "65cfc54fa195e509c2e2be119761552017d22a56" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/65cfc54fa195e509c2e2be119761552017d22a56", + "reference": "65cfc54fa195e509c2e2be119761552017d22a56", + "shasum": "" + }, + "require": { + "composer/class-map-generator": "^1.0", + "composer/pcre": "^3.0", + "ext-json": "*", + "illuminate/console": "^9", + "illuminate/container": "^9", + "illuminate/contracts": "^9", + "illuminate/database": "^9", + "illuminate/http": "^9", + "illuminate/pipeline": "^9", + "illuminate/support": "^9", + "mockery/mockery": "^1.4.4", + "php": "^8.0.2", + "phpmyadmin/sql-parser": "^5.5", + "phpstan/phpstan": "^1.8.1" + }, + "require-dev": { + "nikic/php-parser": "^4.13.2", + "orchestra/testbench": "^7.0.0", + "phpunit/phpunit": "^9.5.11" + }, + "suggest": { + "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" + }, + "type": "phpstan-extension", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Larastan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", + "keywords": [ + "PHPStan", + "code analyse", + "code analysis", + "larastan", + "laravel", + "package", + "php", + "static analysis" + ], + "support": { + "issues": "https://github.com/nunomaduro/larastan/issues", + "source": "https://github.com/nunomaduro/larastan/tree/v2.1.12" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/canvural", + "type": "github" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2022-07-17T15:23:33+00:00" + }, + { + "name": "phpmyadmin/sql-parser", + "version": "5.5.0", + "source": { + "type": "git", + "url": "https://github.com/phpmyadmin/sql-parser.git", + "reference": "8ab99cd0007d880f49f5aa1807033dbfa21b1cb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/8ab99cd0007d880f49f5aa1807033dbfa21b1cb5", + "reference": "8ab99cd0007d880f49f5aa1807033dbfa21b1cb5", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "symfony/polyfill-mbstring": "^1.3" + }, + "conflict": { + "phpmyadmin/motranslator": "<3.0" + }, + "require-dev": { + "phpmyadmin/coding-standard": "^3.0", + "phpmyadmin/motranslator": "^4.0 || ^5.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.2", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/php-code-coverage": "*", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.11", + "zumba/json-serializer": "^3.0" + }, + "suggest": { + "ext-mbstring": "For best performance", + "phpmyadmin/motranslator": "Translate messages to your favorite locale" + }, + "bin": [ + "bin/highlight-query", + "bin/lint-query", + "bin/tokenize-query" + ], + "type": "library", + "autoload": { + "psr-4": { + "PhpMyAdmin\\SqlParser\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "The phpMyAdmin Team", + "email": "developers@phpmyadmin.net", + "homepage": "https://www.phpmyadmin.net/team/" + } + ], + "description": "A validating SQL lexer and parser with a focus on MySQL dialect.", + "homepage": "https://github.com/phpmyadmin/sql-parser", + "keywords": [ + "analysis", + "lexer", + "parser", + "sql" + ], + "support": { + "issues": "https://github.com/phpmyadmin/sql-parser/issues", + "source": "https://github.com/phpmyadmin/sql-parser" + }, + "time": "2021-12-09T04:31:52+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "c53312ecc575caf07b0e90dee43883fdf90ca67c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c53312ecc575caf07b0e90dee43883fdf90ca67c", + "reference": "c53312ecc575caf07b0e90dee43883fdf90ca67c", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "support": { + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/1.8.2" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpstan", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2022-07-20T09:57:31+00:00" + }, + { + "name": "spatie/backtrace", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "ext-json": "*", + "phpunit/phpunit": "^9.3", + "symfony/var-dumper": "^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/backtrace/issues", + "source": "https://github.com/spatie/backtrace/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2021-11-09T10:57:15+00:00" + }, + { + "name": "spatie/flare-client-php", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "b1b974348750925b717fa8c8b97a0db0d1aa40ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/b1b974348750925b717fa8c8b97a0db0d1aa40ca", + "reference": "b1b974348750925b717fa8c8b97a0db0d1aa40ca", + "shasum": "" + }, + "require": { + "illuminate/pipeline": "^8.0|^9.0", + "php": "^8.0", + "spatie/backtrace": "^1.2", + "symfony/http-foundation": "^5.0|^6.0", + "symfony/mime": "^5.2|^6.0", + "symfony/process": "^5.2|^6.0", + "symfony/var-dumper": "^5.2|^6.0" + }, + "require-dev": { + "dms/phpunit-arraysubset-asserts": "^0.3.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/phpunit-snapshot-assertions": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/spatie/flare-client-php", + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/flare-client-php/issues", + "source": "https://github.com/spatie/flare-client-php/tree/1.3.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-08-08T10:10:20+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "997363fbcce809b1e55f571997d49017f9c623d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/997363fbcce809b1e55f571997d49017f9c623d9", + "reference": "997363fbcce809b1e55f571997d49017f9c623d9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "monolog/monolog": "^2.0", + "php": "^8.0", + "spatie/flare-client-php": "^1.1", + "symfony/console": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "mockery/mockery": "^1.4", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "symfony/process": "^5.4|^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for PHP applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/ignition/issues", + "source": "https://github.com/spatie/ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-05-16T13:16:07+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "fe37a0eafe6ea040804255c70e9808af13314f87" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/fe37a0eafe6ea040804255c70e9808af13314f87", + "reference": "fe37a0eafe6ea040804255c70e9808af13314f87", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^8.77|^9.0", + "monolog/monolog": "^2.3", + "php": "^8.0", + "spatie/flare-client-php": "^1.0.1", + "spatie/ignition": "^1.2.4", + "symfony/console": "^5.0|^6.0", + "symfony/var-dumper": "^5.0|^6.0" + }, + "require-dev": { + "filp/whoops": "^2.14", + "livewire/livewire": "^2.8|dev-develop", + "mockery/mockery": "^1.4", + "nunomaduro/larastan": "^1.0", + "orchestra/testbench": "^6.23|^7.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/laravel-ray": "^1.27" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\LaravelIgnition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/laravel-ignition/issues", + "source": "https://github.com/spatie/laravel-ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-06-17T06:28:57+00:00" + } + ], + "aliases": [ + { + "package": "arandilopez/laravel-profane", + "version": "dev-tadah", + "alias": "0.5.0", + "alias_normalized": "0.5.0.0" + }, + { + "package": "bjorn-voesten/ciphersweet-for-laravel", + "version": "dev-tadah", + "alias": "1.3.0", + "alias_normalized": "1.3.0.0" + }, + { + "package": "martinbean/socialite-discord-provider", + "version": "dev-tadah", + "alias": "1.2.0", + "alias_normalized": "1.2.0.0" + }, + { + "package": "olssonm/laravel-zxcvbn", + "version": "dev-tadah", + "alias": "4.5", + "alias_normalized": "4.5.0.0" + } + ], + "minimum-stability": "dev", + "stability-flags": { + "arandilopez/laravel-profane": 20, + "bjorn-voesten/ciphersweet-for-laravel": 20, + "martinbean/socialite-discord-provider": 20, + "olssonm/laravel-zxcvbn": 20 + }, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.1" + }, + "platform-dev": [], + "platform-overrides": { + "ext-pcntl": "8.1", + "ext-posix": "8.1" + }, + "plugin-api-version": "2.2.0" +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..d54098b --- /dev/null +++ b/config/app.php @@ -0,0 +1,217 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'base_url' => parse_url(env('APP_URL', 'http://localhost'))['host'], + 'url' => env('APP_URL', 'http://localhost'), + + 'asset_url' => env('ASSET_URL', null), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => env('APP_TIMEZONE', 'UTC'), + + 'email_verification' => (bool) env('EMAIL_VERIFICATION', false), + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en_US', + + 'available_locales' => [ + 'English' => 'en_US', + ], + + 'country_flags' => [ + 'en_US' => "us", + ], + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + + /* + * Package Service Providers... + */ + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\FortifyServiceProvider::class, + App\Providers\AuthServiceProvider::class, + App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + App\Providers\TelescopeServiceProvider::class, + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => Facade::defaultAliases()->merge([ + 'Admin' => App\Roles\Admin::class, + 'Economy' => App\Roles\Economy::class, + 'Forums' => App\Roles\Forums::class, + 'GameServers' => App\Roles\GameServers::class, + 'Places' => App\Roles\Places::class, + 'SelfHostedServers' => App\Roles\SelfHostedServers::class, + 'Users' => App\Roles\Users::class, + 'GameServerState' => App\Enums\GameServerState::class, + 'ArbiterLogSeverity' => App\Enums\ArbiterLogSeverity::class, + ])->toArray(), + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..d8c6cee --- /dev/null +++ b/config/auth.php @@ -0,0 +1,111 @@ + [ + 'guard' => 'web', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => App\Models\User::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_resets', + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | times out and the user is prompted to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => 10800, + +]; diff --git a/config/broadcasting.php b/config/broadcasting.php new file mode 100644 index 0000000..dca0e6b --- /dev/null +++ b/config/broadcasting.php @@ -0,0 +1,70 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY', 'app-key'), + 'secret' => env('PUSHER_APP_SECRET', 'app-secret'), + 'app_id' => env('PUSHER_APP_ID', 'app-id'), + 'options' => [ + 'host' => env('PUSHER_HOST', 'soketi'), + 'port' => env('PUSHER_PORT', 6001), + 'scheme' => env('PUSHER_SCHEME', 'http'), + 'encrypted' => true, + 'useTLS' => env('PUSHER_SCHEME') === 'https', + ], + 'client_options' => [ + // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..985b381 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,110 @@ + 'redis', + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb", "octane", "null" + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + 'lock_connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'cache', + 'lock_connection' => 'default', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'), + +]; diff --git a/config/ciphersweet.php b/config/ciphersweet.php new file mode 100644 index 0000000..ac5972f --- /dev/null +++ b/config/ciphersweet.php @@ -0,0 +1,21 @@ + env('CIPHERSWEET_KEY'), + + /* + * You may specify which encryption algorithm has to be used + * to encrypt all attributes. + * + * Supported: "modern", "fips" + */ + 'crypto' => env('CIPHERSWEET_CRYPTO', 'modern'), + +]; \ No newline at end of file diff --git a/config/cors.php b/config/cors.php new file mode 100644 index 0000000..558369d --- /dev/null +++ b/config/cors.php @@ -0,0 +1,34 @@ + ['api/*'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => ['*'], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..0faebae --- /dev/null +++ b/config/database.php @@ -0,0 +1,147 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/config/disposable-email.php b/config/disposable-email.php new file mode 100644 index 0000000..3537d7f --- /dev/null +++ b/config/disposable-email.php @@ -0,0 +1,70 @@ + 'https://cdn.jsdelivr.net/gh/disposable/disposable-email-domains@master/domains.json', + + /* + |-------------------------------------------------------------------------- + | Fetch class + |-------------------------------------------------------------------------- + | + | The class responsible for fetching the contents of the source url. + | The default implementation makes use of file_get_contents and + | json_decode and will probably suffice for most applications. + | + | If your application has different needs (e.g. behind a proxy) then you + | can define a custom fetch class here that carries out the fetching. + | Your custom class should implement the Fetcher contract. + | + */ + + 'fetcher' => \Propaganistas\LaravelDisposableEmail\Fetcher\DefaultFetcher::class, + + /* + |-------------------------------------------------------------------------- + | Storage Path + |-------------------------------------------------------------------------- + | + | The location where the retrieved domains list should be stored locally. + | The path should be accessible and writable by the web server. A good + | place for storing the list is in the framework's own storage path. + | + */ + + 'storage' => storage_path('framework/disposable_domains.json'), + + /* + |-------------------------------------------------------------------------- + | Cache Configuration + |-------------------------------------------------------------------------- + | + | Here you may define whether the disposable domains list should be cached. + | If you disable caching or when the cache is empty, the list will be + | fetched from local storage instead. + | + | You can optionally specify an alternate cache connection or modify the + | cache key as desired. + | + */ + + 'cache' => [ + 'enabled' => true, + 'store' => 'default', + 'key' => 'disposable_email.domains', + ], + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 0000000..9f851de --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,86 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been setup for each driver as an example of the required options. + | + | Supported Drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + ], + + 'resources' => [ + 'driver' => 'local', + 'root' => resource_path(), + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + ], + + 'content' => [ + 'driver' => 'local', + 'root' => storage_path('app/content'), + 'url' => env('APP_URL').'/content', + 'visibility' => 'public', + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + public_path('content') => storage_path('app/content') + ], + +]; diff --git a/config/fortify.php b/config/fortify.php new file mode 100644 index 0000000..7bd766b --- /dev/null +++ b/config/fortify.php @@ -0,0 +1,143 @@ + 'web', + + /* + |-------------------------------------------------------------------------- + | Fortify Password Broker + |-------------------------------------------------------------------------- + | + | Here you may specify which password broker Fortify can use when a user + | is resetting their password. This configured value should match one + | of your password brokers setup in your "auth" configuration file. + | + */ + + 'passwords' => 'users', + + /* + |-------------------------------------------------------------------------- + | Username / Email + |-------------------------------------------------------------------------- + | + | This value defines which model attribute should be considered as your + | application's "username" field. Typically, this might be the email + | address of the users but you are free to change this value here. + | + | Out of the box, Fortify expects forgot password and reset password + | requests to have a field named 'email'. If the application uses + | another name for the field you may define it below as needed. + | + */ + + 'username' => 'username', + + 'email' => 'email', + + /* + |-------------------------------------------------------------------------- + | Home Path + |-------------------------------------------------------------------------- + | + | Here you may configure the path where users will get redirected during + | authentication or password reset when the operations are successful + | and the user is authenticated. You are free to change this value. + | + */ + + 'home' => RouteServiceProvider::HOME, + + /* + |-------------------------------------------------------------------------- + | Fortify Routes Prefix / Subdomain + |-------------------------------------------------------------------------- + | + | Here you may specify which prefix Fortify will assign to all the routes + | that it registers with the application. If necessary, you may change + | subdomain under which all of the Fortify routes will be available. + | + */ + + 'prefix' => '', + + 'domain' => null, + + /* + |-------------------------------------------------------------------------- + | Fortify Routes Middleware + |-------------------------------------------------------------------------- + | + | Here you may specify which middleware Fortify will assign to the routes + | that it registers with the application. If necessary, you may change + | these middleware but typically this provided default is preferred. + | + */ + + 'middleware' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Rate Limiting + |-------------------------------------------------------------------------- + | + | By default, Fortify will throttle logins to five requests per minute for + | every email and IP address combination. However, if you would like to + | specify a custom rate limiter to call then you may specify it here. + | + */ + + 'limiters' => [ + 'login' => 'login', + 'two-factor' => 'two-factor', + ], + + /* + |-------------------------------------------------------------------------- + | Register View Routes + |-------------------------------------------------------------------------- + | + | Here you may specify if the routes returning views should be disabled as + | you may not need them when building your own application. This may be + | especially true if you're writing a custom single-page application. + | + */ + + 'views' => true, + + /* + |-------------------------------------------------------------------------- + | Features + |-------------------------------------------------------------------------- + | + | Some of the Fortify features are optional. You may disable the features + | by removing them from this array. You're free to only remove some of + | these features or you can even remove all of these if you need to. + | + */ + + 'features' => [ + Features::registration(), + Features::resetPasswords(), + Features::emailVerification(), + Features::twoFactorAuthentication([ + 'confirmPassword' => true, + ]), + ], + +]; diff --git a/config/hashing.php b/config/hashing.php new file mode 100644 index 0000000..3a75e20 --- /dev/null +++ b/config/hashing.php @@ -0,0 +1,52 @@ + 'argon2id', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 65536, + 'threads' => 1, + 'time' => 4, + ], + +]; diff --git a/config/horizon.php b/config/horizon.php new file mode 100644 index 0000000..15e6b98 --- /dev/null +++ b/config/horizon.php @@ -0,0 +1,203 @@ + env('HORIZON_DOMAIN', null), + + /* + |-------------------------------------------------------------------------- + | Horizon Path + |-------------------------------------------------------------------------- + | + | This is the URI path where Horizon will be accessible from. Feel free + | to change this path to anything you like. Note that the URI will not + | affect the paths of its internal API that aren't exposed to users. + | + */ + + 'path' => env('HORIZON_PATH', 'horizon'), + + /* + |-------------------------------------------------------------------------- + | Horizon Redis Connection + |-------------------------------------------------------------------------- + | + | This is the name of the Redis connection where Horizon will store the + | meta information required for it to function. It includes the list + | of supervisors, failed jobs, job metrics, and other information. + | + */ + + 'use' => 'default', + + /* + |-------------------------------------------------------------------------- + | Horizon Redis Prefix + |-------------------------------------------------------------------------- + | + | This prefix will be used when storing all Horizon data in Redis. You + | may modify the prefix when you are running multiple installations + | of Horizon on the same server so that they don't have problems. + | + */ + + 'prefix' => env( + 'HORIZON_PREFIX', + Str::slug(env('APP_NAME', 'laravel'), '_').'_horizon:' + ), + + /* + |-------------------------------------------------------------------------- + | Horizon Route Middleware + |-------------------------------------------------------------------------- + | + | These middleware will get attached onto each Horizon route, giving you + | the chance to add your own middleware to this list or change any of + | the existing middleware. Or, you can simply stick with this list. + | + */ + + 'middleware' => [ + 'web', + Authorize::class, + ToolGuard::class + ], + + /* + |-------------------------------------------------------------------------- + | Queue Wait Time Thresholds + |-------------------------------------------------------------------------- + | + | This option allows you to configure when the LongWaitDetected event + | will be fired. Every connection / queue combination may have its + | own, unique threshold (in seconds) before this event is fired. + | + */ + + 'waits' => [ + 'redis:default' => 60, + ], + + /* + |-------------------------------------------------------------------------- + | Job Trimming Times + |-------------------------------------------------------------------------- + | + | Here you can configure for how long (in minutes) you desire Horizon to + | persist the recent and failed jobs. Typically, recent jobs are kept + | for one hour while all failed jobs are stored for an entire week. + | + */ + + 'trim' => [ + 'recent' => 60, + 'pending' => 60, + 'completed' => 60, + 'recent_failed' => 10080, + 'failed' => 10080, + 'monitored' => 10080, + ], + + /* + |-------------------------------------------------------------------------- + | Metrics + |-------------------------------------------------------------------------- + | + | Here you can configure how many snapshots should be kept to display in + | the metrics graph. This will get used in combination with Horizon's + | `horizon:snapshot` schedule to define how long to retain metrics. + | + */ + + 'metrics' => [ + 'trim_snapshots' => [ + 'job' => 24, + 'queue' => 24, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Fast Termination + |-------------------------------------------------------------------------- + | + | When this option is enabled, Horizon's "terminate" command will not + | wait on all of the workers to terminate unless the --wait option + | is provided. Fast termination can shorten deployment delay by + | allowing a new instance of Horizon to start while the last + | instance will continue to terminate each of its workers. + | + */ + + 'fast_termination' => false, + + /* + |-------------------------------------------------------------------------- + | Memory Limit (MB) + |-------------------------------------------------------------------------- + | + | This value describes the maximum amount of memory the Horizon master + | supervisor may consume before it is terminated and restarted. For + | configuring these limits on your workers, see the next section. + | + */ + + 'memory_limit' => 64, + + /* + |-------------------------------------------------------------------------- + | Queue Worker Configuration + |-------------------------------------------------------------------------- + | + | Here you may define the queue worker settings used by your application + | in all environments. These supervisors and settings handle all your + | queued jobs and will be provisioned by Horizon during deployment. + | + */ + + 'defaults' => [ + 'supervisor-1' => [ + 'connection' => 'redis', + 'queue' => ['default'], + 'balance' => 'auto', + 'maxProcesses' => 1, + 'maxTime' => 0, + 'maxJobs' => 0, + 'memory' => 128, + 'tries' => 1, + 'timeout' => 60, + 'nice' => 0, + ], + ], + + 'environments' => [ + 'production' => [ + 'supervisor-1' => [ + 'maxProcesses' => 10, + 'balanceMaxShift' => 1, + 'balanceCooldown' => 3, + ], + ], + + 'local' => [ + 'supervisor-1' => [ + 'maxProcesses' => 3, + ], + ], + ], +]; diff --git a/config/livewire.php b/config/livewire.php new file mode 100644 index 0000000..59f8d5c --- /dev/null +++ b/config/livewire.php @@ -0,0 +1,158 @@ + 'App\\Http\\Livewire', + + /* + |-------------------------------------------------------------------------- + | View Path + |-------------------------------------------------------------------------- + | + | This value sets the path for Livewire component views. This affects + | file manipulation helper commands like `artisan make:livewire`. + | + */ + + 'view_path' => resource_path('views/livewire'), + + /* + |-------------------------------------------------------------------------- + | Layout + |-------------------------------------------------------------------------- + | The default layout view that will be used when rendering a component via + | Route::get('/some-endpoint', SomeComponent::class);. In this case the + | the view returned by SomeComponent will be wrapped in "layouts.app" + | + */ + + 'layout' => 'layouts.app', + + /* + |-------------------------------------------------------------------------- + | Livewire Assets URL + |-------------------------------------------------------------------------- + | + | This value sets the path to Livewire JavaScript assets, for cases where + | your app's domain root is not the correct path. By default, Livewire + | will load its JavaScript assets from the app's "relative root". + | + | Examples: "/assets", "myurl.com/app". + | + */ + + 'asset_url' => null, + + /* + |-------------------------------------------------------------------------- + | Livewire App URL + |-------------------------------------------------------------------------- + | + | This value should be used if livewire assets are served from CDN. + | Livewire will communicate with an app through this url. + | + | Examples: "https://my-app.com", "myurl.com/app". + | + */ + + 'app_url' => null, + + /* + |-------------------------------------------------------------------------- + | Livewire Endpoint Middleware Group + |-------------------------------------------------------------------------- + | + | This value sets the middleware group that will be applied to the main + | Livewire "message" endpoint (the endpoint that gets hit everytime + | a Livewire component updates). It is set to "web" by default. + | + */ + + 'middleware_group' => 'web', + + /* + |-------------------------------------------------------------------------- + | Livewire Temporary File Uploads Endpoint Configuration + |-------------------------------------------------------------------------- + | + | Livewire handles file uploads by storing uploads in a temporary directory + | before the file is validated and stored permanently. All file uploads + | are directed to a global endpoint for temporary storage. The config + | items below are used for customizing the way the endpoint works. + | + */ + + 'temporary_file_upload' => [ + 'disk' => null, // Example: 'local', 's3' Default: 'default' + 'rules' => null, // Example: ['file', 'mimes:png,jpg'] Default: ['required', 'file', 'max:12288'] (12MB) + 'directory' => null, // Example: 'tmp' Default 'livewire-tmp' + 'middleware' => null, // Example: 'throttle:5,1' Default: 'throttle:60,1' + 'preview_mimes' => [ // Supported file types for temporary pre-signed file URLs. + 'png', 'gif', 'bmp', 'svg', 'wav', 'mp4', + 'mov', 'avi', 'wmv', 'mp3', 'm4a', + 'jpg', 'jpeg', 'mpga', 'webp', 'wma', + ], + 'max_upload_time' => 5, // Max duration (in minutes) before an upload gets invalidated. + ], + + /* + |-------------------------------------------------------------------------- + | Manifest File Path + |-------------------------------------------------------------------------- + | + | This value sets the path to the Livewire manifest file. + | The default should work for most cases (which is + | "/bootstrap/cache/livewire-components.php"), but for specific + | cases like when hosting on Laravel Vapor, it could be set to a different value. + | + | Example: for Laravel Vapor, it would be "/tmp/storage/bootstrap/cache/livewire-components.php". + | + */ + + 'manifest_path' => null, + + /* + |-------------------------------------------------------------------------- + | Back Button Cache + |-------------------------------------------------------------------------- + | + | This value determines whether the back button cache will be used on pages + | that contain Livewire. By disabling back button cache, it ensures that + | the back button shows the correct state of components, instead of + | potentially stale, cached data. + | + | Setting it to "false" (default) will disable back button cache. + | + */ + + 'back_button_cache' => false, + + /* + |-------------------------------------------------------------------------- + | Render On Redirect + |-------------------------------------------------------------------------- + | + | This value determines whether Livewire will render before it's redirected + | or not. Setting it to "false" (default) will mean the render method is + | skipped when redirecting. And "true" will mean the render method is + | run before redirecting. Browsers bfcache can store a potentially + | stale view if render is skipped on redirect. + | + */ + + 'render_on_redirect' => false, + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 0000000..fefe088 --- /dev/null +++ b/config/logging.php @@ -0,0 +1,119 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => 14, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => env('LOG_LEVEL', 'critical'), + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 0000000..87b6fe3 --- /dev/null +++ b/config/mail.php @@ -0,0 +1,117 @@ + env('MAIL_MAILER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers to be used while + | sending an e-mail. You will specify which one you are using for your + | mailers below. You are free to add additional mailers as required. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", + | "postmark", "log", "array", "failover" + | + */ + + 'mailers' => [ + 'smtp' => [ + 'transport' => 'smtp', + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'port' => env('MAIL_PORT', 587), + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'mailgun' => [ + 'transport' => 'mailgun', + ], + + 'postmark' => [ + 'transport' => 'postmark', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -t -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; diff --git a/config/octane.php b/config/octane.php new file mode 100644 index 0000000..4a957a1 --- /dev/null +++ b/config/octane.php @@ -0,0 +1,221 @@ + env('OCTANE_SERVER', 'roadrunner'), + + /* + |-------------------------------------------------------------------------- + | Force HTTPS + |-------------------------------------------------------------------------- + | + | When this configuration value is set to "true", Octane will inform the + | framework that all absolute links must be generated using the HTTPS + | protocol. Otherwise your links may be generated using plain HTTP. + | + */ + + 'https' => env('OCTANE_HTTPS', false), + + /* + |-------------------------------------------------------------------------- + | Octane Listeners + |-------------------------------------------------------------------------- + | + | All of the event listeners for Octane's events are defined below. These + | listeners are responsible for resetting your application's state for + | the next request. You may even add your own listeners to the list. + | + */ + + 'listeners' => [ + WorkerStarting::class => [ + EnsureUploadedFilesAreValid::class, + EnsureUploadedFilesCanBeMoved::class, + ], + + RequestReceived::class => [ + ...Octane::prepareApplicationForNextOperation(), + ...Octane::prepareApplicationForNextRequest(), + // + ], + + RequestHandled::class => [ + // + ], + + RequestTerminated::class => [ + // FlushUploadedFiles::class, + ], + + TaskReceived::class => [ + ...Octane::prepareApplicationForNextOperation(), + // + ], + + TaskTerminated::class => [ + // + ], + + TickReceived::class => [ + ...Octane::prepareApplicationForNextOperation(), + // + ], + + TickTerminated::class => [ + // + ], + + OperationTerminated::class => [ + FlushTemporaryContainerInstances::class, + // DisconnectFromDatabases::class, + // CollectGarbage::class, + ], + + WorkerErrorOccurred::class => [ + ReportException::class, + StopWorkerIfNecessary::class, + ], + + WorkerStopping::class => [ + // + ], + ], + + /* + |-------------------------------------------------------------------------- + | Warm / Flush Bindings + |-------------------------------------------------------------------------- + | + | The bindings listed below will either be pre-warmed when a worker boots + | or they will be flushed before every new request. Flushing a binding + | will force the container to resolve that binding again when asked. + | + */ + + 'warm' => [ + ...Octane::defaultServicesToWarm(), + ], + + 'flush' => [ + \Barryvdh\Debugbar\LaravelDebugbar::class, + ], + + /* + |-------------------------------------------------------------------------- + | Octane Cache Table + |-------------------------------------------------------------------------- + | + | While using Swoole, you may leverage the Octane cache, which is powered + | by a Swoole table. You may set the maximum number of rows as well as + | the number of bytes per row using the configuration options below. + | + */ + + 'cache' => [ + 'rows' => 1000, + 'bytes' => 10000, + ], + + /* + |-------------------------------------------------------------------------- + | Octane Swoole Tables + |-------------------------------------------------------------------------- + | + | While using Swoole, you may define additional tables as required by the + | application. These tables can be used to store data that needs to be + | quickly accessed by other workers on the particular Swoole server. + | + */ + + 'tables' => [ + 'example:1000' => [ + 'name' => 'string:1000', + 'votes' => 'int', + ], + ], + + /* + |-------------------------------------------------------------------------- + | File Watching + |-------------------------------------------------------------------------- + | + | The following list of files and directories will be watched when using + | the --watch option offered by Octane. If any of the directories and + | files are changed, Octane will automatically reload your workers. + | + */ + + 'watch' => [ + 'app', + 'bootstrap', + 'config', + 'database', + 'public/**/*.php', + 'resources/**/*.php', + 'routes', + 'composer.lock', + '.env', + ], + + /* + |-------------------------------------------------------------------------- + | Garbage Collection Threshold + |-------------------------------------------------------------------------- + | + | When executing long-lived PHP scripts such as Octane, memory can build + | up before being cleared by PHP. You can force Octane to run garbage + | collection if your application consumes this amount of megabytes. + | + */ + + 'garbage' => 50, + + /* + |-------------------------------------------------------------------------- + | Maximum Execution Time + |-------------------------------------------------------------------------- + | + | The following setting configures the maximum execution time for requests + | being handled by Octane. You may set this value to 0 to indicate that + | there isn't a specific time limit on Octane request execution time. + | + */ + + 'max_execution_time' => 30, + +]; diff --git a/config/parsedown.php b/config/parsedown.php new file mode 100644 index 0000000..6ad6641 --- /dev/null +++ b/config/parsedown.php @@ -0,0 +1,38 @@ +` tags. + * + * @see https://github.com/erusev/parsedown/wiki/Usage + */ + 'breaks_enabled' => false, + + /** + * Tells the `parsedown()` helper and the `@parsedown` **Blade** directive if the user input should be inline parsed by default. + * + * @see https://github.com/erusev/parsedown/wiki/Usage + */ + 'inline' => false, + + /** + * Tells **Parsedown** if it should escape **HTML** in trusted input. This method isn't safe from XSS! + * + * @see https://github.com/erusev/parsedown#escaping-html + */ + 'markup_escaped' => false, + + /** + * Tells **Parsedown** if it needs to process untrusted user-input. + * + * @see https://github.com/erusev/parsedown#security + */ + 'safe_mode' => true, + + /** + * Tells **Parsedown** if it should automatically convert urls into anchor tags. + * + * @see https://github.com/erusev/parsedown/wiki/Usage + */ + 'urls_linked' => true, +]; \ No newline at end of file diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..25ea5a8 --- /dev/null +++ b/config/queue.php @@ -0,0 +1,93 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/recaptcha.php b/config/recaptcha.php new file mode 100644 index 0000000..2e131dc --- /dev/null +++ b/config/recaptcha.php @@ -0,0 +1,179 @@ + env('RECAPTCHA_SITE_KEY', ''), + + /** + * + * The secret key + * get secret key @ www.google.com/recaptcha/admin + * + */ + 'api_secret_key' => env('RECAPTCHA_SECRET_KEY', ''), + + /** + * + * ReCATCHA version + * Supported: "v2", "invisible", "v3", + * + * get more info @ https://developers.google.com/recaptcha/docs/versions + * + */ + 'version' => 'invisible', + + /** + * + * The curl timout in seconds to validate a recaptcha token + * @since v3.5.0 + * + */ + 'curl_timeout' => 10, + + /** + * + * IP addresses for which validation will be skipped + * IP/CIDR netmask eg. 127.0.0.0/24, also 127.0.0.1 is accepted and /32 assumed + * + */ + 'skip_ip' => env('RECAPTCHA_SKIP_IP', []), + + /** + * + * Default route called to check the Google reCAPTCHA token + * @since v3.2.0 + * + */ + 'default_validation_route' => 'biscolab-recaptcha/validate', + + /** + * + * The name of the parameter used to send Google reCAPTCHA token to verify route + * @since v3.2.0 + * + */ + 'default_token_parameter_name' => 'token', + + /** + * + * The default Google reCAPTCHA language code + * It has no effect with v3 + * @see https://developers.google.com/recaptcha/docs/language + * @since v3.6.0 + * + */ + 'default_language' => null, + + /** + * + * The default form ID. Only for "invisible" reCAPTCHA + * @since v4.0.0 + * + */ + 'default_form_id' => 'biscolab-recaptcha-invisible-form', + + /** + * + * Deferring the render can be achieved by specifying your onload callback function and adding parameters to the JavaScript resource. + * It has no effect with v3 and invisible + * @see https://developers.google.com/recaptcha/docs/display#explicit_render + * @since v4.0.0 + * Supported true, false + * + */ + 'explicit' => false, + + /** + * + * Set API domain. You can use "www.recaptcha.net" in case "www.google.com" is not accessible. + * (no check will be made on the entered value) + * @see https://developers.google.com/recaptcha/docs/faq#can-i-use-recaptcha-globally + * @since v4.3.0 + * Default 'www.google.com' (ReCaptchaBuilder::DEFAULT_RECAPTCHA_API_DOMAIN) + * + */ + 'api_domain' => 'www.google.com', + + /** + * + * Set `true` when the error message must be null + * @since v5.1.0 + * Default false + * + */ + 'empty_message' => false, + + /** + * + * Set either the error message or the errom message translation key + * @since v5.1.0 + * Default 'validation.recaptcha' + * + */ + 'error_message_key' => 'validation.recaptcha', + + /** + * + * g-recaptcha tag attributes and grecaptcha.render parameters (v2 only) + * @see https://developers.google.com/recaptcha/docs/display#render_param + * @since v4.0.0 + */ + 'tag_attributes' => [ + + /** + * The color theme of the widget. + * Supported "light", "dark" + */ + 'theme' => 'light', + + /** + * The size of the widget. + * Supported "normal", "compact" + */ + 'size' => 'normal', + + /** + * The tabindex of the widget and challenge. + * If other elements in your page use tabindex, it should be set to make user navigation easier. + */ + 'tabindex' => 0, + + /** + * The name of your callback function, executed when the user submits a successful response. + * The g-recaptcha-response token is passed to your callback. + * DO NOT SET "biscolabOnloadCallback" + */ + 'callback' => null, + + /** + * The name of your callback function, executed when the reCAPTCHA response expires and the user needs to re-verify. + * DO NOT SET "biscolabOnloadCallback" + */ + 'expired-callback' => null, + + /** + * The name of your callback function, executed when reCAPTCHA encounters an error (usually network connectivity) and cannot continue until connectivity is restored. + * If you specify a function here, you are responsible for informing the user that they should retry. + * DO NOT SET "biscolabOnloadCallback" + */ + 'error-callback' => null, + ] +]; diff --git a/config/scout.php b/config/scout.php new file mode 100644 index 0000000..5c8b7d2 --- /dev/null +++ b/config/scout.php @@ -0,0 +1,137 @@ + env('SCOUT_DRIVER', 'algolia'), + + /* + |-------------------------------------------------------------------------- + | Index Prefix + |-------------------------------------------------------------------------- + | + | Here you may specify a prefix that will be applied to all search index + | names used by Scout. This prefix may be useful if you have multiple + | "tenants" or applications sharing the same search infrastructure. + | + */ + + 'prefix' => env('SCOUT_PREFIX', ''), + + /* + |-------------------------------------------------------------------------- + | Queue Data Syncing + |-------------------------------------------------------------------------- + | + | This option allows you to control if the operations that sync your data + | with your search engines are queued. When this is set to "true" then + | all automatic data syncing will get queued for better performance. + | + */ + + 'queue' => env('SCOUT_QUEUE', false), + + /* + |-------------------------------------------------------------------------- + | Database Transactions + |-------------------------------------------------------------------------- + | + | This configuration option determines if your data will only be synced + | with your search indexes after every open database transaction has + | been committed, thus preventing any discarded data from syncing. + | + */ + + 'after_commit' => false, + + /* + |-------------------------------------------------------------------------- + | Chunk Sizes + |-------------------------------------------------------------------------- + | + | These options allow you to control the maximum chunk size when you are + | mass importing data into the search engine. This allows you to fine + | tune each of these chunk sizes based on the power of the servers. + | + */ + + 'chunk' => [ + 'searchable' => 500, + 'unsearchable' => 500, + ], + + /* + |-------------------------------------------------------------------------- + | Soft Deletes + |-------------------------------------------------------------------------- + | + | This option allows to control whether to keep soft deleted records in + | the search indexes. Maintaining soft deleted records can be useful + | if your application still needs to search for the records later. + | + */ + + 'soft_delete' => false, + + /* + |-------------------------------------------------------------------------- + | Identify User + |-------------------------------------------------------------------------- + | + | This option allows you to control whether to notify the search engine + | of the user performing the search. This is sometimes useful if the + | engine supports any analytics based on this application's users. + | + | Supported engines: "algolia" + | + */ + + 'identify' => env('SCOUT_IDENTIFY', false), + + /* + |-------------------------------------------------------------------------- + | Algolia Configuration + |-------------------------------------------------------------------------- + | + | Here you may configure your Algolia settings. Algolia is a cloud hosted + | search engine which works great with Scout out of the box. Just plug + | in your application ID and admin API key to get started searching. + | + */ + + 'algolia' => [ + 'id' => env('ALGOLIA_APP_ID', ''), + 'secret' => env('ALGOLIA_SECRET', ''), + ], + + /* + |-------------------------------------------------------------------------- + | MeiliSearch Configuration + |-------------------------------------------------------------------------- + | + | Here you may configure your MeiliSearch settings. MeiliSearch is an open + | source search engine with minimal configuration. Below, you can state + | the host and key information for your own MeiliSearch installation. + | + | See: https://docs.meilisearch.com/guides/advanced_guides/configuration.html + | + */ + + 'meilisearch' => [ + 'host' => env('MEILISEARCH_HOST', 'http://localhost:7700'), + 'key' => env('MEILISEARCH_KEY', null), + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..c06b79a --- /dev/null +++ b/config/services.php @@ -0,0 +1,39 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + + 'discord' => [ + 'client_id' => env('DISCORD_CLIENT_ID'), + 'client_secret' => env('DISCORD_CLIENT_SECRET'), + 'redirect' => '/my/discord/callback', + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..8fed97c --- /dev/null +++ b/config/session.php @@ -0,0 +1,201 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | While using one of the framework's cache driven session backends you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" since this is a secure default value. + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => 'lax', + +]; diff --git a/config/tadah.php b/config/tadah.php new file mode 100644 index 0000000..c3fda54 --- /dev/null +++ b/config/tadah.php @@ -0,0 +1,17 @@ + (bool) env('USERS_CREATE_INVITE_KEYS', true), + 'user_invite_key_cost' => 100, + 'user_maximum_keys_in_window' => 2, // for ex. 2 keys every x days + 'user_invite_key_cooldown' => 7, // in days + + 'invite_keys_required' => (bool)env('REQUIRE_INVITE_KEYS', false), + 'currency_name' => Str::plural('Token'), + 'currency_name_singular' => 'Token', + 'discord_required' => (bool)env('USERS_DISCORD_REQUIRED', true), + 'username_change_cost' => 0, +]; diff --git a/config/telescope.php b/config/telescope.php new file mode 100644 index 0000000..629c070 --- /dev/null +++ b/config/telescope.php @@ -0,0 +1,176 @@ + env('TELESCOPE_DOMAIN', null), + + /* + |-------------------------------------------------------------------------- + | Telescope Path + |-------------------------------------------------------------------------- + | + | This is the URI path where Telescope will be accessible from. Feel free + | to change this path to anything you like. Note that the URI will not + | affect the paths of its internal API that aren't exposed to users. + | + */ + + 'path' => env('TELESCOPE_PATH', 'telescope'), + + /* + |-------------------------------------------------------------------------- + | Telescope Storage Driver + |-------------------------------------------------------------------------- + | + | This configuration options determines the storage driver that will + | be used to store Telescope's data. In addition, you may set any + | custom options as needed by the particular driver you choose. + | + */ + + 'driver' => env('TELESCOPE_DRIVER', 'database'), + + 'storage' => [ + 'database' => [ + 'connection' => env('DB_CONNECTION', 'mysql'), + 'chunk' => 1000, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Telescope Master Switch + |-------------------------------------------------------------------------- + | + | This option may be used to disable all Telescope watchers regardless + | of their individual configuration, which simply provides a single + | and convenient way to enable or disable Telescope data storage. + | + */ + + 'enabled' => env('TELESCOPE_ENABLED', true), + + /* + |-------------------------------------------------------------------------- + | Telescope Route Middleware + |-------------------------------------------------------------------------- + | + | These middleware will be assigned to every Telescope route, giving you + | the chance to add your own middleware to this list or change any of + | the existing middleware. Or, you can simply stick with this list. + | + */ + + 'middleware' => [ + 'web', + Authorize::class, + ToolGuard::class, + ], + + /* + |-------------------------------------------------------------------------- + | Allowed / Ignored Paths & Commands + |-------------------------------------------------------------------------- + | + | The following array lists the URI paths and Artisan commands that will + | not be watched by Telescope. In addition to this list, some Laravel + | commands, like migrations and queue commands, are always ignored. + | + */ + + 'only_paths' => [ + // 'api/*' + ], + + 'ignore_paths' => [ + 'nova-api*', + ], + + 'ignore_commands' => [ + // + ], + + /* + |-------------------------------------------------------------------------- + | Telescope Watchers + |-------------------------------------------------------------------------- + | + | The following array lists the "watchers" that will be registered with + | Telescope. The watchers gather the application's profile data when + | a request or task is executed. Feel free to customize this list. + | + */ + + 'watchers' => [ + Watchers\BatchWatcher::class => env('TELESCOPE_BATCH_WATCHER', true), + Watchers\CacheWatcher::class => env('TELESCOPE_CACHE_WATCHER', true), + Watchers\ClientRequestWatcher::class => env('TELESCOPE_CLIENT_REQUEST_WATCHER', true), + + Watchers\CommandWatcher::class => [ + 'enabled' => env('TELESCOPE_COMMAND_WATCHER', true), + 'ignore' => [], + ], + + Watchers\DumpWatcher::class => [ + 'enabled' => env('TELESCOPE_DUMP_WATCHER', true), + 'always' => env('TELESCOPE_DUMP_WATCHER_ALWAYS', false), + ], + + Watchers\EventWatcher::class => [ + 'enabled' => env('TELESCOPE_EVENT_WATCHER', true), + 'ignore' => [], + ], + + Watchers\ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true), + + Watchers\GateWatcher::class => [ + 'enabled' => env('TELESCOPE_GATE_WATCHER', true), + 'ignore_abilities' => [], + 'ignore_packages' => true, + ], + + Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true), + Watchers\LogWatcher::class => env('TELESCOPE_LOG_WATCHER', true), + Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true), + + Watchers\ModelWatcher::class => [ + 'enabled' => env('TELESCOPE_MODEL_WATCHER', true), + 'events' => ['eloquent.*'], + 'hydrations' => true, + ], + + Watchers\NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true), + + Watchers\QueryWatcher::class => [ + 'enabled' => env('TELESCOPE_QUERY_WATCHER', true), + 'ignore_packages' => true, + 'slow' => 100, + ], + + Watchers\RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true), + + Watchers\RequestWatcher::class => [ + 'enabled' => env('TELESCOPE_REQUEST_WATCHER', true), + 'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64), + 'ignore_status_codes' => [], + ], + + Watchers\ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true), + Watchers\ViewWatcher::class => env('TELESCOPE_VIEW_WATCHER', true), + ], +]; diff --git a/config/view.php b/config/view.php new file mode 100644 index 0000000..22b8a18 --- /dev/null +++ b/config/view.php @@ -0,0 +1,36 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => env( + 'VIEW_COMPILED_PATH', + realpath(storage_path('framework/views')) + ), + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100644 index 0000000..0507a01 --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,31 @@ + + */ +class UserFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition() + { + return [ + 'username' => $this->faker->userName(), + 'email' => $this->faker->unique()->safeEmail(), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', + 'last_ip_address' => '127.0.0.1', + 'register_ip_address' => '127.0.0.1', + 'activity' => User::defaultActivity(), + 'permissions' => User::defaultPermissions() + ]; + } +} diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 0000000..5ec2fa9 --- /dev/null +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,52 @@ +id(); + $table->string('username', 20)->unique(); + $table->packed('past_usernames')->nullable(); + $table->string('blurb', 1000)->default(''); + $table->text('email')->nullable(); + $table->tinyText('email_index')->nullable(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->text('last_ip_address')->nullable(); + $table->tinyText('last_ip_address_index')->nullable(); + $table->text('register_ip_address')->nullable(); + $table->tinyText('register_ip_address_index')->nullable(); + $table->bigInteger('current_ban_id')->nullable(); + $table->packed('activity'); + $table->packed('permissions'); + $table->boolean('superadmin')->default(false); + $table->text('discord_id')->nullable(); + $table->tinyText('discord_id_index')->nullable(); + $table->timestamp('discord_linked_at')->nullable(); + $table->boolean('two_factor_confirmed')->after('two_factor_recovery_codes')->default(false); + $table->bigInteger('current_status_id')->nullable(); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +}; diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 0000000..fcacb80 --- /dev/null +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +}; diff --git a/database/migrations/2014_10_12_200000_add_two_factor_columns_to_users_table.php b/database/migrations/2014_10_12_200000_add_two_factor_columns_to_users_table.php new file mode 100644 index 0000000..d2237fc --- /dev/null +++ b/database/migrations/2014_10_12_200000_add_two_factor_columns_to_users_table.php @@ -0,0 +1,38 @@ +text('two_factor_secret') + ->after('password') + ->nullable(); + + $table->text('two_factor_recovery_codes') + ->after('two_factor_secret') + ->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('two_factor_secret', 'two_factor_recovery_codes'); + }); + } +}; diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php new file mode 100644 index 0000000..1719198 --- /dev/null +++ b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php new file mode 100644 index 0000000..fd235f8 --- /dev/null +++ b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php @@ -0,0 +1,36 @@ +id(); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('personal_access_tokens'); + } +}; diff --git a/database/migrations/2022_01_09_205316_create_game_servers_table.php b/database/migrations/2022_01_09_205316_create_game_servers_table.php new file mode 100644 index 0000000..f25f37c --- /dev/null +++ b/database/migrations/2022_01_09_205316_create_game_servers_table.php @@ -0,0 +1,46 @@ +id(); + $table->text('uuid'); + $table->text('access_key'); + $table->tinyText('access_key_index'); + $table->text('ip_address'); + $table->tinyText('ip_address_index'); + $table->bigInteger('port')->default(64989); + $table->bigInteger('maximum_place_jobs'); + $table->bigInteger('maximum_thumbnail_jobs'); + $table->boolean('is_set_up')->default(false); + $table->boolean('has_vnc')->default(true); + $table->text('vnc_port')->nullable(); + $table->text('vnc_password')->nullable(); + $table->text('friendly_name')->nullable(); + $table->string('utc_offset')->nullable(); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('game_servers'); + } +}; diff --git a/database/migrations/2022_01_09_205341_create_badges_table.php b/database/migrations/2022_01_09_205341_create_badges_table.php new file mode 100644 index 0000000..e72115e --- /dev/null +++ b/database/migrations/2022_01_09_205341_create_badges_table.php @@ -0,0 +1,37 @@ +id(); + $table->string('name', 100)->default('New Badge'); + $table->string('description', 2000)->default('Earn this badge from my game.'); + $table->bigInteger('creator_id'); + $table->bigInteger('game_id'); + $table->boolean('awardable')->default(0); + $table->boolean('approved')->default(0); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('badges'); + } +}; diff --git a/database/migrations/2022_01_09_205414_create_place_jobs_table.php b/database/migrations/2022_01_09_205414_create_place_jobs_table.php new file mode 100644 index 0000000..796a063 --- /dev/null +++ b/database/migrations/2022_01_09_205414_create_place_jobs_table.php @@ -0,0 +1,33 @@ +id(); + $table->string('game_server_uuid'); + $table->string('place_id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('place_jobs'); + } +}; diff --git a/database/migrations/2022_02_13_073348_create_invite_keys_table.php b/database/migrations/2022_02_13_073348_create_invite_keys_table.php new file mode 100644 index 0000000..908d11c --- /dev/null +++ b/database/migrations/2022_02_13_073348_create_invite_keys_table.php @@ -0,0 +1,37 @@ +id(); + $table->text('token'); + $table->text('token_index'); + $table->bigInteger('creator_id'); + $table->integer('uses')->default(0); + $table->integer('max_uses'); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('invite_keys'); + } +}; diff --git a/database/migrations/2022_02_19_063207_create_sessions_table.php b/database/migrations/2022_02_19_063207_create_sessions_table.php new file mode 100644 index 0000000..c455537 --- /dev/null +++ b/database/migrations/2022_02_19_063207_create_sessions_table.php @@ -0,0 +1,35 @@ +string('id')->primary(); + $table->foreignId('user_id')->nullable()->index(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->text('payload'); + $table->integer('last_activity')->index(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('sessions'); + } +}; diff --git a/database/migrations/2022_03_06_004335_create_bans_table.php b/database/migrations/2022_03_06_004335_create_bans_table.php new file mode 100644 index 0000000..e6f0c69 --- /dev/null +++ b/database/migrations/2022_03_06_004335_create_bans_table.php @@ -0,0 +1,45 @@ +id(); + $table->timestamps(); + $table->string('moderator_id'); + $table->string('user_id'); + $table->string('internal_reason'); + $table->string('moderator_note'); + $table->text('offensive_item')->nullable(); + $table->dateTime('expiry_date')->nullable(); + $table->boolean('is_appealable')->default(true); + $table->boolean('is_poison_ban')->default(false); + $table->string('patient_zero')->nullable(); + $table->boolean('is_warning')->default(false); + $table->boolean('has_been_pardoned')->default(false); + $table->string('pardon_internal_reason')->nullable(); + $table->string('pardoner_id')->nullable(); + $table->boolean('is_active')->default(true); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('bans'); + } +}; diff --git a/database/migrations/2022_03_06_074551_create_ip_address_bans_table.php b/database/migrations/2022_03_06_074551_create_ip_address_bans_table.php new file mode 100644 index 0000000..40db355 --- /dev/null +++ b/database/migrations/2022_03_06_074551_create_ip_address_bans_table.php @@ -0,0 +1,39 @@ +id(); + $table->text('ip_address'); + $table->tinyText('ip_address_index'); + $table->text('criterium'); + $table->bigInteger('moderator_id'); + $table->bigInteger('pardoner_id')->nullable(); + $table->string('internal_reason', 255)->nullable(); + $table->boolean('is_active')->default(true); + $table->boolean('has_been_pardoned')->default(false); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('ip_address_bans'); + } +}; diff --git a/database/migrations/2022_03_14_224312_create_poisoned_ip_addresses.php b/database/migrations/2022_03_14_224312_create_poisoned_ip_addresses.php new file mode 100644 index 0000000..ad73a81 --- /dev/null +++ b/database/migrations/2022_03_14_224312_create_poisoned_ip_addresses.php @@ -0,0 +1,34 @@ +id(); + $table->text('ip_address'); + $table->tinyText('ip_address_index'); + $table->bigInteger('tied_to'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('poisoned_ip_addresses'); + } +}; diff --git a/database/migrations/2022_03_20_025917_create_thumbnail_jobs_table.php b/database/migrations/2022_03_20_025917_create_thumbnail_jobs_table.php new file mode 100644 index 0000000..6752871 --- /dev/null +++ b/database/migrations/2022_03_20_025917_create_thumbnail_jobs_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('game_server_uuid'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('thumbnail_jobs'); + } +}; diff --git a/database/migrations/2022_03_26_044913_create_job_batches_table.php b/database/migrations/2022_03_26_044913_create_job_batches_table.php new file mode 100644 index 0000000..226e640 --- /dev/null +++ b/database/migrations/2022_03_26_044913_create_job_batches_table.php @@ -0,0 +1,39 @@ +string('id')->primary(); + $table->string('name'); + $table->integer('total_jobs'); + $table->integer('pending_jobs'); + $table->integer('failed_jobs'); + $table->text('failed_job_ids'); + $table->mediumText('options')->nullable(); + $table->integer('cancelled_at')->nullable(); + $table->integer('created_at'); + $table->integer('finished_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('job_batches'); + } +}; diff --git a/database/migrations/2022_04_12_154421_create_statuses_table.php b/database/migrations/2022_04_12_154421_create_statuses_table.php new file mode 100644 index 0000000..dbf5fb6 --- /dev/null +++ b/database/migrations/2022_04_12_154421_create_statuses_table.php @@ -0,0 +1,37 @@ +id(); + $table->bigInteger('creator_id'); + $table->bigInteger('creator_type')->default(CreatorType::User->value); + $table->bigInteger('group_id')->nullable(); + $table->string('content', 140); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('statuses'); + } +}; diff --git a/database/migrations/2022_04_12_224438_create_assets_table.php b/database/migrations/2022_04_12_224438_create_assets_table.php new file mode 100644 index 0000000..b362458 --- /dev/null +++ b/database/migrations/2022_04_12_224438_create_assets_table.php @@ -0,0 +1,64 @@ +id(); + $table->string('name', 50); + $table->string('description', 1000); + $table->bigInteger('type'); + $table->bigInteger('genre')->default(AssetGenre::All->value); + $table->bigInteger('version_id')->default(1); + $table->bigInteger('image_id')->nullable(); + $table->bigInteger('creator_id'); + $table->bigInteger('creator_type')->default(CreatorType::User->value); + $table->bigInteger('moderation')->default(AssetModeration::Pending->value); + $table->boolean('is_for_sale')->default(false); + $table->boolean('is_public_domain')->default(true); + $table->boolean('comments_enabled')->default(true); + $table->bigInteger('price')->default(0); + $table->bigInteger('gear_attributes')->default(0); + $table->bigInteger('sales')->default(0); + $table->bigInteger('favorites')->default(0); + $table->bigInteger('upvotes')->default(0); + $table->bigInteger('downvotes')->default(0); + + $table->bigInteger('universe_id')->nullable(); + $table->bigInteger('max_players')->default(16)->nullable(); + $table->bigInteger('client_version')->nullable(); + $table->bigInteger('access')->default(PlaceAccess::Everyone->value)->nullable(); + $table->bigInteger('chat_style')->default(ChatStyle::Classic->value)->nullable(); + $table->boolean('is_start_place')->default(false)->nullable(); + $table->boolean('is_boosters_club_only')->default(false)->nullable(); + $table->bigInteger('visits')->default(0)->nullable(); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('assets'); + } +}; diff --git a/database/migrations/2022_04_13_095641_create_asset_versions_table.php b/database/migrations/2022_04_13_095641_create_asset_versions_table.php new file mode 100644 index 0000000..2a0ae8c --- /dev/null +++ b/database/migrations/2022_04_13_095641_create_asset_versions_table.php @@ -0,0 +1,36 @@ +id(); + $table->bigInteger('asset_id'); + $table->bigInteger('version'); + $table->string('cdn_thumbnail_icon_hash')->nullable(); + $table->string('cdn_thumbnail_widescreen_hash')->nullable(); + $table->string('cdn_file_hash'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('asset_versions'); + } +}; diff --git a/database/migrations/2022_04_13_095721_create_universes_table.php b/database/migrations/2022_04_13_095721_create_universes_table.php new file mode 100644 index 0000000..e5d2b5c --- /dev/null +++ b/database/migrations/2022_04_13_095721_create_universes_table.php @@ -0,0 +1,48 @@ +id(); + $table->bigInteger('creator_id'); + $table->bigInteger('creator_type')->default(CreatorType::User->value); + $table->bigInteger('start_place_id')->nullable(); + $table->string('name')->default('My Game'); + $table->bigInteger('version'); + + $table->packed('privileges'); + /** + * { "owner": user_id, "allowed_editors": [user_id1, user_id2, user_id3, group_id1] } + * "owner" can transfer to anyone + * "owner" has full privileges + */ + + $table->integer('privacy')->default(0); // 0: Public. 1: Private for owner only. 2: Private, but all friends of owner is allowed + $table->boolean('unlisted')->default(false); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('universes'); + } +}; diff --git a/database/migrations/2022_04_13_100911_create_asset_comments_table.php b/database/migrations/2022_04_13_100911_create_asset_comments_table.php new file mode 100644 index 0000000..5dce634 --- /dev/null +++ b/database/migrations/2022_04_13_100911_create_asset_comments_table.php @@ -0,0 +1,35 @@ +id(); + $table->bigInteger('asset_id'); + $table->bigInteger('creator_id'); + $table->string('content', 140); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('asset_comments'); + } +}; diff --git a/database/migrations/2022_04_13_101743_create_asset_ownerships_table.php b/database/migrations/2022_04_13_101743_create_asset_ownerships_table.php new file mode 100644 index 0000000..b228f3a --- /dev/null +++ b/database/migrations/2022_04_13_101743_create_asset_ownerships_table.php @@ -0,0 +1,35 @@ +id(); + $table->bigInteger('asset_id'); + $table->bigInteger('user_id'); + $table->boolean('wearing')->default(false); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('asset_ownerships'); + } +}; diff --git a/database/migrations/2022_04_16_080833_create_friendships_table.php b/database/migrations/2022_04_16_080833_create_friendships_table.php new file mode 100644 index 0000000..0fb80a1 --- /dev/null +++ b/database/migrations/2022_04_16_080833_create_friendships_table.php @@ -0,0 +1,35 @@ +id(); + $table->bigInteger('requester_id'); + $table->bigInteger('receiver_id'); + $table->boolean('accepted')->default(false); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('friendships'); + } +}; diff --git a/database/migrations/2022_07_02_101148_create_actions_table.php b/database/migrations/2022_07_02_101148_create_actions_table.php new file mode 100644 index 0000000..78e93cd --- /dev/null +++ b/database/migrations/2022_07_02_101148_create_actions_table.php @@ -0,0 +1,34 @@ +id(); + $table->bigInteger('doer_id'); + $table->bigInteger('action'); + $table->bigInteger('target_id')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('actions'); + } +}; diff --git a/database/migrations/2022_07_02_135149_create_forum_threads_table.php b/database/migrations/2022_07_02_135149_create_forum_threads_table.php new file mode 100644 index 0000000..14d4f8d --- /dev/null +++ b/database/migrations/2022_07_02_135149_create_forum_threads_table.php @@ -0,0 +1,39 @@ +id(); + $table->string('title', 100); + $table->string('body', 10000); + $table->bigInteger('author_id'); + $table->bigInteger('category_id'); + $table->boolean('stickied')->default(false); + $table->boolean('locked')->default(false); + $table->bigInteger('views')->default(0); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('forum_threads'); + } +}; diff --git a/database/migrations/2022_07_02_135209_create_forum_replies_table.php b/database/migrations/2022_07_02_135209_create_forum_replies_table.php new file mode 100644 index 0000000..b69178d --- /dev/null +++ b/database/migrations/2022_07_02_135209_create_forum_replies_table.php @@ -0,0 +1,37 @@ +id(); + $table->timestamps(); + $table->string('body', 10000); + $table->bigInteger('author_id'); + $table->bigInteger('thread_id'); + $table->bigInteger('category_id'); + $table->boolean('stickied')->default(false); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('forum_replies'); + } +}; diff --git a/database/migrations/2022_07_02_135303_create_forum_categories_table.php b/database/migrations/2022_07_02_135303_create_forum_categories_table.php new file mode 100644 index 0000000..1d90605 --- /dev/null +++ b/database/migrations/2022_07_02_135303_create_forum_categories_table.php @@ -0,0 +1,37 @@ +id(); + $table->string('name', 50); + $table->string('description', 400); + $table->bigInteger('priority')->unique(); + $table->string('color', 10)->default('#000000'); + $table->boolean('restricted')->default(false); + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('forum_categories'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..ce9c864 --- /dev/null +++ b/database/seeders/DatabaseSeeder.php @@ -0,0 +1,19 @@ +create(); + } +} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d7dd9a6 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,107 @@ +# For more information: https://laravel.com/docs/sail +version: '3' +services: + laravel.test: + build: + context: ./docker + dockerfile: Dockerfile + args: + WWWGROUP: '${WWWGROUP}' + extra_hosts: + - 'host.docker.internal:host-gateway' + ports: + - '${APP_PORT:-80}:80' + environment: + WWWUSER: '${WWWUSER}' + LARAVEL_SAIL: 1 + XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}' + XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}' + volumes: + - '.:/var/www/html' + networks: + - sail + depends_on: + - pgsql + - redis + - meilisearch + - selenium + - soketi + pgsql: + image: 'postgres:13' + ports: + - '${FORWARD_DB_PORT:-5432}:5432' + environment: + PGPASSWORD: '${DB_PASSWORD:-secret}' + POSTGRES_DB: '${DB_DATABASE}' + POSTGRES_USER: '${DB_USERNAME}' + POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}' + volumes: + - 'sail-pgsql:/var/lib/postgresql/data' + networks: + - sail + healthcheck: + test: ["CMD", "pg_isready", "-q", "-d", "${DB_DATABASE}", "-U", "${DB_USERNAME}"] + retries: 3 + timeout: 5s + redis: + image: 'redis:alpine' + ports: + - '${FORWARD_REDIS_PORT:-6379}:6379' + volumes: + - 'sail-redis:/data' + networks: + - sail + healthcheck: + test: ["CMD", "redis-cli", "ping"] + retries: 3 + timeout: 5s + meilisearch: + image: 'getmeili/meilisearch:latest' + ports: + - '${FORWARD_MEILISEARCH_PORT:-7700}:7700' + volumes: + - 'sail-meilisearch:/data.ms' + networks: + - sail + healthcheck: + test: ["CMD", "wget", "--no-verbose", "--spider", "http://localhost:7700/health"] + retries: 3 + timeout: 5s + mailhog: + image: 'mailhog/mailhog:latest' + environment: + MEILI_MASTER_KEY: ${MEILISEARCH_KEY} + ports: + - '${FORWARD_MAILHOG_PORT:-1025}:1025' + - '${FORWARD_MAILHOG_DASHBOARD_PORT:-8025}:8025' + networks: + - sail + soketi: + image: 'quay.io/soketi/soketi:latest-16-alpine' + environment: + DEBUG: '1' + METRICS_SERVER_PORT: '9601' + DEFAULT_APP_ID: ${PUSHER_APP_ID} + DEFAULT_APP_KEY: ${PUSHER_APP_KEY} + DEFAULT_APP_SECRET: ${PUSHER_APP_SECRET} + ports: + - '${SOKETI_PORT:-6001}:6001' + - '${SOKETI_METRICS_SERVER_PORT:-9601}:9601' + networks: + - sail + selenium: + image: 'selenium/standalone-chrome' + volumes: + - '/dev/shm:/dev/shm' + networks: + - sail +networks: + sail: + driver: bridge +volumes: + sail-pgsql: + driver: local + sail-redis: + driver: local + sail-meilisearch: + driver: local diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..0277709 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,63 @@ +FROM ubuntu:22.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=16 +ARG POSTGRES_VERSION=14 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND noninteractive +ENV TZ=UTC + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 \ + && mkdir -p ~/.gnupg \ + && chmod 600 ~/.gnupg \ + && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \ + && echo "keyserver hkp://keyserver.ubuntu.com:80" >> ~/.gnupg/dirmngr.conf \ + && gpg --recv-key 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c \ + && gpg --export 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c > /usr/share/keyrings/ppa_ondrej_php.gpg \ + && echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php8.1-cli php8.1-dev \ + php8.1-pgsql php8.1-sqlite3 php8.1-gd \ + php8.1-curl \ + php8.1-imap php8.1-mysql php8.1-mbstring \ + php8.1-xml php8.1-zip php8.1-bcmath php8.1-soap \ + php8.1-intl php8.1-readline \ + php8.1-ldap \ + php8.1-msgpack php8.1-igbinary php8.1-redis php8.1-swoole \ + php8.1-memcached php8.1-pcov php8.1-xdebug \ + && php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -sLS https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarn.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.1 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.1/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 8000 + +ENTRYPOINT ["start-container"] diff --git a/docker/php.ini b/docker/php.ini new file mode 100644 index 0000000..ae5ccd6 --- /dev/null +++ b/docker/php.ini @@ -0,0 +1,4 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS diff --git a/docker/release/Dockerfile b/docker/release/Dockerfile new file mode 100644 index 0000000..b732f12 --- /dev/null +++ b/docker/release/Dockerfile @@ -0,0 +1,90 @@ +FROM phpswoole/php8.1-alpine +WORKDIR /var/www/html + +# Basic +RUN apk update && pecl update-channels +RUN apk add bash supervisor tzdata curl supervisor zip unzip + +# Timezone +ENV TZ=$APP_TIMEZONE +RUN apk add tzdata +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +# Install essential build tools for NPM assets + PHP extensions +RUN apk add \ + autoconf \ + g++ \ + gcc \ + git \ + libpng \ + make \ + nodejs \ + yarn + +# Install build tools for PHP extensions only +RUN apk add \ + bzip2-dev \ + curl-dev \ + icu-dev \ + libfreetype6-dev \ + libjpeg-turbo-dev \ + libpng-dev \ + libwebp-dev \ + libxpm-dev \ + libzip-dev \ + oniguruma-dev \ + openssl-dev \ + zlib-dev + +# Install PHP extensions +RUN pecl install msgpack-stable && docker-php-ext-enable msgpack && \ + pecl install redis-stable && docker-php-ext-enable redis && \ + && docker-php-ext-configure gd --with-freetype --with-jpeg && docker-php-ext-install gd && docker-php-ext-enable gd \ + && docker-php-ext-install -j$(nproc) bz2 && docker-php-ext-enable bz2 \ + && docker-php-ext-install -j$(nproc) curl && docker-php-ext-enable curl \ + && docker-php-ext-install -j$(nproc) intl && docker-php-ext-enable intl \ + && docker-php-ext-install -j$(nproc) mbstring && docker-php-ext-enable mbstring \ + && docker-php-ext-install -j$(nproc) pdo pdo_pgsql && docker-php-ext-enable pdo pg_sql \ + && docker-php-ext-install -j$(nproc) xml && docker-php-ext-enable xml \ + && docker-php-ext-install -j$(nproc) zip && docker-php-ext-enable zip + +# Clear out the junk +RUN apk add \ + bzip2-dev \ + curl-dev \ + icu-dev \ + libfreetype6-dev \ + libjpeg-turbo-dev \ + libpng-dev \ + libwebp-dev \ + libxpm-dev \ + libzip-dev \ + oniguruma-dev \ + openssl-dev \ + zlib-dev + +RUN rm -rf /var/cache/apk/* && /tmp/* + +# Entrypoint +RUN (delgroup www-data || true) \ + && addgroup -g 82 -S www-data \ + && adduser -u 82 -D -S -G www-data www-data + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.1 +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.1/cli/conf.d/99-tadah.ini + +# Add our source directory +ADD . . + +# Build NPM assets and install composer +RUN npm run production \ + && composer install --no-ansi --no-dev --no-interaction --no-plugins --no-progress --no-scripts --optimize-autoloader + +# Delete artifacts +RUN rm webpack.mix.js package* composer* + +# Run +EXPOSE 80 +ENTRYPOINT [ "start-container" ] diff --git a/docker/release/php.ini b/docker/release/php.ini new file mode 100644 index 0000000..0c5fc8e --- /dev/null +++ b/docker/release/php.ini @@ -0,0 +1,34 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = GPCS +short_open_tag = Off +precision = 14 +output_buffering = 4096 +zlib.output_compression = Off +implicit_flush = Off +serialize_precision = -1 +zend.enable_gc = On +zend.exception_ignore_args = On +expose_php = Off +error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT +display_errors = Off +display_startup_errors = Off +log_errors = On +ignore_repeated_errors = Off +ignore_repeated_source = Off +report_memleaks = On +variables_order = "GPCS" +request_order = "GP" +register_argc_argv = Off +auto_globals_jit = On +default_mimetype = "text/html" +default_charset = "UTF-8" +doc_root = +user_dir = +enable_dl = Off +file_uploads = On +max_file_uploads = 20 +allow_url_fopen = On +allow_url_include = Off +default_socket_timeout = 60 diff --git a/docker/release/start-container b/docker/release/start-container new file mode 100644 index 0000000..65f147f --- /dev/null +++ b/docker/release/start-container @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER www-data +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + exec gosu $WWWUSER "$@" +else + /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/release/supervisord.conf b/docker/release/supervisord.conf new file mode 100644 index 0000000..a080fd0 --- /dev/null +++ b/docker/release/supervisord.conf @@ -0,0 +1,26 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --host=0.0.0.0 --port=80 +user=www-data +autostart=true +autorestart=true +stdout_logfile=/var/log/php-stdout.log +stdout_logfile_maxbytes=0 +stderr_logfile=/var/log/php-stderr.log +stderr_logfile_maxbytes=0 + +[program:laravel-worker] +command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan queue:work redis --max-time=3600 --timeout=20 +user=www-data +autostart=true +autorestart=true +numprocs=32 +stdout_logfile=/var/log/laravel-worker-stdout.log +stdout_logfile_maxbytes=0 +stdout_logfile=/var/log/laravel-worker-stderr.log +stderr_logfile_maxbytes=0 diff --git a/docker/start-container b/docker/start-container new file mode 100644 index 0000000..dc1ade8 --- /dev/null +++ b/docker/start-container @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + exec gosu $WWWUSER "$@" +else + /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/supervisord.conf b/docker/supervisord.conf new file mode 100644 index 0000000..812142b --- /dev/null +++ b/docker/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80 +user=sail +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/lang/en_US.json b/lang/en_US.json new file mode 100644 index 0000000..577680d --- /dev/null +++ b/lang/en_US.json @@ -0,0 +1,7 @@ +{ + "The :attribute must contain at least one letter.": "The :attribute must contain at least one letter.", + "The :attribute must contain at least one number.": "The :attribute must contain at least one number.", + "The :attribute must contain at least one symbol.": "The :attribute must contain at least one symbol.", + "The :attribute must contain at least one uppercase and one lowercase letter.": "The :attribute must contain at least one uppercase and one lowercase letter.", + "The given :attribute has appeared in a data leak. Please choose a different :attribute.": "The given :attribute has appeared in a data leak. Please choose a different :attribute." +} diff --git a/lang/en_US/auth.php b/lang/en_US/auth.php new file mode 100644 index 0000000..6598e2c --- /dev/null +++ b/lang/en_US/auth.php @@ -0,0 +1,20 @@ + 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/lang/en_US/pagination.php b/lang/en_US/pagination.php new file mode 100644 index 0000000..d481411 --- /dev/null +++ b/lang/en_US/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/lang/en_US/passwords.php b/lang/en_US/passwords.php new file mode 100644 index 0000000..59e7455 --- /dev/null +++ b/lang/en_US/passwords.php @@ -0,0 +1,22 @@ + 'Your password has been reset!', + 'sent' => 'If you provided an email address associated with a valid account, an email has been sent to that address containing the password reset link.', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/lang/en_US/validation.php b/lang/en_US/validation.php new file mode 100644 index 0000000..8ff2e92 --- /dev/null +++ b/lang/en_US/validation.php @@ -0,0 +1,164 @@ + 'The :attribute must be accepted.', + 'accepted_if' => 'The :attribute must be accepted when :other is :value.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute must only contain letters.', + 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute must only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute is not a valid date.', + 'date_equals' => 'The :attribute must be a date equal to :date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'declined' => 'The :attribute must be declined.', + 'declined_if' => 'The :attribute must be declined when :other is :value.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'numeric' => 'The :attribute must be greater than :value.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'string' => 'The :attribute must be greater than :value characters.', + 'array' => 'The :attribute must have more than :value items.', + ], + 'gte' => [ + 'numeric' => 'The :attribute must be greater than or equal to :value.', + 'file' => 'The :attribute must be greater than or equal to :value kilobytes.', + 'string' => 'The :attribute must be greater than or equal to :value characters.', + 'array' => 'The :attribute must have :value items or more.', + ], + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'indisposable' => 'Disposable email addresses are not allowed.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lt' => [ + 'numeric' => 'The :attribute must be less than :value.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'string' => 'The :attribute must be less than :value characters.', + 'array' => 'The :attribute must have less than :value items.', + ], + 'lte' => [ + 'numeric' => 'The :attribute must be less than or equal to :value.', + 'file' => 'The :attribute must be less than or equal to :value kilobytes.', + 'string' => 'The :attribute must be less than or equal to :value characters.', + 'array' => 'The :attribute must not have more than :value items.', + ], + 'mac_address' => 'The :attribute must be a valid MAC address.', + 'max' => [ + 'numeric' => 'The :attribute must not be greater than :max.', + 'file' => 'The :attribute must not be greater than :max kilobytes.', + 'string' => 'The :attribute must not be greater than :max characters.', + 'array' => 'The :attribute must not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'multiple_of' => 'The :attribute must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'password' => 'The password is incorrect.', + 'present' => 'The :attribute field must be present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'starts_with' => 'The :attribute must start with one of the following: :values.', + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid timezone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'url' => 'The :attribute must be a valid URL.', + 'uuid' => 'The :attribute must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8a07db1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,12417 @@ +{ + "name": "web", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "@popperjs/core": "^2.11.6", + "@ryangjchandler/alpine-clipboard": "^2.2.0", + "alpinejs": "^3.10.3", + "axios": "^0.27.2", + "bootstrap": "^5.2.0", + "chart.js": "^3.9.1", + "jquery": "^3.6.0", + "jquery.waitforimages": "^2.4.0", + "laravel-echo": "^1.13.1", + "laravel-mix": "^6.0.49", + "pusher-js": "^7.3.0", + "resolve-url-loader": "^5.0.0", + "sass": "^1.54.4", + "sass-loader": "^13.0.2", + "showdown": "^2.1.0", + "vanillajs-datepicker": "^1.2.0", + "xss": "^1.0.13" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.18.13", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.13", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.13", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.13", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.13", + "@babel/types": "^7.18.13", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.13", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.13", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.18.13", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.2", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.18.9", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.18.11", + "license": "MIT", + "dependencies": { + "@babel/helper-function-name": "^7.18.9", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.11", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.13", + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.10", + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.18.13", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.18.8", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.18.10", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.18.10", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.18.9", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.13", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.13", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.13", + "@babel/types": "^7.18.13", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.18.13", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.15", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.6", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@ryangjchandler/alpine-clipboard": { + "version": "2.2.0", + "license": "MIT" + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.19", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.18.0", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/clean-css": { + "version": "4.2.5", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.6", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.13", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.30", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/http-proxy": { + "version": "1.17.9", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/imagemin": { + "version": "8.0.0", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/imagemin-gifsicle": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "@types/imagemin": "*" + } + }, + "node_modules/@types/imagemin-mozjpeg": { + "version": "8.0.1", + "license": "MIT", + "dependencies": { + "@types/imagemin": "*" + } + }, + "node_modules/@types/imagemin-optipng": { + "version": "5.2.1", + "license": "MIT", + "dependencies": { + "@types/imagemin": "*" + } + }, + "node_modules/@types/imagemin-svgo": { + "version": "8.0.1", + "license": "MIT", + "dependencies": { + "@types/imagemin": "*", + "@types/svgo": "^1" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "5.1.0", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "18.7.13", + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "license": "MIT" + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "license": "MIT", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/svgo": { + "version": "1.3.6", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.3", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.1.5", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.1.5" + } + }, + "node_modules/@vue/shared": { + "version": "3.1.5", + "license": "MIT" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "license": "MIT", + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.5.0", + "license": "MIT", + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "license": "MIT", + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.0", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.0", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/alpinejs": { + "version": "3.10.3", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "~3.1.1" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/assert": { + "version": "1.5.0", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "license": "ISC" + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "license": "MIT", + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.8", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.3", + "caniuse-lite": "^1.0.30001373", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "0.27.2", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/babel-loader": { + "version": "8.2.5", + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.2", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.2", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.3", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.2", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.0", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bn.js": { + "version": "5.2.1", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.0", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.0.13", + "license": "MIT", + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/bootstrap": { + "version": "5.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.5" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "license": "ISC", + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "license": "MIT", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.21.3", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001383", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/chart.js": { + "version": "3.9.1", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/clean-css": { + "version": "5.3.1", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/cli-table3": { + "version": "0.6.2", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/collect.js": { + "version": "4.34.3", + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.19", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/concat": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "commander": "^2.9.0" + }, + "bin": { + "concat": "bin/concat" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/concat/node_modules/commander": { + "version": "2.20.3", + "license": "MIT" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "license": "MIT" + }, + "node_modules/console-browserify": { + "version": "1.2.0" + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/content-type": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.25.0", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.3", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "license": "MIT", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.3.0", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "5.2.7", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/css-loader/node_modules/schema-utils": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select/node_modules/domhandler": { + "version": "4.3.1", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssfilter": { + "version": "0.0.10", + "license": "MIT" + }, + "node_modules/cssnano": { + "version": "5.1.13", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^5.2.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.12", + "license": "MIT", + "dependencies": { + "css-declaration-sorter": "^6.3.0", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.2", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.6", + "postcss-merge-rules": "^5.1.2", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.3", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "license": "MIT", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.4.0", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/domhandler": { + "version": "4.3.1", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "3.3.0", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.0.1" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/domutils/node_modules/domhandler": { + "version": "4.3.1", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "license": "BSD-2-Clause" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.230", + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.18.1", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/file-type": { + "version": "12.4.2", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "license": "BSD-2-Clause" + }, + "node_modules/globals": { + "version": "11.12.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "10.0.2", + "license": "MIT", + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "license": "ISC" + }, + "node_modules/growly": { + "version": "1.3.0", + "license": "MIT" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/has": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/hash-sum": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/hash.js": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "license": "MIT" + }, + "node_modules/html-loader": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "html-minifier-terser": "^5.1.1", + "htmlparser2": "^4.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/html-loader/node_modules/schema-utils": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/html-minifier-terser/node_modules/clean-css": { + "version": "4.2.4", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/html-minifier-terser/node_modules/terser": { + "version": "4.8.1", + "license": "BSD-2-Clause", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.0", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imagemin": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "file-type": "^12.0.0", + "globby": "^10.0.0", + "graceful-fs": "^4.2.2", + "junk": "^3.1.0", + "make-dir": "^3.0.0", + "p-pipe": "^3.0.0", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/img-loader": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "loader-utils": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "imagemin": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/img-loader/node_modules/json5": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/img-loader/node_modules/loader-utils": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/immutable": { + "version": "4.1.0", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/interpret": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ipaddr.js": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.10.0", + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jquery": { + "version": "3.6.0", + "license": "MIT" + }, + "node_modules/jquery.waitforimages": { + "version": "2.4.0", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.1", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/junk": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.5", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/laravel-echo": { + "version": "1.13.1", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/laravel-mix": { + "version": "6.0.49", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.15.8", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/runtime": "^7.15.4", + "@types/babel__core": "^7.1.16", + "@types/clean-css": "^4.2.5", + "@types/imagemin-gifsicle": "^7.0.1", + "@types/imagemin-mozjpeg": "^8.0.1", + "@types/imagemin-optipng": "^5.2.1", + "@types/imagemin-svgo": "^8.0.0", + "autoprefixer": "^10.4.0", + "babel-loader": "^8.2.3", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "clean-css": "^5.2.4", + "cli-table3": "^0.6.0", + "collect.js": "^4.28.5", + "commander": "^7.2.0", + "concat": "^1.0.3", + "css-loader": "^5.2.6", + "cssnano": "^5.0.8", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "glob": "^7.2.0", + "html-loader": "^1.3.2", + "imagemin": "^7.0.1", + "img-loader": "^4.0.0", + "lodash": "^4.17.21", + "md5": "^2.3.0", + "mini-css-extract-plugin": "^1.6.2", + "node-libs-browser": "^2.2.1", + "postcss-load-config": "^3.1.0", + "postcss-loader": "^6.2.0", + "semver": "^7.3.5", + "strip-ansi": "^6.0.0", + "style-loader": "^2.0.0", + "terser": "^5.9.0", + "terser-webpack-plugin": "^5.2.4", + "vue-style-loader": "^4.1.3", + "webpack": "^5.60.0", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.7.3", + "webpack-merge": "^5.8.0", + "webpack-notifier": "^1.14.1", + "webpackbar": "^5.0.0-3", + "yargs": "^17.2.1" + }, + "bin": { + "laravel-mix": "bin/cli.js", + "mix": "bin/cli.js" + }, + "engines": { + "node": ">=12.14.0" + }, + "peerDependencies": { + "@babel/core": "^7.15.8", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "postcss": "^8.3.11", + "webpack": "^5.60.0", + "webpack-cli": "^4.9.1" + } + }, + "node_modules/lilconfig": { + "version": "2.0.6", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/lower-case": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "license": "BSD-3-Clause", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.4.7", + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/mime": { + "version": "1.6.0", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "1.6.2", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.4", + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "license": "MIT", + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-notifier": { + "version": "9.0.1", + "license": "MIT", + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "license": "MIT" + }, + "node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-pipe": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "license": "(MIT AND Zlib)" + }, + "node_modules/param-case": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "license": "ISC", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "license": "MIT", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.16", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.0", + "license": "MIT", + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "browserslist": "^4.20.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "license": "MIT", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.6", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.3", + "license": "MIT", + "dependencies": { + "browserslist": "^4.16.6", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "license": "MIT" + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/process": { + "version": "0.11.10", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "1.4.1", + "license": "MIT" + }, + "node_modules/pusher-js": { + "version": "7.4.0", + "license": "MIT", + "dependencies": { + "@types/node": "^14.14.31", + "tweetnacl": "^1.0.3" + } + }, + "node_modules/pusher-js/node_modules/@types/node": { + "version": "14.18.26", + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.10.3", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "license": "MIT", + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "license": "MIT" + }, + "node_modules/regexpu-core": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.6.0", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.8.4", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.1", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.54.5", + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.0.2", + "license": "MIT", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.7", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "license": "MIT" + }, + "node_modules/showdown": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "commander": "^9.0.0" + }, + "bin": { + "showdown": "bin/showdown.js" + }, + "funding": { + "type": "individual", + "url": "https://www.paypal.me/tiviesantos" + } + }, + "node_modules/showdown/node_modules/commander": { + "version": "9.4.0", + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.2.1", + "license": "MIT" + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "license": "MIT", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/style-loader": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/style-loader/node_modules/schema-utils": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/stylehacks": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "browserslist": "^4.16.6", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.15.0", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.5", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "license": "MIT", + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "license": "0BSD" + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "license": "MIT" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "license": "Unlicense" + }, + "node_modules/type-is": { + "version": "1.6.18", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.5", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/url": { + "version": "0.11.0", + "license": "MIT", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "license": "MIT" + }, + "node_modules/util": { + "version": "0.11.1", + "license": "MIT", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "license": "ISC" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vanillajs-datepicker": { + "version": "1.2.0", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/vue-style-loader": { + "version": "4.1.3", + "license": "MIT", + "dependencies": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "node_modules/vue-style-loader/node_modules/json5": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/vue-style-loader/node_modules/loader-utils": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webpack": { + "version": "5.74.0", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.10.0", + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.11.0", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.10.0", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.11.0", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-notifier": { + "version": "1.15.0", + "license": "ISC", + "dependencies": { + "node-notifier": "^9.0.0", + "strip-ansi": "^6.0.0" + }, + "peerDependencies": { + "@types/webpack": ">4.41.31" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack/node_modules/webpack-sources": { + "version": "3.2.3", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpackbar": { + "version": "5.0.2", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.8.1", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xss": { + "version": "1.0.14", + "license": "MIT", + "dependencies": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "bin": { + "xss": "bin/xss" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/xss/node_modules/commander": { + "version": "2.20.3", + "license": "MIT" + }, + "node_modules/xtend": { + "version": "4.0.2", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.5.1", + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.13" + }, + "@babel/core": { + "version": "7.18.13", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.13", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.13", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.13", + "@babel/types": "^7.18.13", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0" + } + } + }, + "@babel/generator": { + "version": "7.18.13", + "requires": { + "@babel/types": "^7.18.13", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.9", + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0" + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.18.13", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.2", + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0" + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9" + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-function-name": { + "version": "7.18.9", + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.9", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.9" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.18.9", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.18.10" + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6" + }, + "@babel/helper-validator-option": { + "version": "7.18.6" + }, + "@babel/helper-wrap-function": { + "version": "7.18.11", + "requires": { + "@babel/helper-function-name": "^7.18.9", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.11", + "@babel/types": "^7.18.10" + } + }, + "@babel/helpers": { + "version": "7.18.9", + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3" + }, + "has-flag": { + "version": "3.0.0" + }, + "supports-color": { + "version": "5.5.0", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.18.13" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.10", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.9", + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.18.9", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.18.9", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.18.13", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.8", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.18.9", + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.18.8", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.18.10", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.18.9", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.18.10", + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0" + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.18.9", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.18.10", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.18.13", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.13", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.13", + "@babel/types": "^7.18.13", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.18.13", + "requires": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@colors/colors": { + "version": "1.5.0", + "optional": true + }, + "@discoveryjs/json-ext": { + "version": "0.5.7" + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0" + }, + "@jridgewell/set-array": { + "version": "1.1.2" + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.15", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4" + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@popperjs/core": { + "version": "2.11.6" + }, + "@ryangjchandler/alpine-clipboard": { + "version": "2.2.0" + }, + "@trysound/sax": { + "version": "0.2.0" + }, + "@types/babel__core": { + "version": "7.1.19", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.18.0", + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/body-parser": { + "version": "1.19.2", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "requires": { + "@types/node": "*" + } + }, + "@types/clean-css": { + "version": "4.2.5", + "requires": { + "@types/node": "*", + "source-map": "^0.6.0" + } + }, + "@types/connect": { + "version": "3.4.35", + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.4.6", + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51" + }, + "@types/express": { + "version": "4.17.13", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.30", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/http-proxy": { + "version": "1.17.9", + "requires": { + "@types/node": "*" + } + }, + "@types/imagemin": { + "version": "8.0.0", + "requires": { + "@types/node": "*" + } + }, + "@types/imagemin-gifsicle": { + "version": "7.0.1", + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-mozjpeg": { + "version": "8.0.1", + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-optipng": { + "version": "5.2.1", + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-svgo": { + "version": "8.0.1", + "requires": { + "@types/imagemin": "*", + "@types/svgo": "^1" + } + }, + "@types/json-schema": { + "version": "7.0.11" + }, + "@types/mime": { + "version": "3.0.1" + }, + "@types/minimatch": { + "version": "5.1.0" + }, + "@types/node": { + "version": "18.7.13" + }, + "@types/parse-json": { + "version": "4.0.0" + }, + "@types/qs": { + "version": "6.9.7" + }, + "@types/range-parser": { + "version": "1.2.4" + }, + "@types/retry": { + "version": "0.12.0" + }, + "@types/serve-index": { + "version": "1.9.1", + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.0", + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "requires": { + "@types/node": "*" + } + }, + "@types/svgo": { + "version": "1.3.6" + }, + "@types/ws": { + "version": "8.5.3", + "requires": { + "@types/node": "*" + } + }, + "@vue/reactivity": { + "version": "3.1.5", + "requires": { + "@vue/shared": "3.1.5" + } + }, + "@vue/shared": { + "version": "3.1.5" + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1" + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.2.0", + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.5.0", + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.7.0", + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0" + }, + "@xtuc/long": { + "version": "4.2.2" + }, + "accepts": { + "version": "1.3.8", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.0" + }, + "acorn-import-assertions": { + "version": "1.8.0", + "requires": {} + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, + "ajv": { + "version": "6.12.6", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0" + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "requires": {} + }, + "alpinejs": { + "version": "3.10.3", + "requires": { + "@vue/reactivity": "~3.1.1" + } + }, + "ansi-html-community": { + "version": "0.0.8" + }, + "ansi-regex": { + "version": "5.0.1" + }, + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-flatten": { + "version": "2.1.2" + }, + "array-union": { + "version": "2.1.0" + }, + "asn1.js": { + "version": "5.4.1", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0" + } + } + }, + "assert": { + "version": "1.5.0", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1" + }, + "util": { + "version": "0.10.3", + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "asynckit": { + "version": "0.4.0" + }, + "autoprefixer": { + "version": "10.4.8", + "requires": { + "browserslist": "^4.21.3", + "caniuse-lite": "^1.0.30001373", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "axios": { + "version": "0.27.2", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "babel-loader": { + "version": "8.2.5", + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.2", + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.2", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0" + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.3", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.2", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.0", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.2" + } + }, + "balanced-match": { + "version": "1.0.2" + }, + "base64-js": { + "version": "1.5.1" + }, + "batch": { + "version": "0.6.1" + }, + "big.js": { + "version": "5.2.2" + }, + "binary-extensions": { + "version": "2.2.0" + }, + "bn.js": { + "version": "5.2.1" + }, + "body-parser": { + "version": "1.20.0", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2" + }, + "debug": { + "version": "2.6.9", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0" + } + } + }, + "bonjour-service": { + "version": "1.0.13", + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0" + }, + "bootstrap": { + "version": "5.2.0", + "requires": {} + }, + "brace-expansion": { + "version": "1.1.11", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0" + }, + "browserify-aes": { + "version": "1.2.0", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1" + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.21.3", + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, + "buffer": { + "version": "4.9.2", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2" + }, + "buffer-xor": { + "version": "1.0.3" + }, + "builtin-status-codes": { + "version": "3.0.0" + }, + "bytes": { + "version": "3.0.0" + }, + "call-bind": { + "version": "1.0.2", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0" + }, + "camel-case": { + "version": "4.1.2", + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "caniuse-api": { + "version": "3.0.0", + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001383" + }, + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "charenc": { + "version": "0.0.2" + }, + "chart.js": { + "version": "3.9.1" + }, + "chokidar": { + "version": "3.5.3", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3" + }, + "cipher-base": { + "version": "1.0.4", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "clean-css": { + "version": "5.3.1", + "requires": { + "source-map": "~0.6.0" + } + }, + "cli-table3": { + "version": "0.6.2", + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "7.0.4", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "collect.js": { + "version": "4.34.3" + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "colord": { + "version": "2.9.3" + }, + "colorette": { + "version": "2.0.19" + }, + "combined-stream": { + "version": "1.0.8", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "7.2.0" + }, + "commondir": { + "version": "1.0.1" + }, + "compressible": { + "version": "2.0.18", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0" + } + } + }, + "concat": { + "version": "1.0.3", + "requires": { + "commander": "^2.9.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3" + } + } + }, + "concat-map": { + "version": "0.0.1" + }, + "connect-history-api-fallback": { + "version": "2.0.0" + }, + "consola": { + "version": "2.15.3" + }, + "console-browserify": { + "version": "1.2.0" + }, + "constants-browserify": { + "version": "1.0.0" + }, + "content-disposition": { + "version": "0.5.4", + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1" + } + } + }, + "content-type": { + "version": "1.0.4" + }, + "convert-source-map": { + "version": "1.8.0", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.5.0" + }, + "cookie-signature": { + "version": "1.0.6" + }, + "core-js-compat": { + "version": "3.25.0", + "requires": { + "browserslist": "^4.21.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0" + } + } + }, + "core-util-is": { + "version": "1.0.3" + }, + "cosmiconfig": { + "version": "7.0.1", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0" + } + } + }, + "create-hash": { + "version": "1.2.0", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "7.0.3", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypt": { + "version": "0.0.2" + }, + "crypto-browserify": { + "version": "3.12.0", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css-declaration-sorter": { + "version": "6.3.0", + "requires": {} + }, + "css-loader": { + "version": "5.2.7", + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "css-select": { + "version": "4.3.0", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "dependencies": { + "domhandler": { + "version": "4.3.1", + "requires": { + "domelementtype": "^2.2.0" + } + } + } + }, + "css-tree": { + "version": "1.1.3", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "6.1.0" + }, + "cssesc": { + "version": "3.0.0" + }, + "cssfilter": { + "version": "0.0.10" + }, + "cssnano": { + "version": "5.1.13", + "requires": { + "cssnano-preset-default": "^5.2.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.2.12", + "requires": { + "css-declaration-sorter": "^6.3.0", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.2", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.6", + "postcss-merge-rules": "^5.1.2", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.3", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "requires": {} + }, + "csso": { + "version": "4.2.0", + "requires": { + "css-tree": "^1.1.2" + } + }, + "debug": { + "version": "4.3.4", + "requires": { + "ms": "2.1.2" + } + }, + "default-gateway": { + "version": "6.0.3", + "requires": { + "execa": "^5.0.0" + } + }, + "define-lazy-prop": { + "version": "2.0.0" + }, + "define-properties": { + "version": "1.1.4", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0" + }, + "depd": { + "version": "2.0.0" + }, + "des.js": { + "version": "1.0.1", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.2.0" + }, + "detect-node": { + "version": "2.1.0" + }, + "diffie-hellman": { + "version": "5.0.3", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0" + } + } + }, + "dir-glob": { + "version": "3.0.1", + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0" + }, + "dns-packet": { + "version": "5.4.0", + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "dom-serializer": { + "version": "1.4.1", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "domhandler": { + "version": "4.3.1", + "requires": { + "domelementtype": "^2.2.0" + } + } + } + }, + "domain-browser": { + "version": "1.2.0" + }, + "domelementtype": { + "version": "2.3.0" + }, + "domhandler": { + "version": "3.3.0", + "requires": { + "domelementtype": "^2.0.1" + } + }, + "domutils": { + "version": "2.8.0", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "dependencies": { + "domhandler": { + "version": "4.3.1", + "requires": { + "domelementtype": "^2.2.0" + } + } + } + }, + "dot-case": { + "version": "3.0.4", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dotenv": { + "version": "10.0.0" + }, + "dotenv-expand": { + "version": "5.1.0" + }, + "ee-first": { + "version": "1.1.1" + }, + "electron-to-chromium": { + "version": "1.4.230" + }, + "elliptic": { + "version": "6.5.4", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0" + } + } + }, + "emoji-regex": { + "version": "8.0.0" + }, + "emojis-list": { + "version": "3.0.0" + }, + "encodeurl": { + "version": "1.0.2" + }, + "enhanced-resolve": { + "version": "5.10.0", + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "2.2.0" + }, + "envinfo": { + "version": "7.8.1" + }, + "error-ex": { + "version": "1.3.2", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-module-lexer": { + "version": "0.9.3" + }, + "escalade": { + "version": "3.1.1" + }, + "escape-html": { + "version": "1.0.3" + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "eslint-scope": { + "version": "5.1.1", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0" + } + } + }, + "estraverse": { + "version": "4.3.0" + }, + "esutils": { + "version": "2.0.3" + }, + "etag": { + "version": "1.8.1" + }, + "eventemitter3": { + "version": "4.0.7" + }, + "events": { + "version": "3.3.0" + }, + "evp_bytestokey": { + "version": "1.0.3", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "5.1.1", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "express": { + "version": "4.18.1", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1" + }, + "debug": { + "version": "2.6.9", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0" + }, + "safe-buffer": { + "version": "5.2.1" + } + } + }, + "fast-deep-equal": { + "version": "3.1.3" + }, + "fast-glob": { + "version": "3.2.11", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0" + }, + "fastest-levenshtein": { + "version": "1.0.16" + }, + "fastq": { + "version": "1.13.0", + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "file-loader": { + "version": "6.2.0", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "file-type": { + "version": "12.4.2" + }, + "fill-range": { + "version": "7.0.1", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0" + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "follow-redirects": { + "version": "1.15.1" + }, + "form-data": { + "version": "4.0.0", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0" + }, + "fraction.js": { + "version": "4.2.0" + }, + "fresh": { + "version": "0.5.2" + }, + "fs-extra": { + "version": "10.1.0", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3" + }, + "fs.realpath": { + "version": "1.0.0" + }, + "function-bind": { + "version": "1.1.1" + }, + "gensync": { + "version": "1.0.0-beta.2" + }, + "get-caller-file": { + "version": "2.0.5" + }, + "get-intrinsic": { + "version": "1.1.2", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-stream": { + "version": "6.0.1" + }, + "glob": { + "version": "7.2.3", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1" + }, + "globals": { + "version": "11.12.0" + }, + "globby": { + "version": "10.0.2", + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10" + }, + "growly": { + "version": "1.3.0" + }, + "handle-thing": { + "version": "2.0.1" + }, + "has": { + "version": "1.0.3", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0" + }, + "has-property-descriptors": { + "version": "1.0.0", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3" + }, + "hash-base": { + "version": "3.1.0", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1" + } + } + }, + "hash-sum": { + "version": "1.0.2" + }, + "hash.js": { + "version": "1.1.7", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0" + }, + "hmac-drbg": { + "version": "1.0.1", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hpack.js": { + "version": "2.1.6", + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "2.3.3" + }, + "html-loader": { + "version": "1.3.2", + "requires": { + "html-minifier-terser": "^5.1.1", + "htmlparser2": "^4.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "html-minifier-terser": { + "version": "5.1.1", + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "dependencies": { + "clean-css": { + "version": "4.2.4", + "requires": { + "source-map": "~0.6.0" + } + }, + "commander": { + "version": "4.1.1" + }, + "terser": { + "version": "4.8.1", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3" + } + } + } + } + }, + "htmlparser2": { + "version": "4.1.0", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7" + }, + "http-errors": { + "version": "2.0.0", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8" + }, + "http-proxy": { + "version": "1.18.1", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "https-browserify": { + "version": "1.0.0" + }, + "human-signals": { + "version": "2.1.0" + }, + "iconv-lite": { + "version": "0.4.24", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "requires": {} + }, + "ieee754": { + "version": "1.2.1" + }, + "ignore": { + "version": "5.2.0" + }, + "imagemin": { + "version": "7.0.1", + "requires": { + "file-type": "^12.0.0", + "globby": "^10.0.0", + "graceful-fs": "^4.2.2", + "junk": "^3.1.0", + "make-dir": "^3.0.0", + "p-pipe": "^3.0.0", + "replace-ext": "^1.0.0" + } + }, + "img-loader": { + "version": "4.0.0", + "requires": { + "loader-utils": "^1.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "immutable": { + "version": "4.1.0" + }, + "import-fresh": { + "version": "3.3.0", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.1.0", + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4" + }, + "interpret": { + "version": "2.2.0" + }, + "ipaddr.js": { + "version": "2.0.1" + }, + "is-arrayish": { + "version": "0.2.1" + }, + "is-binary-path": { + "version": "2.1.0", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6" + }, + "is-core-module": { + "version": "2.10.0", + "requires": { + "has": "^1.0.3" + } + }, + "is-docker": { + "version": "2.2.1" + }, + "is-extglob": { + "version": "2.1.1" + }, + "is-fullwidth-code-point": { + "version": "3.0.0" + }, + "is-glob": { + "version": "4.0.3", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0" + }, + "is-plain-obj": { + "version": "3.0.0" + }, + "is-plain-object": { + "version": "2.0.4", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-stream": { + "version": "2.0.1" + }, + "is-wsl": { + "version": "2.2.0", + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0" + }, + "isexe": { + "version": "2.0.0" + }, + "isobject": { + "version": "3.0.1" + }, + "jest-worker": { + "version": "27.5.1", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jquery": { + "version": "3.6.0" + }, + "jquery.waitforimages": { + "version": "2.4.0" + }, + "js-tokens": { + "version": "4.0.0" + }, + "jsesc": { + "version": "2.5.2" + }, + "json-parse-even-better-errors": { + "version": "2.3.1" + }, + "json-schema-traverse": { + "version": "0.4.1" + }, + "json5": { + "version": "2.2.1" + }, + "jsonfile": { + "version": "6.1.0", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "junk": { + "version": "3.1.0" + }, + "kind-of": { + "version": "6.0.3" + }, + "klona": { + "version": "2.0.5" + }, + "laravel-echo": { + "version": "1.13.1" + }, + "laravel-mix": { + "version": "6.0.49", + "requires": { + "@babel/core": "^7.15.8", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/runtime": "^7.15.4", + "@types/babel__core": "^7.1.16", + "@types/clean-css": "^4.2.5", + "@types/imagemin-gifsicle": "^7.0.1", + "@types/imagemin-mozjpeg": "^8.0.1", + "@types/imagemin-optipng": "^5.2.1", + "@types/imagemin-svgo": "^8.0.0", + "autoprefixer": "^10.4.0", + "babel-loader": "^8.2.3", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "clean-css": "^5.2.4", + "cli-table3": "^0.6.0", + "collect.js": "^4.28.5", + "commander": "^7.2.0", + "concat": "^1.0.3", + "css-loader": "^5.2.6", + "cssnano": "^5.0.8", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "glob": "^7.2.0", + "html-loader": "^1.3.2", + "imagemin": "^7.0.1", + "img-loader": "^4.0.0", + "lodash": "^4.17.21", + "md5": "^2.3.0", + "mini-css-extract-plugin": "^1.6.2", + "node-libs-browser": "^2.2.1", + "postcss-load-config": "^3.1.0", + "postcss-loader": "^6.2.0", + "semver": "^7.3.5", + "strip-ansi": "^6.0.0", + "style-loader": "^2.0.0", + "terser": "^5.9.0", + "terser-webpack-plugin": "^5.2.4", + "vue-style-loader": "^4.1.3", + "webpack": "^5.60.0", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.7.3", + "webpack-merge": "^5.8.0", + "webpack-notifier": "^1.14.1", + "webpackbar": "^5.0.0-3", + "yargs": "^17.2.1" + } + }, + "lilconfig": { + "version": "2.0.6" + }, + "lines-and-columns": { + "version": "1.2.4" + }, + "loader-runner": { + "version": "4.3.0" + }, + "loader-utils": { + "version": "2.0.2", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "5.0.0", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21" + }, + "lodash.debounce": { + "version": "4.0.8" + }, + "lodash.memoize": { + "version": "4.1.2" + }, + "lodash.uniq": { + "version": "4.5.0" + }, + "lower-case": { + "version": "2.0.2", + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "6.0.0", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0" + } + } + }, + "md5": { + "version": "2.3.0", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "md5.js": { + "version": "1.3.5", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.14" + }, + "media-typer": { + "version": "0.3.0" + }, + "memfs": { + "version": "3.4.7", + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1" + }, + "merge-stream": { + "version": "2.0.0" + }, + "merge2": { + "version": "1.4.1" + }, + "methods": { + "version": "1.1.2" + }, + "micromatch": { + "version": "4.0.5", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0" + } + } + }, + "mime": { + "version": "1.6.0" + }, + "mime-db": { + "version": "1.52.0" + }, + "mime-types": { + "version": "2.1.35", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0" + }, + "mini-css-extract-plugin": { + "version": "1.6.2", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1" + }, + "minimatch": { + "version": "3.1.2", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6" + }, + "ms": { + "version": "2.1.2" + }, + "multicast-dns": { + "version": "7.2.5", + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "nanoid": { + "version": "3.3.4" + }, + "negotiator": { + "version": "0.6.3" + }, + "neo-async": { + "version": "2.6.2" + }, + "no-case": { + "version": "3.0.4", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-forge": { + "version": "1.3.1" + }, + "node-libs-browser": { + "version": "2.2.1", + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node-notifier": { + "version": "9.0.1", + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node-releases": { + "version": "2.0.6" + }, + "normalize-path": { + "version": "3.0.0" + }, + "normalize-range": { + "version": "0.1.2" + }, + "normalize-url": { + "version": "6.1.0" + }, + "npm-run-path": { + "version": "4.0.1", + "requires": { + "path-key": "^3.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-assign": { + "version": "4.1.1" + }, + "object-inspect": { + "version": "1.12.2" + }, + "object-keys": { + "version": "1.1.1" + }, + "object.assign": { + "version": "4.1.4", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "obuf": { + "version": "1.1.2" + }, + "on-finished": { + "version": "2.4.1", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2" + }, + "once": { + "version": "1.4.0", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.0", + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "os-browserify": { + "version": "0.3.0" + }, + "p-limit": { + "version": "2.3.0", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-pipe": { + "version": "3.1.0" + }, + "p-retry": { + "version": "4.6.2", + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + } + }, + "p-try": { + "version": "2.2.0" + }, + "pako": { + "version": "1.0.11" + }, + "param-case": { + "version": "3.0.4", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.6", + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "5.2.0", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parseurl": { + "version": "1.3.3" + }, + "pascal-case": { + "version": "3.1.2", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-browserify": { + "version": "0.0.1" + }, + "path-exists": { + "version": "4.0.0" + }, + "path-is-absolute": { + "version": "1.0.1" + }, + "path-key": { + "version": "3.1.1" + }, + "path-parse": { + "version": "1.0.7" + }, + "path-to-regexp": { + "version": "0.1.7" + }, + "path-type": { + "version": "4.0.0" + }, + "pbkdf2": { + "version": "3.1.2", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picocolors": { + "version": "1.0.0" + }, + "picomatch": { + "version": "2.3.1" + }, + "pkg-dir": { + "version": "4.2.0", + "requires": { + "find-up": "^4.0.0" + } + }, + "postcss": { + "version": "8.4.16", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-calc": { + "version": "8.2.4", + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "5.3.0", + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.1.2", + "requires": { + "browserslist": "^4.20.3", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-discard-comments": { + "version": "5.1.2", + "requires": {} + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "requires": {} + }, + "postcss-discard-empty": { + "version": "5.1.1", + "requires": {} + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "requires": {} + }, + "postcss-load-config": { + "version": "3.1.4", + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-loader": { + "version": "6.2.1", + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + } + }, + "postcss-merge-longhand": { + "version": "5.1.6", + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.0" + } + }, + "postcss-merge-rules": { + "version": "5.1.2", + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.3", + "requires": { + "browserslist": "^4.16.6", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.2.1", + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.1", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.0", + "requires": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.1.0", + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-ordered-values": { + "version": "5.1.3", + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-initial": { + "version": "5.1.0", + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.1.0", + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + } + }, + "postcss-unique-selectors": { + "version": "5.1.1", + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-value-parser": { + "version": "4.2.0" + }, + "pretty-time": { + "version": "1.1.0" + }, + "process": { + "version": "0.11.10" + }, + "process-nextick-args": { + "version": "2.0.1" + }, + "proxy-addr": { + "version": "2.0.7", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1" + } + } + }, + "public-encrypt": { + "version": "4.0.3", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0" + } + } + }, + "punycode": { + "version": "1.4.1" + }, + "pusher-js": { + "version": "7.4.0", + "requires": { + "@types/node": "^14.14.31", + "tweetnacl": "^1.0.3" + }, + "dependencies": { + "@types/node": { + "version": "14.18.26" + } + } + }, + "qs": { + "version": "6.10.3", + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystring": { + "version": "0.2.0" + }, + "querystring-es3": { + "version": "0.2.1" + }, + "queue-microtask": { + "version": "1.2.3" + }, + "randombytes": { + "version": "2.1.0", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1" + }, + "raw-body": { + "version": "2.5.1", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2" + } + } + }, + "readable-stream": { + "version": "2.3.7", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.1.1", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "readdirp": { + "version": "3.6.0", + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.7.1", + "requires": { + "resolve": "^1.9.0" + } + }, + "regenerate": { + "version": "1.4.2" + }, + "regenerate-unicode-properties": { + "version": "10.0.1", + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9" + }, + "regenerator-transform": { + "version": "0.15.0", + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-parser": { + "version": "2.2.11" + }, + "regexpu-core": { + "version": "5.1.0", + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.6.0" + }, + "regjsparser": { + "version": "0.8.4", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0" + } + } + }, + "relateurl": { + "version": "0.2.7" + }, + "replace-ext": { + "version": "1.0.1" + }, + "require-directory": { + "version": "2.1.1" + }, + "require-from-string": { + "version": "2.0.2" + }, + "requires-port": { + "version": "1.0.0" + }, + "resolve": { + "version": "1.22.1", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0" + } + } + }, + "resolve-from": { + "version": "4.0.0" + }, + "resolve-url-loader": { + "version": "5.0.0", + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + } + }, + "retry": { + "version": "0.13.1" + }, + "reusify": { + "version": "1.0.4" + }, + "rimraf": { + "version": "3.0.2", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-parallel": { + "version": "1.2.0", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.1.2" + }, + "safer-buffer": { + "version": "2.1.2" + }, + "sass": { + "version": "1.54.5", + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "13.0.2", + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "schema-utils": { + "version": "2.7.1", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0" + }, + "selfsigned": { + "version": "2.0.1", + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "7.3.7", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.18.0", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0" + } + } + }, + "ms": { + "version": "2.1.3" + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2" + }, + "http-errors": { + "version": "1.6.3", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3" + }, + "ms": { + "version": "2.0.0" + }, + "setprototypeof": { + "version": "1.1.0" + }, + "statuses": { + "version": "1.5.0" + } + } + }, + "serve-static": { + "version": "1.15.0", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setimmediate": { + "version": "1.0.5" + }, + "setprototypeof": { + "version": "1.2.0" + }, + "sha.js": { + "version": "2.4.11", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0" + }, + "shellwords": { + "version": "0.1.1" + }, + "showdown": { + "version": "2.1.0", + "requires": { + "commander": "^9.0.0" + }, + "dependencies": { + "commander": { + "version": "9.4.0" + } + } + }, + "side-channel": { + "version": "1.0.4", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7" + }, + "slash": { + "version": "3.0.0" + }, + "sockjs": { + "version": "0.3.24", + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "source-list-map": { + "version": "2.0.1" + }, + "source-map": { + "version": "0.6.1" + }, + "source-map-js": { + "version": "1.0.2" + }, + "source-map-support": { + "version": "0.5.21", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spdy": { + "version": "4.0.2", + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stable": { + "version": "0.1.8" + }, + "statuses": { + "version": "2.0.1" + }, + "std-env": { + "version": "3.2.1" + }, + "stream-browserify": { + "version": "2.0.2", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-http": { + "version": "2.8.3", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1" + } + } + }, + "string-width": { + "version": "4.2.3", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0" + }, + "style-loader": { + "version": "2.0.0", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "stylehacks": { + "version": "5.1.0", + "requires": { + "browserslist": "^4.16.6", + "postcss-selector-parser": "^6.0.4" + } + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0" + }, + "svgo": { + "version": "2.8.0", + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + }, + "tapable": { + "version": "2.2.1" + }, + "terser": { + "version": "5.15.0", + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3" + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.5", + "requires": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "thunky": { + "version": "1.1.0" + }, + "timers-browserify": { + "version": "2.0.12", + "requires": { + "setimmediate": "^1.0.4" + } + }, + "to-arraybuffer": { + "version": "1.0.1" + }, + "to-fast-properties": { + "version": "2.0.0" + }, + "to-regex-range": { + "version": "5.0.1", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1" + }, + "tslib": { + "version": "2.4.0" + }, + "tty-browserify": { + "version": "0.0.0" + }, + "tweetnacl": { + "version": "1.0.3" + }, + "type-is": { + "version": "1.6.18", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0" + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0" + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0" + }, + "universalify": { + "version": "2.0.0" + }, + "unpipe": { + "version": "1.0.0" + }, + "update-browserslist-db": { + "version": "1.0.5", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1" + } + } + }, + "url": { + "version": "0.11.0", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2" + } + } + }, + "util": { + "version": "0.11.1", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3" + } + } + }, + "util-deprecate": { + "version": "1.0.2" + }, + "utils-merge": { + "version": "1.0.1" + }, + "uuid": { + "version": "8.3.2" + }, + "vanillajs-datepicker": { + "version": "1.2.0" + }, + "vary": { + "version": "1.1.2" + }, + "vm-browserify": { + "version": "1.1.2" + }, + "vue-style-loader": { + "version": "4.1.3", + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "watchpack": { + "version": "2.4.0", + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webpack": { + "version": "5.74.0", + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "webpack-sources": { + "version": "3.2.3" + } + } + }, + "webpack-cli": { + "version": "4.10.0", + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + } + }, + "webpack-dev-middleware": { + "version": "5.3.3", + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0" + }, + "schema-utils": { + "version": "4.0.0", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.10.0", + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0" + }, + "schema-utils": { + "version": "4.0.0", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-notifier": { + "version": "1.15.0", + "requires": { + "node-notifier": "^9.0.0", + "strip-ansi": "^6.0.0" + } + }, + "webpack-sources": { + "version": "1.4.3", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "webpackbar": { + "version": "5.0.2", + "requires": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" + } + }, + "websocket-driver": { + "version": "0.7.4", + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4" + }, + "which": { + "version": "2.0.2", + "requires": { + "isexe": "^2.0.0" + } + }, + "wildcard": { + "version": "2.0.0" + }, + "wrap-ansi": { + "version": "7.0.0", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2" + }, + "ws": { + "version": "8.8.1", + "requires": {} + }, + "xss": { + "version": "1.0.14", + "requires": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "dependencies": { + "commander": { + "version": "2.20.3" + } + } + }, + "xtend": { + "version": "4.0.2" + }, + "y18n": { + "version": "5.0.8" + }, + "yallist": { + "version": "4.0.0" + }, + "yaml": { + "version": "1.10.2" + }, + "yargs": { + "version": "17.5.1", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.1.1" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..43856d3 --- /dev/null +++ b/package.json @@ -0,0 +1,30 @@ +{ + "scripts": { + "dev": "npm run development", + "development": "mix", + "watch": "mix watch", + "watch-poll": "mix watch -- --watch-options-poll=1000", + "hot": "mix watch --hot", + "prod": "npm run production", + "production": "mix --production" + }, + "dependencies": { + "@popperjs/core": "^2.11.6", + "@ryangjchandler/alpine-clipboard": "^2.2.0", + "alpinejs": "^3.10.3", + "axios": "^0.27.2", + "bootstrap": "^5.2.0", + "chart.js": "^3.9.1", + "jquery": "^3.6.0", + "jquery.waitforimages": "^2.4.0", + "laravel-echo": "^1.13.1", + "laravel-mix": "^6.0.49", + "pusher-js": "^7.3.0", + "resolve-url-loader": "^5.0.0", + "sass": "^1.54.4", + "sass-loader": "^13.0.2", + "showdown": "^2.1.0", + "vanillajs-datepicker": "^1.2.0", + "xss": "^1.0.13" + } +} diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..c8f55a6 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,13 @@ +includes: +- ./vendor/nunomaduro/larastan/extension.neon + +parameters: + paths: + - app + - bootstrap + - config + - database + - routes + level: 0 + checkOctaneCompatibility: true + checkModelProperties: true diff --git a/public/content b/public/content new file mode 100644 index 0000000..4e1391e --- /dev/null +++ b/public/content @@ -0,0 +1 @@ +/var/www/html/storage/app/content \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..21b472a Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/fonts/TwemojiMozilla.ttf b/public/fonts/TwemojiMozilla.ttf new file mode 100644 index 0000000..75ddc21 Binary files /dev/null and b/public/fonts/TwemojiMozilla.ttf differ diff --git a/public/img/blobs/dead.png b/public/img/blobs/dead.png new file mode 100644 index 0000000..c5343a6 Binary files /dev/null and b/public/img/blobs/dead.png differ diff --git a/public/img/blobs/exhausted.png b/public/img/blobs/exhausted.png new file mode 100644 index 0000000..292a744 Binary files /dev/null and b/public/img/blobs/exhausted.png differ diff --git a/public/img/blobs/ghastly.png b/public/img/blobs/ghastly.png new file mode 100644 index 0000000..80e5845 Binary files /dev/null and b/public/img/blobs/ghastly.png differ diff --git a/public/img/blobs/inquisitive.png b/public/img/blobs/inquisitive.png new file mode 100644 index 0000000..5f60e66 Binary files /dev/null and b/public/img/blobs/inquisitive.png differ diff --git a/public/img/blobs/open_mouth.png b/public/img/blobs/open_mouth.png new file mode 100644 index 0000000..dee415d Binary files /dev/null and b/public/img/blobs/open_mouth.png differ diff --git a/public/img/blobs/scared.png b/public/img/blobs/scared.png new file mode 100644 index 0000000..a580609 Binary files /dev/null and b/public/img/blobs/scared.png differ diff --git a/public/img/blobs/sick.png b/public/img/blobs/sick.png new file mode 100644 index 0000000..18d3bf3 Binary files /dev/null and b/public/img/blobs/sick.png differ diff --git a/public/img/blobs/sweaty.png b/public/img/blobs/sweaty.png new file mode 100644 index 0000000..90906e5 Binary files /dev/null and b/public/img/blobs/sweaty.png differ diff --git a/public/img/blobs/tired.png b/public/img/blobs/tired.png new file mode 100644 index 0000000..84d8183 Binary files /dev/null and b/public/img/blobs/tired.png differ diff --git a/public/img/dead.png b/public/img/dead.png new file mode 100644 index 0000000..14e8cdc Binary files /dev/null and b/public/img/dead.png differ diff --git a/public/img/hero/register.png b/public/img/hero/register.png new file mode 100644 index 0000000..905f57f Binary files /dev/null and b/public/img/hero/register.png differ diff --git a/public/img/laravel/horizon.png b/public/img/laravel/horizon.png new file mode 100644 index 0000000..b5a88f4 Binary files /dev/null and b/public/img/laravel/horizon.png differ diff --git a/public/img/laravel/telescope.png b/public/img/laravel/telescope.png new file mode 100644 index 0000000..20be287 Binary files /dev/null and b/public/img/laravel/telescope.png differ diff --git a/public/img/logo/big.png b/public/img/logo/big.png new file mode 100644 index 0000000..e5185ed Binary files /dev/null and b/public/img/logo/big.png differ diff --git a/public/img/logo/dahllor.svg b/public/img/logo/dahllor.svg new file mode 100644 index 0000000..94c904e --- /dev/null +++ b/public/img/logo/dahllor.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/public/img/logo/small.png b/public/img/logo/small.png new file mode 100644 index 0000000..95cb21f Binary files /dev/null and b/public/img/logo/small.png differ diff --git a/public/img/placeholder/icon.png b/public/img/placeholder/icon.png new file mode 100644 index 0000000..b688fc2 Binary files /dev/null and b/public/img/placeholder/icon.png differ diff --git a/public/img/placeholder/widescreen.png b/public/img/placeholder/widescreen.png new file mode 100644 index 0000000..ece58d9 Binary files /dev/null and b/public/img/placeholder/widescreen.png differ diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..1d69f3a --- /dev/null +++ b/public/index.php @@ -0,0 +1,55 @@ +make(Kernel::class); + +$response = $kernel->handle( + $request = Request::capture() +)->send(); + +$kernel->terminate($request, $response); diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/public/vid/landing.mp4 b/public/vid/landing.mp4 new file mode 100644 index 0000000..c296d54 Binary files /dev/null and b/public/vid/landing.mp4 differ diff --git a/public/vid/landing.webm b/public/vid/landing.webm new file mode 100644 index 0000000..6c64a38 Binary files /dev/null and b/public/vid/landing.webm differ diff --git a/resources/css/fa6-pro.min.css b/resources/css/fa6-pro.min.css new file mode 100644 index 0000000..326f8e3 --- /dev/null +++ b/resources/css/fa6-pro.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Pro 6.1.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + * Copyright 2022 Fonticons, Inc. + */.fa{font-family:var(--fa-style-family,"Font Awesome 6 Pro");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-duotone,.fa-light,.fa-regular,.fa-solid,.fa-thin,.fab,.fad,.fal,.far,.fas,.fat{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-00:before{content:"\e467"}.fa-360-degrees:before{content:"\e2dc"}.fa-a:before{content:"\41"}.fa-abacus:before{content:"\f640"}.fa-accent-grave:before{content:"\60"}.fa-acorn:before{content:"\f6ae"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-air-conditioner:before{content:"\f8f4"}.fa-airplay:before{content:"\e089"}.fa-alarm-clock:before{content:"\f34e"}.fa-alarm-exclamation:before{content:"\f843"}.fa-alarm-plus:before{content:"\f844"}.fa-alarm-snooze:before{content:"\f845"}.fa-album:before{content:"\f89f"}.fa-album-circle-plus:before{content:"\e48c"}.fa-album-circle-user:before{content:"\e48d"}.fa-album-collection:before{content:"\f8a0"}.fa-album-collection-circle-plus:before{content:"\e48e"}.fa-album-collection-circle-user:before{content:"\e48f"}.fa-alicorn:before{content:"\f6b0"}.fa-alien:before{content:"\f8f5"}.fa-alien-8bit:before,.fa-alien-monster:before{content:"\f8f6"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-align-slash:before{content:"\f846"}.fa-alt:before{content:"\e08a"}.fa-amp-guitar:before{content:"\f8a1"}.fa-ampersand:before{content:"\26"}.fa-anchor:before{content:"\f13d"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-anchor-lock:before{content:"\e4ad"}.fa-angel:before{content:"\f779"}.fa-angle:before{content:"\e08c"}.fa-angle-90:before{content:"\e08d"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-ankh:before{content:"\f644"}.fa-apartment:before{content:"\e468"}.fa-aperture:before{content:"\e2df"}.fa-apostrophe:before{content:"\27"}.fa-apple-core:before{content:"\e08f"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-archway:before{content:"\f557"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-arrow-down-arrow-up:before,.fa-sort-alt:before{content:"\f883"}.fa-arrow-down-big-small:before,.fa-sort-size-down:before{content:"\f88c"}.fa-arrow-down-from-dotted-line:before{content:"\e090"}.fa-arrow-down-from-line:before,.fa-arrow-from-top:before{content:"\f345"}.fa-arrow-down-left:before{content:"\e091"}.fa-arrow-down-left-and-arrow-up-right-to-center:before{content:"\e092"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-arrow-down-right:before{content:"\e093"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-arrow-down-small-big:before,.fa-sort-size-down-alt:before{content:"\f88d"}.fa-arrow-down-square-triangle:before,.fa-sort-shapes-down-alt:before{content:"\f889"}.fa-arrow-down-to-arc:before{content:"\e4ae"}.fa-arrow-down-to-bracket:before{content:"\e094"}.fa-arrow-down-to-dotted-line:before{content:"\e095"}.fa-arrow-down-to-line:before,.fa-arrow-to-bottom:before{content:"\f33d"}.fa-arrow-down-to-square:before{content:"\e096"}.fa-arrow-down-triangle-square:before,.fa-sort-shapes-down:before{content:"\f888"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-from-right:before,.fa-arrow-left-from-line:before{content:"\f344"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-arrow-left-long-to-line:before{content:"\e3d4"}.fa-arrow-left-to-line:before,.fa-arrow-to-left:before{content:"\f33e"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-arrow-right-from-arc:before{content:"\e4b1"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-arrow-from-left:before,.fa-arrow-right-from-line:before{content:"\f343"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-arrow-right-long-to-line:before{content:"\e3d5"}.fa-arrow-right-to-arc:before{content:"\e4b2"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-arrow-right-to-line:before,.fa-arrow-to-right:before{content:"\f340"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-arrow-trend-down:before{content:"\e097"}.fa-arrow-trend-up:before{content:"\e098"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-arrow-turn-down-left:before{content:"\e2e1"}.fa-arrow-turn-down-right:before{content:"\e3d6"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-arrow-up-arrow-down:before,.fa-sort-up-down:before{content:"\e099"}.fa-arrow-up-big-small:before,.fa-sort-size-up:before{content:"\f88e"}.fa-arrow-up-from-arc:before{content:"\e4b4"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-arrow-up-from-dotted-line:before{content:"\e09b"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-arrow-from-bottom:before,.fa-arrow-up-from-line:before{content:"\f342"}.fa-arrow-up-from-square:before{content:"\e09c"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-arrow-up-left:before{content:"\e09d"}.fa-arrow-up-left-from-circle:before{content:"\e09e"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-arrow-up-right:before{content:"\e09f"}.fa-arrow-up-right-and-arrow-down-left-from-center:before{content:"\e0a0"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-arrow-up-small-big:before,.fa-sort-size-up-alt:before{content:"\f88f"}.fa-arrow-up-square-triangle:before,.fa-sort-shapes-up-alt:before{content:"\f88b"}.fa-arrow-up-to-dotted-line:before{content:"\e0a1"}.fa-arrow-to-top:before,.fa-arrow-up-to-line:before{content:"\f341"}.fa-arrow-up-triangle-square:before,.fa-sort-shapes-up:before{content:"\f88a"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-arrows-cross:before{content:"\e0a2"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-arrows-from-dotted-line:before{content:"\e0a3"}.fa-arrows-from-line:before{content:"\e0a4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-arrows-maximize:before,.fa-expand-arrows:before{content:"\f31d"}.fa-arrows-minimize:before,.fa-compress-arrows:before{content:"\e0a5"}.fa-arrows-repeat:before,.fa-repeat-alt:before{content:"\f364"}.fa-arrows-repeat-1:before,.fa-repeat-1-alt:before{content:"\f366"}.fa-arrows-retweet:before,.fa-retweet-alt:before{content:"\f361"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-arrows-spin:before{content:"\e4bb"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-arrows-to-dotted-line:before{content:"\e0a6"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-arrows-to-line:before{content:"\e0a7"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-asterisk:before{content:"\2a"}.fa-at:before{content:"\40"}.fa-atom:before{content:"\f5d2"}.fa-atom-alt:before,.fa-atom-simple:before{content:"\f5d3"}.fa-audio-description:before{content:"\f29e"}.fa-audio-description-slash:before{content:"\e0a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-avocado:before{content:"\e0aa"}.fa-award:before{content:"\f559"}.fa-award-simple:before{content:"\e0ab"}.fa-axe:before{content:"\f6b2"}.fa-axe-battle:before{content:"\f6b3"}.fa-b:before{content:"\42"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-backpack:before{content:"\f5d4"}.fa-backward:before{content:"\f04a"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-badge:before{content:"\f335"}.fa-badge-check:before{content:"\f336"}.fa-badge-dollar:before{content:"\f645"}.fa-badge-percent:before{content:"\f646"}.fa-badge-sheriff:before{content:"\f8a2"}.fa-badger-honey:before{content:"\f6b4"}.fa-badminton:before{content:"\e33a"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-bagel:before{content:"\e3d7"}.fa-bags-shopping:before{content:"\f847"}.fa-baguette:before{content:"\e3d8"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-baht-sign:before{content:"\e0ac"}.fa-ball-pile:before{content:"\f77e"}.fa-balloon:before{content:"\e2e3"}.fa-balloons:before{content:"\e2e4"}.fa-ballot:before{content:"\f732"}.fa-ballot-check:before{content:"\f733"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-ban-bug:before,.fa-debug:before{content:"\f7f9"}.fa-ban-parking:before,.fa-parking-circle-slash:before{content:"\f616"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-banana:before{content:"\e2e5"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-banjo:before{content:"\f8a3"}.fa-barcode:before{content:"\f02a"}.fa-barcode-read:before{content:"\f464"}.fa-barcode-scan:before{content:"\f465"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-bars-filter:before{content:"\e0ad"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-bars-sort:before{content:"\e0ae"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-basket-shopping-simple:before,.fa-shopping-basket-alt:before{content:"\e0af"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-basketball-hoop:before{content:"\f435"}.fa-bat:before{content:"\f6b5"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-battery-bolt:before{content:"\f376"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-battery-exclamation:before{content:"\e0b0"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-low:before{content:"\e0b1"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-slash:before{content:"\f377"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-bed-bunk:before{content:"\f8f8"}.fa-bed-empty:before{content:"\f8f9"}.fa-bed-alt:before,.fa-bed-front:before{content:"\f8f7"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-bee:before{content:"\e0b2"}.fa-beer-foam:before,.fa-beer-mug:before{content:"\e0b3"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-bell:before{content:"\f0f3"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-bell-exclamation:before{content:"\f848"}.fa-bell-on:before{content:"\f8fa"}.fa-bell-plus:before{content:"\f849"}.fa-bell-school:before{content:"\f5d5"}.fa-bell-school-slash:before{content:"\f5d6"}.fa-bell-slash:before{content:"\f1f6"}.fa-bells:before{content:"\f77f"}.fa-bench-tree:before{content:"\e2e7"}.fa-bezier-curve:before{content:"\f55b"}.fa-bicycle:before{content:"\f206"}.fa-binary:before{content:"\e33b"}.fa-binary-circle-check:before{content:"\e33c"}.fa-binary-lock:before{content:"\e33d"}.fa-binary-slash:before{content:"\e33e"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-bird:before{content:"\e469"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-blanket:before{content:"\f498"}.fa-blanket-fire:before{content:"\e3da"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blinds:before{content:"\f8fb"}.fa-blinds-open:before{content:"\f8fc"}.fa-blinds-raised:before{content:"\f8fd"}.fa-block:before{content:"\e46a"}.fa-block-brick:before,.fa-wall-brick:before{content:"\e3db"}.fa-block-brick-fire:before,.fa-firewall:before{content:"\e3dc"}.fa-block-question:before{content:"\e3dd"}.fa-block-quote:before{content:"\e0b5"}.fa-blog:before{content:"\f781"}.fa-blueberries:before{content:"\e2e8"}.fa-bold:before{content:"\f032"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-bolt-auto:before{content:"\e0b6"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-bolt-slash:before{content:"\e0b8"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bone-break:before{content:"\f5d8"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-arrow-right:before{content:"\e0b9"}.fa-book-arrow-up:before{content:"\e0ba"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-book-alt:before,.fa-book-blank:before{content:"\f5d9"}.fa-book-bookmark:before{content:"\e0bb"}.fa-book-circle-arrow-right:before{content:"\e0bc"}.fa-book-circle-arrow-up:before{content:"\e0bd"}.fa-book-copy:before{content:"\e0be"}.fa-book-font:before{content:"\e0bf"}.fa-book-heart:before{content:"\f499"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-open-alt:before,.fa-book-open-cover:before{content:"\e0c0"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-book-law:before,.fa-book-section:before{content:"\e0c1"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-book-sparkles:before,.fa-book-spells:before{content:"\f6b8"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-book-user:before{content:"\f7e7"}.fa-bookmark:before{content:"\f02e"}.fa-bookmark-slash:before{content:"\e0c2"}.fa-books:before{content:"\f5db"}.fa-books-medical:before{content:"\f7e8"}.fa-boombox:before{content:"\f8a5"}.fa-boot:before{content:"\f782"}.fa-boot-heeled:before{content:"\e33f"}.fa-booth-curtain:before{content:"\f734"}.fa-border-all:before{content:"\f84c"}.fa-border-bottom:before{content:"\f84d"}.fa-border-bottom-right:before,.fa-border-style-alt:before{content:"\f854"}.fa-border-center-h:before{content:"\f89c"}.fa-border-center-v:before{content:"\f89d"}.fa-border-inner:before{content:"\f84e"}.fa-border-left:before{content:"\f84f"}.fa-border-none:before{content:"\f850"}.fa-border-outer:before{content:"\f851"}.fa-border-right:before{content:"\f852"}.fa-border-top:before{content:"\f855"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-bore-hole:before{content:"\e4c3"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-bottle-water:before{content:"\e4c5"}.fa-bow-arrow:before{content:"\f6b9"}.fa-bowl-chopsticks:before{content:"\e2e9"}.fa-bowl-chopsticks-noodles:before{content:"\e2ea"}.fa-bowl-food:before{content:"\e4c6"}.fa-bowl-hot:before,.fa-soup:before{content:"\f823"}.fa-bowl-rice:before{content:"\e2eb"}.fa-bowl-scoop:before,.fa-bowl-shaved-ice:before{content:"\e3de"}.fa-bowl-scoops:before{content:"\e3df"}.fa-bowl-soft-serve:before{content:"\e46b"}.fa-bowl-spoon:before{content:"\e3e0"}.fa-bowling-ball:before{content:"\f436"}.fa-bowling-ball-pin:before{content:"\e0c3"}.fa-bowling-pins:before{content:"\f437"}.fa-box:before{content:"\f466"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-box-ballot:before{content:"\f735"}.fa-box-check:before{content:"\f467"}.fa-box-circle-check:before{content:"\e0c4"}.fa-box-dollar:before,.fa-box-usd:before{content:"\f4a0"}.fa-box-heart:before{content:"\f49d"}.fa-box-open:before{content:"\f49e"}.fa-box-full:before,.fa-box-open-full:before{content:"\f49c"}.fa-box-alt:before,.fa-box-taped:before{content:"\f49a"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes-packing:before{content:"\e4c7"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-boxing-glove:before,.fa-glove-boxing:before{content:"\f438"}.fa-bracket-curly-left:before,.fa-bracket-curly:before{content:"\7b"}.fa-bracket-curly-right:before{content:"\7d"}.fa-bracket-round:before,.fa-parenthesis:before{content:"\28"}.fa-bracket-round-right:before{content:"\29"}.fa-bracket-left:before,.fa-bracket-square:before,.fa-bracket:before{content:"\5b"}.fa-bracket-square-right:before{content:"\5d"}.fa-brackets-curly:before{content:"\f7ea"}.fa-brackets-round:before,.fa-parentheses:before{content:"\e0c5"}.fa-brackets-square:before,.fa-brackets:before{content:"\f7e9"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-brain-arrow-curved-right:before,.fa-mind-share:before{content:"\f677"}.fa-brain-circuit:before{content:"\e0c6"}.fa-brake-warning:before{content:"\e0c7"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-bread-loaf:before{content:"\f7eb"}.fa-bread-slice:before{content:"\f7ec"}.fa-bread-slice-butter:before{content:"\e3e1"}.fa-bridge:before{content:"\e4c8"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-bridge-suspension:before{content:"\e4cd"}.fa-bridge-water:before{content:"\e4ce"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-arrow-right:before{content:"\e2f2"}.fa-briefcase-blank:before{content:"\e0c8"}.fa-briefcase-medical:before{content:"\f469"}.fa-brightness:before{content:"\e0c9"}.fa-brightness-low:before{content:"\e0ca"}.fa-bring-forward:before{content:"\f856"}.fa-bring-front:before{content:"\f857"}.fa-broccoli:before{content:"\e3e2"}.fa-broom:before{content:"\f51a"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-browser:before{content:"\f37e"}.fa-browsers:before{content:"\e0cb"}.fa-brush:before{content:"\f55d"}.fa-bucket:before{content:"\e4cf"}.fa-bug:before{content:"\f188"}.fa-bug-slash:before{content:"\e490"}.fa-bugs:before{content:"\e4d0"}.fa-building:before{content:"\f1ad"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-building-circle-check:before{content:"\e4d2"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-building-flag:before{content:"\e4d5"}.fa-building-lock:before{content:"\e4d6"}.fa-building-ngo:before{content:"\e4d7"}.fa-building-shield:before{content:"\e4d8"}.fa-building-un:before{content:"\e4d9"}.fa-building-user:before{content:"\e4da"}.fa-building-wheat:before{content:"\e4db"}.fa-buildings:before{content:"\e0cc"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-bullseye-arrow:before{content:"\f648"}.fa-bullseye-pointer:before{content:"\f649"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-burger-cheese:before,.fa-cheeseburger:before{content:"\f7f1"}.fa-burger-fries:before{content:"\e0cd"}.fa-burger-glass:before{content:"\e0ce"}.fa-burger-lettuce:before{content:"\e3e3"}.fa-burger-soda:before{content:"\f858"}.fa-burrito:before{content:"\f7ed"}.fa-burst:before{content:"\e4dc"}.fa-bus:before{content:"\f207"}.fa-bus-school:before{content:"\f5dd"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-butter:before{content:"\e3e4"}.fa-c:before{content:"\43"}.fa-cabin:before{content:"\e46d"}.fa-cabinet-filing:before{content:"\f64b"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cactus:before{content:"\f8a7"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-cake-slice:before,.fa-shortcake:before{content:"\e3e5"}.fa-calculator:before{content:"\f1ec"}.fa-calculator-alt:before,.fa-calculator-simple:before{content:"\f64c"}.fa-calendar:before{content:"\f133"}.fa-calendar-arrow-down:before,.fa-calendar-download:before{content:"\e0d0"}.fa-calendar-arrow-up:before,.fa-calendar-upload:before{content:"\e0d1"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-circle-exclamation:before{content:"\e46e"}.fa-calendar-circle-minus:before{content:"\e46f"}.fa-calendar-circle-plus:before{content:"\e470"}.fa-calendar-circle-user:before{content:"\e471"}.fa-calendar-clock:before,.fa-calendar-time:before{content:"\e0d2"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-calendar-exclamation:before{content:"\f334"}.fa-calendar-heart:before{content:"\e0d3"}.fa-calendar-image:before{content:"\e0d4"}.fa-calendar-lines:before,.fa-calendar-note:before{content:"\e0d5"}.fa-calendar-lines-pen:before{content:"\e472"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-edit:before,.fa-calendar-pen:before{content:"\f333"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-range:before{content:"\e0d6"}.fa-calendar-star:before{content:"\f736"}.fa-calendar-week:before{content:"\f784"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-calendars:before{content:"\e0d7"}.fa-camcorder:before,.fa-video-handheld:before{content:"\f8a8"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-camera-cctv:before,.fa-cctv:before{content:"\f8ac"}.fa-camera-movie:before{content:"\f8a9"}.fa-camera-polaroid:before{content:"\f8aa"}.fa-camera-retro:before{content:"\f083"}.fa-camera-rotate:before{content:"\e0d8"}.fa-camera-home:before,.fa-camera-security:before{content:"\f8fe"}.fa-camera-slash:before{content:"\e0d9"}.fa-camera-viewfinder:before,.fa-screenshot:before{content:"\e0da"}.fa-camera-web:before,.fa-webcam:before{content:"\f832"}.fa-camera-web-slash:before,.fa-webcam-slash:before{content:"\f833"}.fa-campfire:before{content:"\f6ba"}.fa-campground:before{content:"\f6bb"}.fa-can-food:before{content:"\e3e6"}.fa-candle-holder:before{content:"\f6bc"}.fa-candy:before{content:"\e3e7"}.fa-candy-bar:before,.fa-chocolate-bar:before{content:"\e3e8"}.fa-candy-cane:before{content:"\f786"}.fa-candy-corn:before{content:"\f6bd"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-car-bolt:before{content:"\e341"}.fa-car-building:before{content:"\f859"}.fa-car-bump:before{content:"\f5e0"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-car-bus:before{content:"\f85a"}.fa-car-circle-bolt:before{content:"\e342"}.fa-car-garage:before{content:"\f5e2"}.fa-car-mirrors:before{content:"\e343"}.fa-car-on:before{content:"\e4dd"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-car-side:before{content:"\f5e4"}.fa-car-side-bolt:before{content:"\e344"}.fa-car-tilt:before{content:"\f5e5"}.fa-car-tunnel:before{content:"\e4de"}.fa-car-wash:before{content:"\f5e6"}.fa-car-mechanic:before,.fa-car-wrench:before{content:"\f5e3"}.fa-caravan:before{content:"\f8ff"}.fa-caravan-alt:before,.fa-caravan-simple:before{content:"\e000"}.fa-card-club:before{content:"\e3e9"}.fa-card-diamond:before{content:"\e3ea"}.fa-card-heart:before{content:"\e3eb"}.fa-card-spade:before{content:"\e3ec"}.fa-cards:before{content:"\e3ed"}.fa-cards-blank:before{content:"\e4df"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cars:before{content:"\f85b"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-arrow-up:before{content:"\e3ee"}.fa-cart-circle-arrow-down:before{content:"\e3ef"}.fa-cart-circle-arrow-up:before{content:"\e3f0"}.fa-cart-circle-check:before{content:"\e3f1"}.fa-cart-circle-exclamation:before{content:"\e3f2"}.fa-cart-circle-plus:before{content:"\e3f3"}.fa-cart-circle-xmark:before{content:"\e3f4"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-cart-flatbed-boxes:before,.fa-dolly-flatbed-alt:before{content:"\f475"}.fa-cart-flatbed-empty:before,.fa-dolly-flatbed-empty:before{content:"\f476"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-cart-minus:before{content:"\e0db"}.fa-cart-plus:before{content:"\f217"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-cart-shopping-fast:before{content:"\e0dc"}.fa-cart-xmark:before{content:"\e0dd"}.fa-cash-register:before{content:"\f788"}.fa-betamax:before,.fa-cassette-betamax:before{content:"\f8a4"}.fa-cassette-tape:before{content:"\f8ab"}.fa-cassette-vhs:before,.fa-vhs:before{content:"\f8ec"}.fa-castle:before{content:"\e0de"}.fa-cat:before{content:"\f6be"}.fa-cat-space:before{content:"\e001"}.fa-cauldron:before{content:"\f6bf"}.fa-cedi-sign:before{content:"\e0df"}.fa-cent-sign:before{content:"\e3f5"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chair-office:before{content:"\f6c1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-champagne-glass:before,.fa-glass-champagne:before{content:"\f79e"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-charging-station:before{content:"\f5e7"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-chart-bullet:before{content:"\e0e1"}.fa-chart-candlestick:before{content:"\e0e2"}.fa-chart-column:before{content:"\e0e3"}.fa-chart-gantt:before{content:"\e0e4"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-chart-line-down:before{content:"\f64d"}.fa-chart-line-up:before{content:"\e0e5"}.fa-analytics:before,.fa-chart-mixed:before{content:"\f643"}.fa-chart-network:before{content:"\f78a"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-chart-pie-alt:before,.fa-chart-pie-simple:before{content:"\f64e"}.fa-chart-pyramid:before{content:"\e0e6"}.fa-chart-radar:before{content:"\e0e7"}.fa-chart-scatter:before{content:"\f7ee"}.fa-chart-scatter-3d:before{content:"\e0e8"}.fa-chart-scatter-bubble:before{content:"\e0e9"}.fa-chart-simple:before{content:"\e473"}.fa-chart-simple-horizontal:before{content:"\e474"}.fa-chart-tree-map:before{content:"\e0ea"}.fa-chart-user:before,.fa-user-chart:before{content:"\f6a3"}.fa-chart-waterfall:before{content:"\e0eb"}.fa-check:before{content:"\f00c"}.fa-check-double:before{content:"\f560"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-cheese:before{content:"\f7ef"}.fa-cheese-swiss:before{content:"\f7f0"}.fa-cherries:before{content:"\e0ec"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-bishop-alt:before,.fa-chess-bishop-piece:before{content:"\f43b"}.fa-chess-board:before{content:"\f43c"}.fa-chess-clock:before{content:"\f43d"}.fa-chess-clock-alt:before,.fa-chess-clock-flip:before{content:"\f43e"}.fa-chess-king:before{content:"\f43f"}.fa-chess-king-alt:before,.fa-chess-king-piece:before{content:"\f440"}.fa-chess-knight:before{content:"\f441"}.fa-chess-knight-alt:before,.fa-chess-knight-piece:before{content:"\f442"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-pawn-alt:before,.fa-chess-pawn-piece:before{content:"\f444"}.fa-chess-queen:before{content:"\f445"}.fa-chess-queen-alt:before,.fa-chess-queen-piece:before{content:"\f446"}.fa-chess-rook:before{content:"\f447"}.fa-chess-rook-alt:before,.fa-chess-rook-piece:before{content:"\f448"}.fa-chestnut:before{content:"\e3f6"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-double-down:before,.fa-chevrons-down:before{content:"\f322"}.fa-chevron-double-left:before,.fa-chevrons-left:before{content:"\f323"}.fa-chevron-double-right:before,.fa-chevrons-right:before{content:"\f324"}.fa-chevron-double-up:before,.fa-chevrons-up:before{content:"\f325"}.fa-child:before{content:"\f1ae"}.fa-child-dress:before{content:"\e59c"}.fa-child-reaching:before{content:"\e59d"}.fa-child-rifle:before{content:"\e4e0"}.fa-children:before{content:"\e4e1"}.fa-chimney:before{content:"\f78b"}.fa-chopsticks:before{content:"\e3f7"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-0:before{content:"\e0ed"}.fa-circle-1:before{content:"\e0ee"}.fa-circle-2:before{content:"\e0ef"}.fa-circle-3:before{content:"\e0f0"}.fa-circle-4:before{content:"\e0f1"}.fa-circle-5:before{content:"\e0f2"}.fa-circle-6:before{content:"\e0f3"}.fa-circle-7:before{content:"\e0f4"}.fa-circle-8:before{content:"\e0f5"}.fa-circle-9:before{content:"\e0f6"}.fa-circle-a:before{content:"\e0f7"}.fa-circle-ampersand:before{content:"\e0f8"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-circle-arrow-down-left:before{content:"\e0f9"}.fa-circle-arrow-down-right:before{content:"\e0fa"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-circle-arrow-up-left:before{content:"\e0fb"}.fa-circle-arrow-up-right:before{content:"\e0fc"}.fa-circle-b:before{content:"\e0fd"}.fa-circle-bolt:before{content:"\e0fe"}.fa-book-circle:before,.fa-circle-book-open:before{content:"\e0ff"}.fa-bookmark-circle:before,.fa-circle-bookmark:before{content:"\e100"}.fa-circle-c:before{content:"\e101"}.fa-calendar-circle:before,.fa-circle-calendar:before{content:"\e102"}.fa-camera-circle:before,.fa-circle-camera:before{content:"\e103"}.fa-caret-circle-down:before,.fa-circle-caret-down:before{content:"\f32d"}.fa-caret-circle-left:before,.fa-circle-caret-left:before{content:"\f32e"}.fa-caret-circle-right:before,.fa-circle-caret-right:before{content:"\f330"}.fa-caret-circle-up:before,.fa-circle-caret-up:before{content:"\f331"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-circle-d:before{content:"\e104"}.fa-circle-dashed:before{content:"\e105"}.fa-circle-divide:before{content:"\e106"}.fa-circle-dollar:before,.fa-dollar-circle:before,.fa-usd-circle:before{content:"\f2e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-circle-down-left:before{content:"\e107"}.fa-circle-down-right:before{content:"\e108"}.fa-circle-e:before{content:"\e109"}.fa-circle-ellipsis:before{content:"\e10a"}.fa-circle-ellipsis-vertical:before{content:"\e10b"}.fa-circle-envelope:before,.fa-envelope-circle:before{content:"\e10c"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-circle-exclamation-check:before{content:"\e10d"}.fa-circle-f:before{content:"\e10e"}.fa-circle-g:before{content:"\e10f"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-circle-half:before{content:"\e110"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-circle-heart:before,.fa-heart-circle:before{content:"\f4c7"}.fa-circle-i:before{content:"\e111"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-circle-j:before{content:"\e112"}.fa-circle-k:before{content:"\e113"}.fa-circle-l:before{content:"\e114"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-circle-location-arrow:before,.fa-location-circle:before{content:"\f602"}.fa-circle-m:before{content:"\e115"}.fa-circle-microphone:before,.fa-microphone-circle:before{content:"\e116"}.fa-circle-microphone-lines:before,.fa-microphone-circle-alt:before{content:"\e117"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-circle-n:before{content:"\e118"}.fa-circle-nodes:before{content:"\e4e2"}.fa-circle-notch:before{content:"\f1ce"}.fa-circle-o:before{content:"\e119"}.fa-circle-p:before{content:"\e11a"}.fa-circle-parking:before,.fa-parking-circle:before{content:"\f615"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-circle-phone:before,.fa-phone-circle:before{content:"\e11b"}.fa-circle-phone-flip:before,.fa-phone-circle-alt:before{content:"\e11c"}.fa-circle-phone-hangup:before,.fa-phone-circle-down:before{content:"\e11d"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-circle-q:before{content:"\e11e"}.fa-circle-quarter:before{content:"\e11f"}.fa-circle-quarters:before{content:"\e3f8"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-circle-r:before{content:"\e120"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-circle-s:before{content:"\e121"}.fa-circle-small:before{content:"\e122"}.fa-circle-sort:before,.fa-sort-circle:before{content:"\e030"}.fa-circle-sort-down:before,.fa-sort-circle-down:before{content:"\e031"}.fa-circle-sort-up:before,.fa-sort-circle-up:before{content:"\e032"}.fa-circle-star:before,.fa-star-circle:before{content:"\e123"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-circle-t:before{content:"\e124"}.fa-circle-three-quarters:before{content:"\e125"}.fa-circle-trash:before,.fa-trash-circle:before{content:"\e126"}.fa-circle-u:before{content:"\e127"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-circle-up-left:before{content:"\e128"}.fa-circle-up-right:before{content:"\e129"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-circle-v:before{content:"\e12a"}.fa-circle-video:before,.fa-video-circle:before{content:"\e12b"}.fa-circle-w:before{content:"\e12c"}.fa-circle-waveform-lines:before,.fa-waveform-circle:before{content:"\e12d"}.fa-circle-x:before{content:"\e12e"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-circle-y:before{content:"\e12f"}.fa-circle-z:before{content:"\e130"}.fa-citrus:before{content:"\e2f4"}.fa-citrus-slice:before{content:"\e2f5"}.fa-city:before{content:"\f64f"}.fa-clapperboard:before{content:"\e131"}.fa-clapperboard-play:before{content:"\e132"}.fa-clarinet:before{content:"\f8ad"}.fa-claw-marks:before{content:"\f6c2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clipboard-list-check:before{content:"\f737"}.fa-clipboard-medical:before{content:"\e133"}.fa-clipboard-prescription:before{content:"\f5e8"}.fa-clipboard-question:before{content:"\e4e3"}.fa-clipboard-user:before{content:"\f7f3"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-clock-desk:before{content:"\e134"}.fa-clock-eight:before{content:"\e345"}.fa-clock-eight-thirty:before{content:"\e346"}.fa-clock-eleven:before{content:"\e347"}.fa-clock-eleven-thirty:before{content:"\e348"}.fa-clock-five:before{content:"\e349"}.fa-clock-five-thirty:before{content:"\e34a"}.fa-clock-four-thirty:before{content:"\e34b"}.fa-clock-nine:before{content:"\e34c"}.fa-clock-nine-thirty:before{content:"\e34d"}.fa-clock-one:before{content:"\e34e"}.fa-clock-one-thirty:before{content:"\e34f"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-clock-seven:before{content:"\e350"}.fa-clock-seven-thirty:before{content:"\e351"}.fa-clock-six:before{content:"\e352"}.fa-clock-six-thirty:before{content:"\e353"}.fa-clock-ten:before{content:"\e354"}.fa-clock-ten-thirty:before{content:"\e355"}.fa-clock-three:before{content:"\e356"}.fa-clock-three-thirty:before{content:"\e357"}.fa-clock-twelve:before{content:"\e358"}.fa-clock-twelve-thirty:before{content:"\e359"}.fa-clock-two:before{content:"\e35a"}.fa-clock-two-thirty:before{content:"\e35b"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-closed-captioning-slash:before{content:"\e135"}.fa-clothes-hanger:before{content:"\e136"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-cloud-bolt-moon:before,.fa-thunderstorm-moon:before{content:"\f76d"}.fa-cloud-bolt-sun:before,.fa-thunderstorm-sun:before{content:"\f76e"}.fa-cloud-check:before{content:"\e35c"}.fa-cloud-drizzle:before{content:"\f738"}.fa-cloud-exclamation:before{content:"\e491"}.fa-cloud-fog:before,.fa-fog:before{content:"\f74e"}.fa-cloud-hail:before{content:"\f739"}.fa-cloud-hail-mixed:before{content:"\f73a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-minus:before{content:"\e35d"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-music:before{content:"\f8ae"}.fa-cloud-plus:before{content:"\e35e"}.fa-cloud-question:before{content:"\e492"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-rainbow:before{content:"\f73e"}.fa-cloud-showers:before{content:"\f73f"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-cloud-slash:before{content:"\e137"}.fa-cloud-sleet:before{content:"\f741"}.fa-cloud-snow:before{content:"\f742"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-word:before{content:"\e138"}.fa-cloud-xmark:before{content:"\e35f"}.fa-clouds:before{content:"\f744"}.fa-clouds-moon:before{content:"\f745"}.fa-clouds-sun:before{content:"\f746"}.fa-clover:before{content:"\e139"}.fa-club:before{content:"\f327"}.fa-coconut:before{content:"\e2f6"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-code-commit:before{content:"\f386"}.fa-code-compare:before{content:"\e13a"}.fa-code-fork:before{content:"\e13b"}.fa-code-merge:before{content:"\f387"}.fa-code-pull-request:before{content:"\e13c"}.fa-code-pull-request-closed:before{content:"\e3f9"}.fa-code-pull-request-draft:before{content:"\e3fa"}.fa-code-simple:before{content:"\e13d"}.fa-coffee-bean:before{content:"\e13e"}.fa-coffee-beans:before{content:"\e13f"}.fa-coffee-pot:before{content:"\e002"}.fa-coffin:before{content:"\f6c6"}.fa-coffin-cross:before{content:"\e051"}.fa-coin:before{content:"\f85c"}.fa-coin-blank:before{content:"\e3fb"}.fa-coin-front:before{content:"\e3fc"}.fa-coin-vertical:before{content:"\e3fd"}.fa-coins:before{content:"\f51e"}.fa-colon:before{content:"\3a"}.fa-colon-sign:before{content:"\e140"}.fa-columns-3:before{content:"\e361"}.fa-comet:before{content:"\e003"}.fa-comma:before{content:"\2c"}.fa-command:before{content:"\e142"}.fa-comment:before{content:"\f075"}.fa-comment-arrow-down:before{content:"\e143"}.fa-comment-arrow-up:before{content:"\e144"}.fa-comment-arrow-up-right:before{content:"\e145"}.fa-comment-captions:before{content:"\e146"}.fa-comment-check:before{content:"\f4ac"}.fa-comment-code:before{content:"\e147"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-comment-exclamation:before{content:"\f4af"}.fa-comment-image:before{content:"\e148"}.fa-comment-lines:before{content:"\f4b0"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-middle:before{content:"\e149"}.fa-comment-middle-top:before{content:"\e14a"}.fa-comment-minus:before{content:"\f4b1"}.fa-comment-music:before{content:"\f8b0"}.fa-comment-edit:before,.fa-comment-pen:before{content:"\f4ae"}.fa-comment-plus:before{content:"\f4b2"}.fa-comment-question:before{content:"\e14b"}.fa-comment-quote:before{content:"\e14c"}.fa-comment-slash:before{content:"\f4b3"}.fa-comment-smile:before{content:"\f4b4"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-comment-text:before{content:"\e14d"}.fa-comment-times:before,.fa-comment-xmark:before{content:"\f4b5"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-comments-question:before{content:"\e14e"}.fa-comments-question-check:before{content:"\e14f"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-compass-slash:before{content:"\f5e9"}.fa-compress:before{content:"\f066"}.fa-compress-wide:before{content:"\f326"}.fa-computer:before{content:"\e4e5"}.fa-computer-classic:before{content:"\f8b1"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-computer-mouse-scrollwheel:before,.fa-mouse-alt:before{content:"\f8cd"}.fa-computer-speaker:before{content:"\f8b2"}.fa-container-storage:before{content:"\f4b7"}.fa-conveyor-belt:before{content:"\f46e"}.fa-conveyor-belt-alt:before,.fa-conveyor-belt-boxes:before{content:"\f46f"}.fa-conveyor-belt-empty:before{content:"\e150"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-corn:before{content:"\f6c7"}.fa-corner:before{content:"\e3fe"}.fa-couch:before{content:"\f4b8"}.fa-cow:before{content:"\f6c8"}.fa-cowbell:before{content:"\f8b3"}.fa-cowbell-circle-plus:before,.fa-cowbell-more:before{content:"\f8b4"}.fa-crab:before{content:"\e3ff"}.fa-crate-apple:before{content:"\f6b1"}.fa-apple-crate:before{content:"\f6b1"}.fa-crate-empty:before{content:"\e151"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-credit-card-blank:before{content:"\f389"}.fa-credit-card-front:before{content:"\f38a"}.fa-cricket-bat-ball:before,.fa-cricket:before{content:"\f449"}.fa-croissant:before{content:"\f7f6"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crosshairs-simple:before{content:"\e59f"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-crutches:before{content:"\f7f8"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-crystal-ball:before{content:"\e362"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-cucumber:before{content:"\e401"}.fa-cup-straw:before{content:"\e363"}.fa-cup-straw-swoosh:before{content:"\e364"}.fa-coffee-togo:before,.fa-cup-togo:before{content:"\f6c5"}.fa-cupcake:before{content:"\e402"}.fa-curling-stone:before,.fa-curling:before{content:"\f44a"}.fa-custard:before{content:"\e403"}.fa-d:before{content:"\44"}.fa-dagger:before{content:"\f6cb"}.fa-dash:before,.fa-minus-large:before{content:"\e404"}.fa-database:before{content:"\f1c0"}.fa-deer:before{content:"\f78e"}.fa-deer-rudolph:before{content:"\f78f"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-delete-right:before{content:"\e154"}.fa-democrat:before{content:"\f747"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-desktop-arrow-down:before{content:"\e155"}.fa-dharmachakra:before{content:"\f655"}.fa-diagram-cells:before{content:"\e475"}.fa-diagram-lean-canvas:before{content:"\e156"}.fa-diagram-nested:before{content:"\e157"}.fa-diagram-next:before{content:"\e476"}.fa-diagram-predecessor:before{content:"\e477"}.fa-diagram-previous:before{content:"\e478"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-diagram-sankey:before{content:"\e158"}.fa-diagram-subtask:before{content:"\e479"}.fa-diagram-successor:before{content:"\e47a"}.fa-diagram-venn:before{content:"\e15a"}.fa-dial-med-high:before,.fa-dial:before{content:"\e15b"}.fa-dial-high:before{content:"\e15c"}.fa-dial-low:before{content:"\e15d"}.fa-dial-max:before{content:"\e15e"}.fa-dial-med:before{content:"\e15f"}.fa-dial-med-low:before{content:"\e160"}.fa-dial-min:before{content:"\e161"}.fa-dial-off:before{content:"\e162"}.fa-diamond:before{content:"\f219"}.fa-diamond-exclamation:before{content:"\e405"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-dice:before{content:"\f522"}.fa-dice-d10:before{content:"\f6cd"}.fa-dice-d12:before{content:"\f6ce"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d4:before{content:"\f6d0"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-d8:before{content:"\f6d2"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-diploma:before,.fa-scroll-ribbon:before{content:"\f5ea"}.fa-disc-drive:before{content:"\f8b5"}.fa-disease:before{content:"\f7fa"}.fa-display:before{content:"\e163"}.fa-display-arrow-down:before{content:"\e164"}.fa-desktop-code:before,.fa-display-code:before{content:"\e165"}.fa-desktop-medical:before,.fa-display-medical:before{content:"\e166"}.fa-desktop-slash:before,.fa-display-slash:before{content:"\e2fa"}.fa-distribute-spacing-horizontal:before{content:"\e365"}.fa-distribute-spacing-vertical:before{content:"\e366"}.fa-ditto:before{content:"\22"}.fa-divide:before{content:"\f529"}.fa-dna:before{content:"\f471"}.fa-do-not-enter:before{content:"\f5ec"}.fa-dog:before{content:"\f6d3"}.fa-dog-leashed:before{content:"\f6d4"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-dolly-empty:before{content:"\f473"}.fa-dolphin:before{content:"\e168"}.fa-dong-sign:before{content:"\e169"}.fa-donut:before,.fa-doughnut:before{content:"\e406"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dove:before{content:"\f4ba"}.fa-arrow-alt-down:before,.fa-down:before{content:"\f354"}.fa-down-from-dotted-line:before{content:"\e407"}.fa-arrow-alt-from-top:before,.fa-down-from-line:before{content:"\f349"}.fa-down-left:before{content:"\e16a"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-down-right:before{content:"\e16b"}.fa-down-to-bracket:before{content:"\e4e7"}.fa-down-to-dotted-line:before{content:"\e408"}.fa-arrow-alt-to-bottom:before,.fa-down-to-line:before{content:"\f34a"}.fa-download:before{content:"\f019"}.fa-dragon:before{content:"\f6d5"}.fa-draw-circle:before{content:"\f5ed"}.fa-draw-polygon:before{content:"\f5ee"}.fa-draw-square:before{content:"\f5ef"}.fa-dreidel:before{content:"\f792"}.fa-drone:before{content:"\f85f"}.fa-drone-alt:before,.fa-drone-front:before{content:"\f860"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-dewpoint:before,.fa-droplet-degree:before{content:"\f748"}.fa-droplet-percent:before,.fa-humidity:before{content:"\f750"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick:before{content:"\f6d6"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-dryer:before{content:"\f861"}.fa-dryer-alt:before,.fa-dryer-heat:before{content:"\f862"}.fa-duck:before{content:"\f6d8"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-e:before{content:"\45"}.fa-ear:before{content:"\f5f0"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-ear-muffs:before{content:"\f795"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-eclipse:before{content:"\f749"}.fa-egg:before{content:"\f7fb"}.fa-egg-fried:before{content:"\f7fc"}.fa-eggplant:before{content:"\e16c"}.fa-eject:before{content:"\f052"}.fa-elephant:before{content:"\f6da"}.fa-elevator:before{content:"\e16d"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-ellipsis-h-alt:before,.fa-ellipsis-stroke:before{content:"\f39b"}.fa-ellipsis-stroke-vertical:before,.fa-ellipsis-v-alt:before{content:"\f39c"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-empty-set:before{content:"\f656"}.fa-engine:before{content:"\e16e"}.fa-engine-exclamation:before,.fa-engine-warning:before{content:"\f5f2"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-envelope-badge:before,.fa-envelope-dot:before{content:"\e16f"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-dollar:before{content:"\f657"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelopes:before{content:"\e170"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-equals:before{content:"\3d"}.fa-eraser:before{content:"\f12d"}.fa-escalator:before{content:"\e171"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-exclamation:before{content:"\21"}.fa-expand:before{content:"\f065"}.fa-expand-wide:before{content:"\f320"}.fa-explosion:before{content:"\e4e9"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-eye-dropper-full:before{content:"\e172"}.fa-eye-dropper-half:before{content:"\e173"}.fa-eye-evil:before{content:"\f6db"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-eye-slash:before{content:"\f070"}.fa-eyes:before{content:"\e367"}.fa-f:before{content:"\46"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-face-angry-horns:before{content:"\e368"}.fa-face-anguished:before{content:"\e369"}.fa-face-anxious-sweat:before{content:"\e36a"}.fa-face-astonished:before{content:"\e36b"}.fa-face-awesome:before,.fa-gave-dandy:before{content:"\e409"}.fa-face-beam-hand-over-mouth:before{content:"\e47c"}.fa-face-clouds:before{content:"\e47d"}.fa-face-confounded:before{content:"\e36c"}.fa-face-confused:before{content:"\e36d"}.fa-face-cowboy-hat:before{content:"\e36e"}.fa-face-diagonal-mouth:before{content:"\e47e"}.fa-face-disappointed:before{content:"\e36f"}.fa-face-disguise:before{content:"\e370"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-face-dotted:before{content:"\e47f"}.fa-face-downcast-sweat:before{content:"\e371"}.fa-face-drooling:before{content:"\e372"}.fa-face-exhaling:before{content:"\e480"}.fa-exploding-head:before,.fa-face-explode:before{content:"\e2fe"}.fa-face-expressionless:before{content:"\e373"}.fa-face-eyes-xmarks:before{content:"\e374"}.fa-face-fearful:before{content:"\e375"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-face-frown-slight:before{content:"\e376"}.fa-face-glasses:before{content:"\e377"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-face-hand-over-mouth:before{content:"\e378"}.fa-face-hand-peeking:before{content:"\e481"}.fa-face-hand-yawn:before{content:"\e379"}.fa-face-head-bandage:before{content:"\e37a"}.fa-face-holding-back-tears:before{content:"\e482"}.fa-face-hushed:before{content:"\e37b"}.fa-face-icicles:before{content:"\e37c"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-face-kiss-closed-eyes:before{content:"\e37d"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-face-lying:before{content:"\e37e"}.fa-face-mask:before{content:"\e37f"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-face-melting:before{content:"\e483"}.fa-face-monocle:before{content:"\e380"}.fa-face-nauseated:before{content:"\e381"}.fa-face-nose-steam:before{content:"\e382"}.fa-face-party:before{content:"\e383"}.fa-face-pensive:before{content:"\e384"}.fa-face-persevering:before{content:"\e385"}.fa-face-pleading:before{content:"\e386"}.fa-face-pouting:before{content:"\e387"}.fa-face-raised-eyebrow:before{content:"\e388"}.fa-face-relieved:before{content:"\e389"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-face-sad-sweat:before{content:"\e38a"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-face-saluting:before{content:"\e484"}.fa-face-scream:before{content:"\e38b"}.fa-face-shush:before{content:"\e38c"}.fa-face-sleeping:before{content:"\e38d"}.fa-face-sleepy:before{content:"\e38e"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-face-smile-halo:before{content:"\e38f"}.fa-face-smile-hearts:before{content:"\e390"}.fa-face-smile-horns:before{content:"\e391"}.fa-face-smile-plus:before,.fa-smile-plus:before{content:"\f5b9"}.fa-face-smile-relaxed:before{content:"\e392"}.fa-face-smile-tear:before{content:"\e393"}.fa-face-smile-tongue:before{content:"\e394"}.fa-face-smile-upside-down:before{content:"\e395"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-face-smiling-hands:before{content:"\e396"}.fa-face-smirking:before{content:"\e397"}.fa-face-spiral-eyes:before{content:"\e485"}.fa-face-sunglasses:before{content:"\e398"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-face-swear:before{content:"\e399"}.fa-face-thermometer:before{content:"\e39a"}.fa-face-thinking:before{content:"\e39b"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-face-tissue:before{content:"\e39c"}.fa-face-tongue-money:before{content:"\e39d"}.fa-face-tongue-sweat:before{content:"\e39e"}.fa-face-unamused:before{content:"\e39f"}.fa-face-viewfinder:before{content:"\e2ff"}.fa-face-vomit:before{content:"\e3a0"}.fa-face-weary:before{content:"\e3a1"}.fa-face-woozy:before{content:"\e3a2"}.fa-face-worried:before{content:"\e3a3"}.fa-face-zany:before{content:"\e3a4"}.fa-face-zipper:before{content:"\e3a5"}.fa-falafel:before{content:"\e40a"}.fa-family:before{content:"\e300"}.fa-family-dress:before{content:"\e301"}.fa-family-pants:before{content:"\e302"}.fa-fan:before{content:"\f863"}.fa-fan-table:before{content:"\e004"}.fa-barn-silo:before,.fa-farm:before{content:"\f864"}.fa-faucet:before{content:"\e005"}.fa-faucet-drip:before{content:"\e006"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-fence:before{content:"\e303"}.fa-ferris-wheel:before{content:"\e174"}.fa-ferry:before{content:"\e4ea"}.fa-field-hockey-stick-ball:before,.fa-field-hockey:before{content:"\f44c"}.fa-file:before{content:"\f15b"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-file-audio:before{content:"\f1c7"}.fa-file-binary:before{content:"\e175"}.fa-file-award:before,.fa-file-certificate:before{content:"\f5f3"}.fa-file-chart-column:before,.fa-file-chart-line:before{content:"\f659"}.fa-file-chart-pie:before{content:"\f65a"}.fa-file-check:before{content:"\f316"}.fa-file-circle-check:before{content:"\e5a0"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-file-circle-info:before{content:"\e493"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-file-circle-plus:before{content:"\e494"}.fa-file-circle-question:before{content:"\e4ef"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-dashed-line:before,.fa-page-break:before{content:"\f877"}.fa-file-excel:before{content:"\f1c3"}.fa-file-exclamation:before{content:"\f31a"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-file-heart:before{content:"\e176"}.fa-file-image:before{content:"\f1c5"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-file-lock:before{content:"\e3a6"}.fa-file-magnifying-glass:before,.fa-file-search:before{content:"\f865"}.fa-file-medical:before{content:"\f477"}.fa-file-minus:before{content:"\f318"}.fa-file-music:before{content:"\f8b6"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-file-plus:before{content:"\f319"}.fa-file-plus-minus:before{content:"\e177"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-shield:before{content:"\e4f0"}.fa-file-signature:before{content:"\f573"}.fa-file-slash:before{content:"\e3a7"}.fa-file-spreadsheet:before{content:"\f65b"}.fa-file-user:before{content:"\f65c"}.fa-file-video:before{content:"\f1c8"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-file-word:before{content:"\f1c2"}.fa-file-times:before,.fa-file-xmark:before{content:"\f317"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-files:before{content:"\e178"}.fa-files-medical:before{content:"\f7fd"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-film-canister:before,.fa-film-cannister:before{content:"\f8b7"}.fa-film-alt:before,.fa-film-simple:before{content:"\f3a0"}.fa-film-slash:before{content:"\e179"}.fa-films:before{content:"\e17a"}.fa-filter:before{content:"\f0b0"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-filter-list:before{content:"\e17c"}.fa-filter-slash:before{content:"\e17d"}.fa-filters:before{content:"\e17e"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-burner:before{content:"\e4f1"}.fa-fire-extinguisher:before{content:"\f134"}.fa-fire-flame:before,.fa-flame:before{content:"\f6df"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-fire-hydrant:before{content:"\e17f"}.fa-fire-smoke:before{content:"\f74b"}.fa-fireplace:before{content:"\f79a"}.fa-fish:before{content:"\f578"}.fa-fish-bones:before{content:"\e304"}.fa-fish-cooked:before{content:"\f7fe"}.fa-fish-fins:before{content:"\e4f2"}.fa-fishing-rod:before{content:"\e3a8"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-pennant:before,.fa-pennant:before{content:"\f456"}.fa-flag-alt:before,.fa-flag-swallowtail:before{content:"\f74c"}.fa-flag-usa:before{content:"\f74d"}.fa-flashlight:before{content:"\f8b8"}.fa-flask:before{content:"\f0c3"}.fa-flask-poison:before,.fa-flask-round-poison:before{content:"\f6e0"}.fa-flask-potion:before,.fa-flask-round-potion:before{content:"\f6e1"}.fa-flask-vial:before{content:"\e4f3"}.fa-flatbread:before{content:"\e40b"}.fa-flatbread-stuffed:before{content:"\e40c"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-floppy-disk-circle-arrow-right:before,.fa-save-circle-arrow-right:before{content:"\e180"}.fa-floppy-disk-circle-xmark:before,.fa-floppy-disk-times:before,.fa-save-circle-xmark:before,.fa-save-times:before{content:"\e181"}.fa-floppy-disk-pen:before{content:"\e182"}.fa-floppy-disks:before{content:"\e183"}.fa-florin-sign:before{content:"\e184"}.fa-flower:before{content:"\f7ff"}.fa-flower-daffodil:before{content:"\f800"}.fa-flower-tulip:before{content:"\f801"}.fa-flute:before{content:"\f8b9"}.fa-flux-capacitor:before{content:"\f8ba"}.fa-flying-disc:before{content:"\e3a9"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-folder-arrow-down:before,.fa-folder-download:before{content:"\e053"}.fa-folder-arrow-up:before,.fa-folder-upload:before{content:"\e054"}.fa-folder-bookmark:before{content:"\e186"}.fa-folder-closed:before{content:"\e185"}.fa-folder-cog:before,.fa-folder-gear:before{content:"\e187"}.fa-folder-grid:before{content:"\e188"}.fa-folder-heart:before{content:"\e189"}.fa-folder-image:before{content:"\e18a"}.fa-folder-magnifying-glass:before,.fa-folder-search:before{content:"\e18b"}.fa-folder-medical:before{content:"\e18c"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-music:before{content:"\e18d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-folder-tree:before{content:"\f802"}.fa-folder-user:before{content:"\e18e"}.fa-folder-times:before,.fa-folder-xmark:before{content:"\f65f"}.fa-folders:before{content:"\f660"}.fa-fondue-pot:before{content:"\e40d"}.fa-font:before{content:"\f031"}.fa-font-case:before{content:"\f866"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-football-helmet:before{content:"\f44f"}.fa-fork:before,.fa-utensil-fork:before{content:"\f2e3"}.fa-fork-knife:before,.fa-utensils-alt:before{content:"\f2e6"}.fa-forklift:before{content:"\f47a"}.fa-fort:before{content:"\e486"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-frame:before{content:"\e495"}.fa-franc-sign:before{content:"\e18f"}.fa-french-fries:before{content:"\f803"}.fa-frog:before{content:"\f52e"}.fa-function:before{content:"\f661"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-g:before{content:"\47"}.fa-galaxy:before{content:"\e008"}.fa-gallery-thumbnails:before{content:"\e3aa"}.fa-game-board:before{content:"\f867"}.fa-game-board-alt:before,.fa-game-board-simple:before{content:"\f868"}.fa-game-console-handheld:before{content:"\f8bb"}.fa-gamepad:before{content:"\f11b"}.fa-gamepad-alt:before,.fa-gamepad-modern:before{content:"\e5a2"}.fa-garage:before{content:"\e009"}.fa-garage-car:before{content:"\e00a"}.fa-garage-open:before{content:"\e00b"}.fa-garlic:before{content:"\e40e"}.fa-gas-pump:before{content:"\f52f"}.fa-gas-pump-slash:before{content:"\f5f4"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-gauge-circle-bolt:before{content:"\e496"}.fa-gauge-circle-minus:before{content:"\e497"}.fa-gauge-circle-plus:before{content:"\e498"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-gauge-low:before,.fa-tachometer-alt-slow:before{content:"\f627"}.fa-gauge-max:before,.fa-tachometer-alt-fastest:before{content:"\f626"}.fa-gauge-min:before,.fa-tachometer-alt-slowest:before{content:"\f628"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-gauge-simple-low:before,.fa-tachometer-slow:before{content:"\f62c"}.fa-gauge-simple-max:before,.fa-tachometer-fastest:before{content:"\f62b"}.fa-gauge-simple-min:before,.fa-tachometer-slowest:before{content:"\f62d"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-ghost:before{content:"\f6e2"}.fa-gif:before{content:"\e190"}.fa-gift:before{content:"\f06b"}.fa-gift-card:before{content:"\f663"}.fa-gifts:before{content:"\f79c"}.fa-gingerbread-man:before{content:"\f79d"}.fa-glass:before{content:"\f804"}.fa-glass-citrus:before{content:"\f869"}.fa-glass-empty:before{content:"\e191"}.fa-glass-half-empty:before,.fa-glass-half-full:before,.fa-glass-half:before{content:"\e192"}.fa-glass-water:before{content:"\e4f4"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-glasses:before{content:"\f530"}.fa-glasses-alt:before,.fa-glasses-round:before{content:"\f5f5"}.fa-globe:before{content:"\f0ac"}.fa-globe-snow:before{content:"\f7a3"}.fa-globe-stand:before{content:"\f5f6"}.fa-goal-net:before{content:"\e3ab"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-golf-club:before{content:"\f451"}.fa-golf-flag-hole:before{content:"\e3ac"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-gramophone:before{content:"\f8bd"}.fa-grapes:before{content:"\e306"}.fa-grate:before{content:"\e193"}.fa-grate-droplet:before{content:"\e194"}.fa-greater-than:before{content:"\3e"}.fa-greater-than-equal:before{content:"\f532"}.fa-grid-3:before,.fa-grid:before{content:"\e195"}.fa-grid-2:before{content:"\e196"}.fa-grid-2-plus:before{content:"\e197"}.fa-grid-4:before{content:"\e198"}.fa-grid-5:before{content:"\e199"}.fa-grid-dividers:before{content:"\e3ad"}.fa-grid-horizontal:before{content:"\e307"}.fa-grill:before{content:"\e5a3"}.fa-grill-fire:before{content:"\e5a4"}.fa-grill-hot:before{content:"\e5a5"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-grip-dots:before{content:"\e410"}.fa-grip-dots-vertical:before{content:"\e411"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-guarani-sign:before{content:"\e19a"}.fa-guitar:before{content:"\f7a6"}.fa-guitar-electric:before{content:"\f8be"}.fa-guitars:before{content:"\f8bf"}.fa-gun:before{content:"\e19b"}.fa-gun-slash:before{content:"\e19c"}.fa-gun-squirt:before{content:"\e19d"}.fa-h:before{content:"\48"}.fa-h1:before{content:"\f313"}.fa-h2:before{content:"\f314"}.fa-h3:before{content:"\f315"}.fa-h4:before{content:"\f86a"}.fa-h5:before{content:"\e412"}.fa-h6:before{content:"\e413"}.fa-hammer:before{content:"\f6e3"}.fa-hammer-crash:before{content:"\e414"}.fa-hammer-war:before{content:"\f6e4"}.fa-hamsa:before{content:"\f665"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-hand-back-point-down:before{content:"\e19e"}.fa-hand-back-point-left:before{content:"\e19f"}.fa-hand-back-point-ribbon:before{content:"\e1a0"}.fa-hand-back-point-right:before{content:"\e1a1"}.fa-hand-back-point-up:before{content:"\e1a2"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-hand-fingers-crossed:before{content:"\e1a3"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-hand-heart:before{content:"\f4bc"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-box:before{content:"\f47b"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-magic:before{content:"\f6e5"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-seedling:before{content:"\f4bf"}.fa-hand-holding-skull:before{content:"\e1a4"}.fa-hand-horns:before{content:"\e1a9"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-love:before{content:"\e1a5"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-ribbon:before{content:"\e1a6"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hand-wave:before{content:"\e1a7"}.fa-handcuffs:before{content:"\e4f8"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-hands-bound:before{content:"\e4f9"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-hands-clapping:before{content:"\e1a8"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-hand-receiving:before,.fa-hands-holding-diamond:before{content:"\f47c"}.fa-hands-holding-dollar:before,.fa-hands-usd:before{content:"\f4c5"}.fa-hands-heart:before,.fa-hands-holding-heart:before{content:"\f4c3"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-handshake:before{content:"\f2b5"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-hashtag:before{content:"\23"}.fa-hashtag-lock:before{content:"\e415"}.fa-hat-chef:before{content:"\f86b"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-santa:before{content:"\f7a7"}.fa-hat-winter:before{content:"\f7a8"}.fa-hat-witch:before{content:"\f6e7"}.fa-hat-wizard:before{content:"\f6e8"}.fa-head-side:before{content:"\f6e9"}.fa-head-side-brain:before{content:"\f808"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-goggles:before,.fa-head-vr:before{content:"\f6ea"}.fa-head-side-headphones:before{content:"\f8c2"}.fa-head-side-heart:before{content:"\e1aa"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-medical:before{content:"\f809"}.fa-head-side-virus:before{content:"\e064"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-heart-circle-plus:before{content:"\e500"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-heart-half:before{content:"\e1ab"}.fa-heart-half-alt:before,.fa-heart-half-stroke:before{content:"\e1ac"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-heat:before{content:"\e00c"}.fa-helicopter:before{content:"\f533"}.fa-helicopter-symbol:before{content:"\e502"}.fa-helmet-battle:before{content:"\f6eb"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-helmet-un:before{content:"\e503"}.fa-hexagon:before{content:"\f312"}.fa-hexagon-check:before{content:"\e416"}.fa-hexagon-divide:before{content:"\e1ad"}.fa-hexagon-exclamation:before{content:"\e417"}.fa-hexagon-image:before{content:"\e504"}.fa-hexagon-minus:before,.fa-minus-hexagon:before{content:"\f307"}.fa-hexagon-plus:before,.fa-plus-hexagon:before{content:"\f300"}.fa-hexagon-vertical-nft:before{content:"\e505"}.fa-hexagon-vertical-nft-slanted:before{content:"\e506"}.fa-hexagon-xmark:before,.fa-times-hexagon:before,.fa-xmark-hexagon:before{content:"\f2ee"}.fa-high-definition:before,.fa-rectangle-hd:before{content:"\e1ae"}.fa-highlighter:before{content:"\f591"}.fa-highlighter-line:before{content:"\e1af"}.fa-hill-avalanche:before{content:"\e507"}.fa-hill-rockslide:before{content:"\e508"}.fa-hippo:before{content:"\f6ed"}.fa-hockey-mask:before{content:"\f6ee"}.fa-hockey-puck:before{content:"\f453"}.fa-hockey-stick-puck:before{content:"\e3ae"}.fa-hockey-sticks:before{content:"\f454"}.fa-holly-berry:before{content:"\f7aa"}.fa-honey-pot:before{content:"\e418"}.fa-hood-cloak:before{content:"\f6ef"}.fa-horizontal-rule:before{content:"\f86c"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-horse-saddle:before{content:"\f8c3"}.fa-hose:before{content:"\e419"}.fa-hose-reel:before{content:"\e41a"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-hospital-user:before{content:"\f80d"}.fa-hospitals:before{content:"\f80e"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-hourglass-clock:before{content:"\e41b"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-home-blank:before,.fa-house-blank:before{content:"\e487"}.fa-house-building:before{content:"\e1b1"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-house-chimney-blank:before{content:"\e3b0"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-house-chimney-heart:before{content:"\e1b2"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-house-chimney-user:before{content:"\e065"}.fa-house-chimney-window:before{content:"\e00d"}.fa-house-circle-check:before{content:"\e509"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-house-crack:before{content:"\e3b1"}.fa-house-day:before{content:"\e00e"}.fa-house-fire:before{content:"\e50c"}.fa-house-flag:before{content:"\e50d"}.fa-house-flood-water:before{content:"\e50e"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-home-heart:before,.fa-house-heart:before{content:"\f4c9"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-house-lock:before{content:"\e510"}.fa-house-medical:before{content:"\e3b2"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-house-medical-flag:before{content:"\e514"}.fa-house-night:before{content:"\e010"}.fa-house-leave:before,.fa-house-person-depart:before,.fa-house-person-leave:before{content:"\e00f"}.fa-house-person-arrive:before,.fa-house-person-return:before,.fa-house-return:before{content:"\e011"}.fa-house-signal:before{content:"\e012"}.fa-house-tree:before{content:"\e1b3"}.fa-house-tsunami:before{content:"\e515"}.fa-house-turret:before{content:"\e1b4"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-house-flood:before,.fa-house-water:before{content:"\f74f"}.fa-house-window:before{content:"\e3b3"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-100:before,.fa-hundred-points:before{content:"\e41c"}.fa-hurricane:before{content:"\f751"}.fa-hyphen:before{content:"\2d"}.fa-i:before{content:"\49"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-ice-skate:before{content:"\f7ac"}.fa-icicles:before{content:"\f7ad"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-image-landscape:before,.fa-landscape:before{content:"\e1b5"}.fa-image-polaroid:before{content:"\f8c4"}.fa-image-polaroid-user:before{content:"\e1b6"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-image-slash:before{content:"\e1b7"}.fa-image-user:before{content:"\e1b8"}.fa-images:before{content:"\f302"}.fa-images-user:before{content:"\e1b9"}.fa-inbox:before{content:"\f01c"}.fa-inbox-full:before{content:"\e1ba"}.fa-inbox-arrow-down:before,.fa-inbox-in:before{content:"\f310"}.fa-inbox-arrow-up:before,.fa-inbox-out:before{content:"\f311"}.fa-inboxes:before{content:"\e1bb"}.fa-indent:before{content:"\f03c"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-industry:before{content:"\f275"}.fa-industry-alt:before,.fa-industry-windows:before{content:"\f3b3"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-inhaler:before{content:"\f5f9"}.fa-input-numeric:before{content:"\e1bd"}.fa-input-pipe:before{content:"\e1be"}.fa-input-text:before{content:"\e1bf"}.fa-integral:before{content:"\f667"}.fa-intersection:before{content:"\f668"}.fa-island-tree-palm:before,.fa-island-tropical:before{content:"\f811"}.fa-italic:before{content:"\f033"}.fa-j:before{content:"\4a"}.fa-jack-o-lantern:before{content:"\f30e"}.fa-jar:before{content:"\e516"}.fa-jar-wheat:before{content:"\e517"}.fa-jedi:before{content:"\f669"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-jet-fighter-up:before{content:"\e518"}.fa-joint:before{content:"\f595"}.fa-joystick:before{content:"\f8c5"}.fa-jug:before{content:"\f8c6"}.fa-jug-detergent:before{content:"\e519"}.fa-k:before{content:"\4b"}.fa-kaaba:before{content:"\f66b"}.fa-kazoo:before{content:"\f8c7"}.fa-kerning:before{content:"\f86f"}.fa-key:before{content:"\f084"}.fa-key-skeleton:before{content:"\f6f3"}.fa-key-skeleton-left-right:before{content:"\e3b4"}.fa-keyboard:before{content:"\f11c"}.fa-keyboard-brightness:before{content:"\e1c0"}.fa-keyboard-brightness-low:before{content:"\e1c1"}.fa-keyboard-down:before{content:"\e1c2"}.fa-keyboard-left:before{content:"\e1c3"}.fa-keynote:before{content:"\f66c"}.fa-khanda:before{content:"\f66d"}.fa-kidneys:before{content:"\f5fb"}.fa-kip-sign:before{content:"\e1c4"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-kitchen-set:before{content:"\e51a"}.fa-kite:before{content:"\f6f4"}.fa-kiwi-bird:before{content:"\f535"}.fa-kiwi-fruit:before{content:"\e30c"}.fa-knife:before,.fa-utensil-knife:before{content:"\f2e4"}.fa-knife-kitchen:before{content:"\f6f5"}.fa-l:before{content:"\4c"}.fa-lacrosse-stick:before{content:"\e3b5"}.fa-lacrosse-stick-ball:before{content:"\e3b6"}.fa-lambda:before{content:"\f66e"}.fa-lamp:before{content:"\f4ca"}.fa-lamp-desk:before{content:"\e014"}.fa-lamp-floor:before{content:"\e015"}.fa-lamp-street:before{content:"\e1c5"}.fa-land-mine-on:before{content:"\e51b"}.fa-landmark:before{content:"\f66f"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-landmark-flag:before{content:"\e51c"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-arrow-down:before{content:"\e1c6"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-file:before{content:"\e51d"}.fa-laptop-medical:before{content:"\f812"}.fa-laptop-mobile:before,.fa-phone-laptop:before{content:"\f87a"}.fa-laptop-slash:before{content:"\e1c7"}.fa-lari-sign:before{content:"\e1c8"}.fa-lasso:before{content:"\f8c8"}.fa-lasso-sparkles:before{content:"\e1c9"}.fa-layer-group:before{content:"\f5fd"}.fa-layer-group-minus:before,.fa-layer-minus:before{content:"\f5fe"}.fa-layer-group-plus:before,.fa-layer-plus:before{content:"\f5ff"}.fa-leaf:before{content:"\f06c"}.fa-leaf-heart:before{content:"\f4cb"}.fa-leaf-maple:before{content:"\f6f6"}.fa-leaf-oak:before{content:"\f6f7"}.fa-leafy-green:before{content:"\e41d"}.fa-arrow-alt-left:before,.fa-left:before{content:"\f355"}.fa-arrow-alt-from-right:before,.fa-left-from-line:before{content:"\f348"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-left-long-to-line:before{content:"\e41e"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-arrow-alt-to-left:before,.fa-left-to-line:before{content:"\f34b"}.fa-lemon:before{content:"\f094"}.fa-less-than:before{content:"\3c"}.fa-less-than-equal:before{content:"\f537"}.fa-life-ring:before{content:"\f1cd"}.fa-light-ceiling:before{content:"\e016"}.fa-light-emergency:before{content:"\e41f"}.fa-light-emergency-on:before{content:"\e420"}.fa-light-switch:before{content:"\e017"}.fa-light-switch-off:before{content:"\e018"}.fa-light-switch-on:before{content:"\e019"}.fa-lightbulb:before{content:"\f0eb"}.fa-lightbulb-cfl:before{content:"\e5a6"}.fa-lightbulb-cfl-on:before{content:"\e5a7"}.fa-lightbulb-dollar:before{content:"\f670"}.fa-lightbulb-exclamation:before{content:"\f671"}.fa-lightbulb-exclamation-on:before{content:"\e1ca"}.fa-lightbulb-on:before{content:"\f672"}.fa-lightbulb-slash:before{content:"\f673"}.fa-lights-holiday:before{content:"\f7b2"}.fa-line-columns:before{content:"\f870"}.fa-line-height:before{content:"\f871"}.fa-lines-leaning:before{content:"\e51e"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-chain-horizontal:before,.fa-link-horizontal:before{content:"\e1cb"}.fa-chain-horizontal-slash:before,.fa-link-horizontal-slash:before{content:"\e1cc"}.fa-link-simple:before{content:"\e1cd"}.fa-link-simple-slash:before{content:"\e1ce"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-lips:before{content:"\f600"}.fa-lira-sign:before{content:"\f195"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-list-dropdown:before{content:"\e1cf"}.fa-list-music:before{content:"\f8c9"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-list-radio:before{content:"\e1d0"}.fa-list-timeline:before{content:"\e1d1"}.fa-list-tree:before{content:"\e1d2"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-loader:before{content:"\e1d4"}.fa-lobster:before{content:"\e421"}.fa-location-arrow:before{content:"\f124"}.fa-location-check:before,.fa-map-marker-check:before{content:"\f606"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-location-crosshairs-slash:before,.fa-location-slash:before{content:"\f603"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-location-dot-slash:before,.fa-map-marker-alt-slash:before{content:"\f605"}.fa-location-exclamation:before,.fa-map-marker-exclamation:before{content:"\f608"}.fa-location-minus:before,.fa-map-marker-minus:before{content:"\f609"}.fa-location-pen:before,.fa-map-marker-edit:before{content:"\f607"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-location-pin-lock:before{content:"\e51f"}.fa-location-pin-slash:before,.fa-map-marker-slash:before{content:"\f60c"}.fa-location-plus:before,.fa-map-marker-plus:before{content:"\f60a"}.fa-location-question:before,.fa-map-marker-question:before{content:"\f60b"}.fa-location-smile:before,.fa-map-marker-smile:before{content:"\f60d"}.fa-location-xmark:before,.fa-map-marker-times:before,.fa-map-marker-xmark:before{content:"\f60e"}.fa-lock:before{content:"\f023"}.fa-lock-a:before{content:"\e422"}.fa-lock-hashtag:before{content:"\e423"}.fa-lock-alt:before,.fa-lock-keyhole:before{content:"\f30d"}.fa-lock-keyhole-open:before,.fa-lock-open-alt:before{content:"\f3c2"}.fa-lock-open:before{content:"\f3c1"}.fa-locust:before{content:"\e520"}.fa-lollipop:before,.fa-lollypop:before{content:"\e424"}.fa-couch-small:before,.fa-loveseat:before{content:"\f4cc"}.fa-luchador-mask:before,.fa-luchador:before,.fa-mask-luchador:before{content:"\f455"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-m:before{content:"\4d"}.fa-mace:before{content:"\f6f8"}.fa-magnet:before{content:"\f076"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-mailbox:before{content:"\f813"}.fa-manat-sign:before{content:"\e1d5"}.fa-mandolin:before{content:"\f6f9"}.fa-mango:before{content:"\e30f"}.fa-manhole:before{content:"\e1d6"}.fa-map:before{content:"\f279"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-pin:before{content:"\f276"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-and-venus:before{content:"\f224"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-mask:before{content:"\f6fa"}.fa-mask-face:before{content:"\e1d7"}.fa-mask-snorkel:before{content:"\e3b7"}.fa-mask-ventilator:before{content:"\e524"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-mattress-pillow:before{content:"\e525"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-meat:before{content:"\f814"}.fa-medal:before{content:"\f5a2"}.fa-megaphone:before{content:"\f675"}.fa-melon:before{content:"\e310"}.fa-melon-slice:before{content:"\e311"}.fa-memo:before{content:"\e1d8"}.fa-memo-circle-check:before{content:"\e1d9"}.fa-memo-circle-info:before{content:"\e49a"}.fa-memo-pad:before{content:"\e1da"}.fa-memory:before{content:"\f538"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-merge:before{content:"\e526"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-comment-alt-arrow-down:before,.fa-message-arrow-down:before{content:"\e1db"}.fa-comment-alt-arrow-up:before,.fa-message-arrow-up:before{content:"\e1dc"}.fa-message-arrow-up-right:before{content:"\e1dd"}.fa-message-bot:before{content:"\e3b8"}.fa-comment-alt-captions:before,.fa-message-captions:before{content:"\e1de"}.fa-comment-alt-check:before,.fa-message-check:before{content:"\f4a2"}.fa-message-code:before{content:"\e1df"}.fa-comment-alt-dollar:before,.fa-message-dollar:before{content:"\f650"}.fa-comment-alt-dots:before,.fa-message-dots:before,.fa-messaging:before{content:"\f4a3"}.fa-comment-alt-exclamation:before,.fa-message-exclamation:before{content:"\f4a5"}.fa-comment-alt-image:before,.fa-message-image:before{content:"\e1e0"}.fa-comment-alt-lines:before,.fa-message-lines:before{content:"\f4a6"}.fa-comment-alt-medical:before,.fa-message-medical:before{content:"\f7f4"}.fa-comment-middle-alt:before,.fa-message-middle:before{content:"\e1e1"}.fa-comment-middle-top-alt:before,.fa-message-middle-top:before{content:"\e1e2"}.fa-comment-alt-minus:before,.fa-message-minus:before{content:"\f4a7"}.fa-comment-alt-music:before,.fa-message-music:before{content:"\f8af"}.fa-comment-alt-edit:before,.fa-message-edit:before,.fa-message-pen:before{content:"\f4a4"}.fa-comment-alt-plus:before,.fa-message-plus:before{content:"\f4a8"}.fa-message-question:before{content:"\e1e3"}.fa-comment-alt-quote:before,.fa-message-quote:before{content:"\e1e4"}.fa-comment-alt-slash:before,.fa-message-slash:before{content:"\f4a9"}.fa-comment-alt-smile:before,.fa-message-smile:before{content:"\f4aa"}.fa-message-sms:before{content:"\e1e5"}.fa-comment-alt-text:before,.fa-message-text:before{content:"\e1e6"}.fa-comment-alt-times:before,.fa-message-times:before,.fa-message-xmark:before{content:"\f4ab"}.fa-comments-alt:before,.fa-messages:before{content:"\f4b6"}.fa-comments-alt-dollar:before,.fa-messages-dollar:before{content:"\f652"}.fa-messages-question:before{content:"\e1e7"}.fa-meteor:before{content:"\f753"}.fa-meter:before{content:"\e1e8"}.fa-meter-bolt:before{content:"\e1e9"}.fa-meter-droplet:before{content:"\e1ea"}.fa-meter-fire:before{content:"\e1eb"}.fa-microchip:before{content:"\f2db"}.fa-microchip-ai:before{content:"\e1ec"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microphone-stand:before{content:"\f8cb"}.fa-microscope:before{content:"\f610"}.fa-microwave:before{content:"\e01b"}.fa-mill-sign:before{content:"\e1ed"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-mistletoe:before{content:"\f7b4"}.fa-mitten:before{content:"\f7b5"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-mobile-button:before{content:"\f10b"}.fa-mobile-iphone:before,.fa-mobile-notch:before{content:"\e1ee"}.fa-mobile-retro:before{content:"\e527"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-mobile-signal:before{content:"\e1ef"}.fa-mobile-signal-out:before{content:"\e1f0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-bill-simple:before{content:"\e1f1"}.fa-money-bill-simple-wave:before{content:"\e1f2"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-money-bills:before{content:"\e1f3"}.fa-money-bills-alt:before,.fa-money-bills-simple:before{content:"\e1f4"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-money-check-dollar-pen:before,.fa-money-check-edit-alt:before{content:"\f873"}.fa-money-check-edit:before,.fa-money-check-pen:before{content:"\f872"}.fa-money-from-bracket:before{content:"\e312"}.fa-money-simple-from-bracket:before{content:"\e313"}.fa-monitor-heart-rate:before,.fa-monitor-waveform:before{content:"\f611"}.fa-monkey:before{content:"\f6fb"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-moon-cloud:before{content:"\f754"}.fa-eclipse-alt:before,.fa-moon-over-sun:before{content:"\f74a"}.fa-moon-stars:before{content:"\f755"}.fa-moped:before{content:"\e3b9"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-mosquito-net:before{content:"\e52c"}.fa-motorcycle:before{content:"\f21c"}.fa-mound:before{content:"\e52d"}.fa-mountain:before{content:"\f6fc"}.fa-mountain-city:before{content:"\e52e"}.fa-mountain-sun:before{content:"\e52f"}.fa-mountains:before{content:"\f6fd"}.fa-mouse-field:before{content:"\e5a8"}.fa-mp3-player:before{content:"\f8ce"}.fa-mug:before{content:"\f874"}.fa-mug-hot:before{content:"\f7b6"}.fa-mug-marshmallows:before{content:"\f7b7"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-mug-tea:before{content:"\f875"}.fa-mug-tea-saucer:before{content:"\e1f5"}.fa-mushroom:before{content:"\e425"}.fa-music:before{content:"\f001"}.fa-music-alt:before,.fa-music-note:before{content:"\f8cf"}.fa-music-alt-slash:before,.fa-music-note-slash:before{content:"\f8d0"}.fa-music-slash:before{content:"\f8d1"}.fa-n:before{content:"\4e"}.fa-naira-sign:before{content:"\e1f6"}.fa-narwhal:before{content:"\f6fe"}.fa-nesting-dolls:before{content:"\e3ba"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nfc:before{content:"\e1f7"}.fa-nfc-lock:before{content:"\e1f8"}.fa-nfc-magnifying-glass:before{content:"\e1f9"}.fa-nfc-pen:before{content:"\e1fa"}.fa-nfc-signal:before{content:"\e1fb"}.fa-nfc-slash:before{content:"\e1fc"}.fa-nfc-trash:before{content:"\e1fd"}.fa-not-equal:before{content:"\f53e"}.fa-notdef:before{content:"\e1fe"}.fa-note:before{content:"\e1ff"}.fa-note-medical:before{content:"\e200"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-notebook:before{content:"\e201"}.fa-notes:before{content:"\e202"}.fa-notes-medical:before{content:"\f481"}.fa-o:before{content:"\4f"}.fa-object-exclude:before{content:"\e49c"}.fa-object-group:before{content:"\f247"}.fa-object-intersect:before{content:"\e49d"}.fa-object-subtract:before{content:"\e49e"}.fa-object-ungroup:before{content:"\f248"}.fa-object-union:before{content:"\e49f"}.fa-objects-align-bottom:before{content:"\e3bb"}.fa-objects-align-center-horizontal:before{content:"\e3bc"}.fa-objects-align-center-vertical:before{content:"\e3bd"}.fa-objects-align-left:before{content:"\e3be"}.fa-objects-align-right:before{content:"\e3bf"}.fa-objects-align-top:before{content:"\e3c0"}.fa-objects-column:before{content:"\e3c1"}.fa-octagon:before{content:"\f306"}.fa-octagon-check:before{content:"\e426"}.fa-octagon-divide:before{content:"\e203"}.fa-octagon-exclamation:before{content:"\e204"}.fa-minus-octagon:before,.fa-octagon-minus:before{content:"\f308"}.fa-octagon-plus:before,.fa-plus-octagon:before{content:"\f301"}.fa-octagon-xmark:before,.fa-times-octagon:before,.fa-xmark-octagon:before{content:"\f2f0"}.fa-oil-can:before{content:"\f613"}.fa-oil-can-drip:before{content:"\e205"}.fa-oil-temp:before,.fa-oil-temperature:before{content:"\f614"}.fa-oil-well:before{content:"\e532"}.fa-olive:before{content:"\e316"}.fa-olive-branch:before{content:"\e317"}.fa-om:before{content:"\f679"}.fa-omega:before{content:"\f67a"}.fa-onion:before{content:"\e427"}.fa-option:before{content:"\e318"}.fa-ornament:before{content:"\f7b8"}.fa-otter:before{content:"\f700"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-outlet:before{content:"\e01c"}.fa-oven:before{content:"\e01d"}.fa-overline:before{content:"\f876"}.fa-p:before{content:"\50"}.fa-page:before{content:"\e428"}.fa-file-caret-down:before,.fa-page-caret-down:before{content:"\e429"}.fa-file-caret-up:before,.fa-page-caret-up:before{content:"\e42a"}.fa-pager:before{content:"\f815"}.fa-paint-roller:before{content:"\f5aa"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-paint-brush-alt:before,.fa-paint-brush-fine:before,.fa-paintbrush-alt:before,.fa-paintbrush-fine:before{content:"\f5a9"}.fa-paintbrush-pencil:before{content:"\e206"}.fa-palette:before{content:"\f53f"}.fa-pallet:before{content:"\f482"}.fa-pallet-box:before{content:"\e208"}.fa-palette-boxes:before,.fa-pallet-alt:before,.fa-pallet-boxes:before{content:"\f483"}.fa-pan-food:before{content:"\e42b"}.fa-pan-frying:before{content:"\e42c"}.fa-pancakes:before{content:"\e42d"}.fa-panel-ews:before{content:"\e42e"}.fa-panel-fire:before{content:"\e42f"}.fa-panorama:before{content:"\e209"}.fa-paper-plane:before{content:"\f1d8"}.fa-paper-plane-alt:before,.fa-paper-plane-top:before,.fa-send:before{content:"\e20a"}.fa-paperclip:before{content:"\f0c6"}.fa-paperclip-vertical:before{content:"\e3c2"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-paragraph-left:before,.fa-paragraph-rtl:before{content:"\f878"}.fa-party-bell:before{content:"\e31a"}.fa-party-horn:before{content:"\e31b"}.fa-passport:before{content:"\f5ab"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-pause:before{content:"\f04c"}.fa-paw:before{content:"\f1b0"}.fa-paw-claws:before{content:"\f702"}.fa-paw-alt:before,.fa-paw-simple:before{content:"\f701"}.fa-peace:before{content:"\f67c"}.fa-peach:before{content:"\e20b"}.fa-peanut:before{content:"\e430"}.fa-peanuts:before{content:"\e431"}.fa-peapod:before{content:"\e31c"}.fa-pear:before{content:"\e20c"}.fa-pedestal:before{content:"\e20d"}.fa-pegasus:before{content:"\f703"}.fa-pen:before{content:"\f304"}.fa-pen-circle:before{content:"\e20e"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-pen-alt-slash:before,.fa-pen-clip-slash:before{content:"\e20f"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-fancy-slash:before{content:"\e210"}.fa-pen-field:before{content:"\e211"}.fa-pen-line:before{content:"\e212"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-nib-slash:before{content:"\e4a1"}.fa-pen-paintbrush:before,.fa-pencil-paintbrush:before{content:"\f618"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-pen-slash:before{content:"\e213"}.fa-pen-swirl:before{content:"\e214"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-pencil-slash:before{content:"\e215"}.fa-people:before{content:"\e216"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-people-dress:before{content:"\e217"}.fa-people-dress-simple:before{content:"\e218"}.fa-people-group:before{content:"\e533"}.fa-people-line:before{content:"\e534"}.fa-people-pants:before{content:"\e219"}.fa-people-pants-simple:before{content:"\e21a"}.fa-people-pulling:before{content:"\e535"}.fa-people-robbery:before{content:"\e536"}.fa-people-roof:before{content:"\e537"}.fa-people-simple:before{content:"\e21b"}.fa-pepper:before{content:"\e432"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-period:before{content:"\2e"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-biking-mountain:before,.fa-person-biking-mountain:before{content:"\f84b"}.fa-person-booth:before{content:"\f756"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-person-burst:before{content:"\e53b"}.fa-person-cane:before{content:"\e53c"}.fa-person-carry-box:before,.fa-person-carry:before{content:"\f4cf"}.fa-person-chalkboard:before{content:"\e53d"}.fa-person-circle-check:before{content:"\e53e"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-person-circle-minus:before{content:"\e540"}.fa-person-circle-plus:before{content:"\e541"}.fa-person-circle-question:before{content:"\e542"}.fa-person-circle-xmark:before{content:"\e543"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-person-dolly:before{content:"\f4d0"}.fa-person-dolly-empty:before{content:"\f4d1"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-person-dress-burst:before{content:"\e544"}.fa-person-dress-simple:before{content:"\e21c"}.fa-person-drowning:before{content:"\e545"}.fa-person-falling:before{content:"\e546"}.fa-person-falling-burst:before{content:"\e547"}.fa-person-from-portal:before,.fa-portal-exit:before{content:"\e023"}.fa-person-half-dress:before{content:"\e548"}.fa-person-harassing:before{content:"\e549"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-person-military-pointing:before{content:"\e54a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-person-military-to-person:before{content:"\e54c"}.fa-person-pinball:before{content:"\e21d"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-person-pregnant:before{content:"\e31e"}.fa-person-rays:before{content:"\e54d"}.fa-person-rifle:before{content:"\e54e"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-person-seat:before{content:"\e21e"}.fa-person-seat-reclined:before{content:"\e21f"}.fa-person-shelter:before{content:"\e54f"}.fa-person-sign:before{content:"\f757"}.fa-person-simple:before{content:"\e220"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-person-ski-jumping:before,.fa-ski-jump:before{content:"\f7c7"}.fa-person-ski-lift:before,.fa-ski-lift:before{content:"\f7c8"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-person-sledding:before,.fa-sledding:before{content:"\f7cb"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-person-snowmobiling:before,.fa-snowmobile:before{content:"\f7d1"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-person-through-window:before{content:"\e5a9"}.fa-person-to-door:before{content:"\e433"}.fa-person-to-portal:before,.fa-portal-enter:before{content:"\e022"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-person-walking-luggage:before{content:"\e554"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-peseta-sign:before{content:"\e221"}.fa-peso-sign:before{content:"\e222"}.fa-phone:before{content:"\f095"}.fa-phone-arrow-down-left:before,.fa-phone-arrow-down:before,.fa-phone-incoming:before{content:"\e223"}.fa-phone-arrow-up-right:before,.fa-phone-arrow-up:before,.fa-phone-outgoing:before{content:"\e224"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-phone-hangup:before{content:"\e225"}.fa-phone-intercom:before{content:"\e434"}.fa-phone-missed:before{content:"\e226"}.fa-phone-office:before{content:"\f67d"}.fa-phone-plus:before{content:"\f4d2"}.fa-phone-rotary:before{content:"\f8d3"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-phone-xmark:before{content:"\e227"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-photo-film-music:before{content:"\e228"}.fa-pi:before{content:"\f67e"}.fa-piano:before{content:"\f8d4"}.fa-piano-keyboard:before{content:"\f8d5"}.fa-pickleball:before{content:"\e435"}.fa-pie:before{content:"\f705"}.fa-pig:before{content:"\f706"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinata:before{content:"\e3c3"}.fa-pinball:before{content:"\e229"}.fa-pineapple:before{content:"\e31f"}.fa-pipe:before{content:"\7c"}.fa-pipe-circle-check:before{content:"\e436"}.fa-pipe-collar:before{content:"\e437"}.fa-pipe-section:before{content:"\e438"}.fa-pipe-smoking:before{content:"\e3c4"}.fa-pipe-valve:before{content:"\e439"}.fa-pizza:before{content:"\f817"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-circle-check:before{content:"\e555"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-alt:before,.fa-plane-engines:before{content:"\f3de"}.fa-plane-lock:before{content:"\e558"}.fa-plane-prop:before{content:"\e22b"}.fa-plane-slash:before{content:"\e069"}.fa-plane-tail:before{content:"\e22c"}.fa-plane-up:before{content:"\e22d"}.fa-plane-up-slash:before{content:"\e22e"}.fa-planet-moon:before{content:"\e01f"}.fa-planet-ringed:before{content:"\e020"}.fa-plant-wilt:before{content:"\e5aa"}.fa-plate-utensils:before{content:"\e43b"}.fa-plate-wheat:before{content:"\e55a"}.fa-play:before{content:"\f04b"}.fa-play-pause:before{content:"\e22f"}.fa-plug:before{content:"\f1e6"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-plug-circle-check:before{content:"\e55c"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-plus-large:before{content:"\e59e"}.fa-plus-minus:before{content:"\e43c"}.fa-podcast:before{content:"\f2ce"}.fa-podium:before{content:"\f680"}.fa-podium-star:before{content:"\f758"}.fa-police-box:before{content:"\e021"}.fa-poll-people:before{content:"\f759"}.fa-pompebled:before{content:"\e43d"}.fa-poo:before{content:"\f2fe"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-pool-8-ball:before{content:"\e3c5"}.fa-poop:before{content:"\f619"}.fa-popcorn:before{content:"\f819"}.fa-popsicle:before{content:"\e43e"}.fa-pot-food:before{content:"\e43f"}.fa-potato:before{content:"\e440"}.fa-power-off:before{content:"\f011"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-presentation-screen:before,.fa-presentation:before{content:"\f685"}.fa-pretzel:before{content:"\e441"}.fa-print:before{content:"\f02f"}.fa-print-magnifying-glass:before,.fa-print-search:before{content:"\f81a"}.fa-print-slash:before{content:"\f686"}.fa-projector:before{content:"\f8d6"}.fa-pump:before{content:"\e442"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pumpkin:before{content:"\f707"}.fa-puzzle:before{content:"\e443"}.fa-puzzle-piece:before{content:"\f12e"}.fa-puzzle-piece-alt:before,.fa-puzzle-piece-simple:before{content:"\e231"}.fa-q:before{content:"\51"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\3f"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-quotes:before{content:"\e234"}.fa-r:before{content:"\52"}.fa-rabbit:before{content:"\f708"}.fa-rabbit-fast:before,.fa-rabbit-running:before{content:"\f709"}.fa-racquet:before{content:"\f45a"}.fa-radar:before{content:"\e024"}.fa-radiation:before{content:"\f7b9"}.fa-radio:before{content:"\f8d7"}.fa-radio-alt:before,.fa-radio-tuner:before{content:"\f8d8"}.fa-rainbow:before{content:"\f75b"}.fa-raindrops:before{content:"\f75c"}.fa-ram:before{content:"\f70a"}.fa-ramp-loading:before{content:"\f4d4"}.fa-ranking-star:before{content:"\e561"}.fa-raygun:before{content:"\e025"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-rectangle-landscape:before,.fa-rectangle:before{content:"\f2fa"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-barcode-alt:before,.fa-rectangle-barcode:before{content:"\f463"}.fa-rectangle-code:before{content:"\e322"}.fa-rectangle-history:before{content:"\e4a2"}.fa-rectangle-history-circle-plus:before{content:"\e4a3"}.fa-rectangle-history-circle-user:before{content:"\e4a4"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-pro:before,.fa-rectangle-pro:before{content:"\e235"}.fa-rectangle-terminal:before{content:"\e236"}.fa-rectangle-portrait:before,.fa-rectangle-vertical:before{content:"\f2fb"}.fa-rectangle-vertical-history:before{content:"\e237"}.fa-rectangle-wide:before{content:"\f2fc"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-rectangles-mixed:before{content:"\e323"}.fa-recycle:before{content:"\f1b8"}.fa-reel:before{content:"\e238"}.fa-refrigerator:before{content:"\e026"}.fa-registered:before{content:"\f25d"}.fa-repeat:before{content:"\f363"}.fa-repeat-1:before{content:"\f365"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-reply-clock:before,.fa-reply-time:before{content:"\e239"}.fa-republican:before{content:"\f75e"}.fa-restroom:before{content:"\f7bd"}.fa-restroom-simple:before{content:"\e23a"}.fa-retweet:before{content:"\f079"}.fa-rhombus:before{content:"\e23b"}.fa-ribbon:before{content:"\f4d6"}.fa-arrow-alt-right:before,.fa-right:before{content:"\f356"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-arrow-alt-from-left:before,.fa-right-from-line:before{content:"\f347"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-right-long-to-line:before{content:"\e444"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-arrow-alt-to-right:before,.fa-right-to-line:before{content:"\f34c"}.fa-ring:before{content:"\f70b"}.fa-ring-diamond:before{content:"\e5ab"}.fa-rings-wedding:before{content:"\f81b"}.fa-road:before{content:"\f018"}.fa-road-barrier:before{content:"\e562"}.fa-road-bridge:before{content:"\e563"}.fa-road-circle-check:before{content:"\e564"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-road-circle-xmark:before{content:"\e566"}.fa-road-lock:before{content:"\e567"}.fa-road-spikes:before{content:"\e568"}.fa-robot:before{content:"\f544"}.fa-robot-astromech:before{content:"\e2d2"}.fa-rocket:before{content:"\f135"}.fa-rocket-launch:before{content:"\e027"}.fa-roller-coaster:before{content:"\e324"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-rotate-exclamation:before{content:"\e23c"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-route:before{content:"\f4d7"}.fa-route-highway:before{content:"\f61a"}.fa-route-interstate:before{content:"\f61b"}.fa-router:before{content:"\f8da"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-rug:before{content:"\e569"}.fa-rugby-ball:before{content:"\e3c6"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-triangle:before{content:"\f61c"}.fa-ruler-vertical:before{content:"\f548"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-rupiah-sign:before{content:"\e23d"}.fa-rv:before{content:"\f7be"}.fa-s:before{content:"\53"}.fa-sack:before{content:"\f81c"}.fa-sack-dollar:before{content:"\f81d"}.fa-sack-xmark:before{content:"\e56a"}.fa-sailboat:before{content:"\e445"}.fa-bowl-salad:before,.fa-salad:before{content:"\f81e"}.fa-salt-shaker:before{content:"\e446"}.fa-sandwich:before{content:"\f81f"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-sausage:before{content:"\f820"}.fa-saxophone:before{content:"\f8dc"}.fa-sax-hot:before,.fa-saxophone-fire:before{content:"\f8db"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-scalpel:before{content:"\f61d"}.fa-scalpel-line-dashed:before,.fa-scalpel-path:before{content:"\f61e"}.fa-scanner-gun:before,.fa-scanner:before{content:"\f488"}.fa-scanner-image:before{content:"\f8f3"}.fa-scanner-keyboard:before{content:"\f489"}.fa-scanner-touchscreen:before{content:"\f48a"}.fa-scarecrow:before{content:"\f70d"}.fa-scarf:before{content:"\f7c1"}.fa-school:before{content:"\f549"}.fa-school-circle-check:before{content:"\e56b"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-school-flag:before{content:"\e56e"}.fa-school-lock:before{content:"\e56f"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-screen-users:before,.fa-users-class:before{content:"\f63d"}.fa-screencast:before{content:"\e23e"}.fa-screwdriver:before{content:"\f54a"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-scribble:before{content:"\e23f"}.fa-scroll:before{content:"\f70e"}.fa-scroll-old:before{content:"\f70f"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-scrubber:before{content:"\f2f8"}.fa-scythe:before{content:"\f710"}.fa-sd-card:before{content:"\f7c2"}.fa-sd-cards:before{content:"\e240"}.fa-seal:before{content:"\e241"}.fa-seal-exclamation:before{content:"\e242"}.fa-seal-question:before{content:"\e243"}.fa-seat-airline:before{content:"\e244"}.fa-section:before{content:"\e447"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-semicolon:before{content:"\3b"}.fa-send-back:before{content:"\f87e"}.fa-send-backward:before{content:"\f87f"}.fa-sensor:before{content:"\e028"}.fa-sensor-cloud:before,.fa-sensor-smoke:before{content:"\e02c"}.fa-sensor-fire:before{content:"\e02a"}.fa-sensor-on:before{content:"\e02b"}.fa-sensor-alert:before,.fa-sensor-triangle-exclamation:before{content:"\e029"}.fa-server:before{content:"\f233"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-share-all:before{content:"\f367"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-sheep:before{content:"\f711"}.fa-sheet-plastic:before{content:"\e571"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-inventory:before,.fa-shelves:before{content:"\f480"}.fa-shelves-empty:before{content:"\e246"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-shield-cat:before{content:"\e572"}.fa-shield-check:before{content:"\f2f7"}.fa-shield-cross:before{content:"\f712"}.fa-shield-dog:before{content:"\e573"}.fa-shield-exclamation:before{content:"\e247"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-shield-heart:before{content:"\e574"}.fa-shield-keyhole:before{content:"\e248"}.fa-shield-minus:before{content:"\e249"}.fa-shield-plus:before{content:"\e24a"}.fa-shield-quartered:before{content:"\e575"}.fa-shield-slash:before{content:"\e24b"}.fa-shield-virus:before{content:"\e06c"}.fa-shield-times:before,.fa-shield-xmark:before{content:"\e24c"}.fa-ship:before{content:"\f21a"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-shirt-long-sleeve:before{content:"\e3c7"}.fa-shirt-running:before{content:"\e3c8"}.fa-shirt-tank-top:before{content:"\e3c9"}.fa-shish-kebab:before{content:"\f821"}.fa-shoe-prints:before{content:"\f54b"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-shop-lock:before{content:"\e4a5"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-shovel:before{content:"\f713"}.fa-shovel-snow:before{content:"\f7c3"}.fa-shower:before{content:"\f2cc"}.fa-shower-alt:before,.fa-shower-down:before{content:"\e24d"}.fa-shredder:before{content:"\f68a"}.fa-shrimp:before{content:"\e448"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-shutters:before{content:"\e449"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-shuttlecock:before{content:"\f45b"}.fa-sickle:before{content:"\f822"}.fa-sidebar:before{content:"\e24e"}.fa-sidebar-flip:before{content:"\e24f"}.fa-sigma:before{content:"\f68b"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-signal-alt-4:before,.fa-signal-alt:before,.fa-signal-bars-strong:before,.fa-signal-bars:before{content:"\f690"}.fa-signal-alt-2:before,.fa-signal-bars-fair:before{content:"\f692"}.fa-signal-alt-3:before,.fa-signal-bars-good:before{content:"\f693"}.fa-signal-alt-slash:before,.fa-signal-bars-slash:before{content:"\f694"}.fa-signal-alt-1:before,.fa-signal-bars-weak:before{content:"\f691"}.fa-signal-2:before,.fa-signal-fair:before{content:"\f68d"}.fa-signal-3:before,.fa-signal-good:before{content:"\f68e"}.fa-signal-slash:before{content:"\f695"}.fa-signal-stream:before{content:"\f8dd"}.fa-signal-stream-slash:before{content:"\e250"}.fa-signal-4:before,.fa-signal-strong:before{content:"\f68f"}.fa-signal-1:before,.fa-signal-weak:before{content:"\f68c"}.fa-signature:before{content:"\f5b7"}.fa-signature-lock:before{content:"\e3ca"}.fa-signature-slash:before{content:"\e3cb"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-sim-card:before{content:"\f7c4"}.fa-sim-cards:before{content:"\e251"}.fa-sink:before{content:"\e06d"}.fa-siren:before{content:"\e02d"}.fa-siren-on:before{content:"\e02e"}.fa-sitemap:before{content:"\f0e8"}.fa-skeleton:before{content:"\f620"}.fa-ski-boot:before{content:"\e3cc"}.fa-ski-boot-ski:before{content:"\e3cd"}.fa-skull:before{content:"\f54c"}.fa-skull-cow:before{content:"\f8de"}.fa-skull-crossbones:before{content:"\f714"}.fa-slash:before{content:"\f715"}.fa-slash-back:before{content:"\5c"}.fa-slash-forward:before{content:"\2f"}.fa-sleigh:before{content:"\f7cc"}.fa-slider:before{content:"\e252"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-sliders-simple:before{content:"\e253"}.fa-sliders-up:before,.fa-sliders-v:before{content:"\f3f1"}.fa-slot-machine:before{content:"\e3ce"}.fa-smog:before{content:"\f75f"}.fa-smoke:before{content:"\f760"}.fa-smoking:before{content:"\f48d"}.fa-snake:before{content:"\f716"}.fa-snooze:before,.fa-zzz:before{content:"\f880"}.fa-snow-blowing:before{content:"\f761"}.fa-snowflake:before{content:"\f2dc"}.fa-snowflakes:before{content:"\f7cf"}.fa-snowman:before{content:"\f7d0"}.fa-frosty-head:before,.fa-snowman-head:before{content:"\f79b"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-creemee:before,.fa-soft-serve:before{content:"\e400"}.fa-solar-panel:before{content:"\f5ba"}.fa-solar-system:before{content:"\e02f"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-spa:before{content:"\f5bb"}.fa-space-station-moon:before{content:"\e033"}.fa-space-station-moon-alt:before,.fa-space-station-moon-construction:before{content:"\e034"}.fa-spade:before{content:"\f2f4"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-sparkles:before{content:"\f890"}.fa-speaker:before{content:"\f8df"}.fa-speakers:before{content:"\f8e0"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spider-black-widow:before{content:"\f718"}.fa-spider-web:before{content:"\f719"}.fa-spinner:before{content:"\f110"}.fa-spinner-third:before{content:"\f3f4"}.fa-split:before{content:"\e254"}.fa-splotch:before{content:"\f5bc"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-sportsball:before{content:"\e44b"}.fa-spray-can:before{content:"\f5bd"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-sprinkler:before{content:"\e035"}.fa-sprinkler-ceiling:before{content:"\e44c"}.fa-square:before{content:"\f0c8"}.fa-square-0:before{content:"\e255"}.fa-square-1:before{content:"\e256"}.fa-square-2:before{content:"\e257"}.fa-square-3:before{content:"\e258"}.fa-square-4:before{content:"\e259"}.fa-square-5:before{content:"\e25a"}.fa-square-6:before{content:"\e25b"}.fa-square-7:before{content:"\e25c"}.fa-square-8:before{content:"\e25d"}.fa-square-9:before{content:"\e25e"}.fa-square-a:before{content:"\e25f"}.fa-square-a-lock:before{content:"\e44d"}.fa-square-ampersand:before{content:"\e260"}.fa-arrow-square-down:before,.fa-square-arrow-down:before{content:"\f339"}.fa-square-arrow-down-left:before{content:"\e261"}.fa-square-arrow-down-right:before{content:"\e262"}.fa-arrow-square-left:before,.fa-square-arrow-left:before{content:"\f33a"}.fa-arrow-square-right:before,.fa-square-arrow-right:before{content:"\f33b"}.fa-arrow-square-up:before,.fa-square-arrow-up:before{content:"\f33c"}.fa-square-arrow-up-left:before{content:"\e263"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-square-b:before{content:"\e264"}.fa-square-bolt:before{content:"\e265"}.fa-square-c:before{content:"\e266"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-chevron-square-down:before,.fa-square-chevron-down:before{content:"\f329"}.fa-chevron-square-left:before,.fa-square-chevron-left:before{content:"\f32a"}.fa-chevron-square-right:before,.fa-square-chevron-right:before{content:"\f32b"}.fa-chevron-square-up:before,.fa-square-chevron-up:before{content:"\f32c"}.fa-square-code:before{content:"\e267"}.fa-square-d:before{content:"\e268"}.fa-square-dashed:before{content:"\e269"}.fa-square-divide:before{content:"\e26a"}.fa-dollar-square:before,.fa-square-dollar:before,.fa-usd-square:before{content:"\f2e9"}.fa-arrow-alt-square-down:before,.fa-square-down:before{content:"\f350"}.fa-square-down-left:before{content:"\e26b"}.fa-square-down-right:before{content:"\e26c"}.fa-square-e:before{content:"\e26d"}.fa-square-ellipsis:before{content:"\e26e"}.fa-square-ellipsis-vertical:before{content:"\e26f"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-exclamation-square:before,.fa-square-exclamation:before{content:"\f321"}.fa-square-f:before{content:"\e270"}.fa-box-fragile:before,.fa-square-fragile:before,.fa-square-wine-glass-crack:before{content:"\f49b"}.fa-square-full:before{content:"\f45c"}.fa-square-g:before{content:"\e271"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-heart-square:before,.fa-square-heart:before{content:"\f4c8"}.fa-square-i:before{content:"\e272"}.fa-info-square:before,.fa-square-info:before{content:"\f30f"}.fa-square-j:before{content:"\e273"}.fa-square-k:before{content:"\e274"}.fa-square-kanban:before{content:"\e488"}.fa-square-l:before{content:"\e275"}.fa-arrow-alt-square-left:before,.fa-square-left:before{content:"\f351"}.fa-square-list:before{content:"\e489"}.fa-square-m:before{content:"\e276"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-square-n:before{content:"\e277"}.fa-square-nfi:before{content:"\e576"}.fa-square-o:before{content:"\e278"}.fa-square-p:before{content:"\e279"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-parking-slash:before,.fa-square-parking-slash:before{content:"\f617"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-square-person-confined:before{content:"\e577"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-phone-square-down:before,.fa-square-phone-hangup:before{content:"\e27a"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-square-q:before{content:"\e27b"}.fa-square-quarters:before{content:"\e44e"}.fa-question-square:before,.fa-square-question:before{content:"\f2fd"}.fa-square-quote:before{content:"\e329"}.fa-square-r:before{content:"\e27c"}.fa-arrow-alt-square-right:before,.fa-square-right:before{content:"\f352"}.fa-square-ring:before{content:"\e44f"}.fa-square-root:before{content:"\f697"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-square-s:before{content:"\e27d"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-sliders-h-square:before,.fa-square-sliders:before{content:"\f3f0"}.fa-sliders-v-square:before,.fa-square-sliders-vertical:before{content:"\f3f2"}.fa-square-small:before{content:"\e27e"}.fa-square-star:before{content:"\e27f"}.fa-square-t:before{content:"\e280"}.fa-square-terminal:before{content:"\e32a"}.fa-box-up:before,.fa-square-this-way-up:before{content:"\f49f"}.fa-square-u:before{content:"\e281"}.fa-arrow-alt-square-up:before,.fa-square-up:before{content:"\f353"}.fa-square-up-left:before{content:"\e282"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-square-user:before{content:"\e283"}.fa-square-v:before{content:"\e284"}.fa-square-virus:before{content:"\e578"}.fa-square-w:before{content:"\e285"}.fa-square-x:before{content:"\e286"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-square-y:before{content:"\e287"}.fa-square-z:before{content:"\e288"}.fa-squid:before{content:"\e450"}.fa-squirrel:before{content:"\f71a"}.fa-staff:before{content:"\f71b"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-stairs:before{content:"\e289"}.fa-stamp:before{content:"\f5bf"}.fa-rectangle-sd:before,.fa-standard-definition:before{content:"\e28a"}.fa-stapler:before{content:"\e5af"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-christmas:before{content:"\f7d4"}.fa-star-exclamation:before{content:"\f2f3"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-star-sharp:before{content:"\e28b"}.fa-star-sharp-half:before{content:"\e28c"}.fa-star-sharp-half-alt:before,.fa-star-sharp-half-stroke:before{content:"\e28d"}.fa-star-shooting:before{content:"\e036"}.fa-starfighter:before{content:"\e037"}.fa-starfighter-alt:before,.fa-starfighter-twin-ion-engine:before{content:"\e038"}.fa-starfighter-alt-advanced:before,.fa-starfighter-twin-ion-engine-advanced:before{content:"\e28e"}.fa-stars:before{content:"\f762"}.fa-starship:before{content:"\e039"}.fa-starship-freighter:before{content:"\e03a"}.fa-steak:before{content:"\f824"}.fa-steering-wheel:before{content:"\f622"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-stethoscope:before{content:"\f0f1"}.fa-stocking:before{content:"\f7d5"}.fa-stomach:before{content:"\f623"}.fa-stop:before{content:"\f04d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-lock:before{content:"\e4a6"}.fa-store-slash:before{content:"\e071"}.fa-strawberry:before{content:"\e32b"}.fa-street-view:before{content:"\f21d"}.fa-stretcher:before{content:"\f825"}.fa-strikethrough:before{content:"\f0cc"}.fa-stroopwafel:before{content:"\f551"}.fa-subscript:before{content:"\f12c"}.fa-suitcase:before{content:"\f0f2"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-sun-alt:before,.fa-sun-bright:before{content:"\e28f"}.fa-sun-cloud:before{content:"\f763"}.fa-sun-dust:before{content:"\f764"}.fa-sun-haze:before{content:"\f765"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-sunglasses:before{content:"\f892"}.fa-sunrise:before{content:"\f766"}.fa-sunset:before{content:"\f767"}.fa-superscript:before{content:"\f12b"}.fa-nigiri:before,.fa-sushi:before{content:"\e48a"}.fa-maki-roll:before,.fa-makizushi:before,.fa-sushi-roll:before{content:"\e48b"}.fa-swatchbook:before{content:"\f5c3"}.fa-sword:before{content:"\f71c"}.fa-sword-laser:before{content:"\e03b"}.fa-sword-laser-alt:before{content:"\e03c"}.fa-swords:before{content:"\f71d"}.fa-swords-laser:before{content:"\e03d"}.fa-icons-alt:before,.fa-symbols:before{content:"\f86e"}.fa-synagogue:before{content:"\f69b"}.fa-syringe:before{content:"\f48e"}.fa-t:before{content:"\54"}.fa-table:before{content:"\f0ce"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-table-layout:before{content:"\e290"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-table-picnic:before{content:"\e32d"}.fa-table-pivot:before{content:"\e291"}.fa-rows:before,.fa-table-rows:before{content:"\e292"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-table-tree:before{content:"\e293"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-tablet-button:before{content:"\f10a"}.fa-tablet-rugged:before{content:"\f48f"}.fa-tablet-android-alt:before,.fa-tablet-screen:before{content:"\f3fc"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-taco:before{content:"\f826"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tally-5:before,.fa-tally:before{content:"\f69c"}.fa-tally-1:before{content:"\e294"}.fa-tally-2:before{content:"\e295"}.fa-tally-3:before{content:"\e296"}.fa-tally-4:before{content:"\e297"}.fa-tamale:before{content:"\e451"}.fa-tank-water:before{content:"\e452"}.fa-tape:before{content:"\f4db"}.fa-tarp:before{content:"\e57b"}.fa-tarp-droplet:before{content:"\e57c"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-taxi-bus:before{content:"\e298"}.fa-teddy-bear:before{content:"\e3cf"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telescope:before{content:"\e03e"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-list:before{content:"\e299"}.fa-temperature-low:before{content:"\f76b"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-temperature-frigid:before,.fa-temperature-snow:before{content:"\f768"}.fa-temperature-hot:before,.fa-temperature-sun:before{content:"\f76a"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-tennis-ball:before{content:"\f45e"}.fa-tent:before{content:"\e57d"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tent-arrows-down:before{content:"\e581"}.fa-tents:before{content:"\e582"}.fa-terminal:before{content:"\f120"}.fa-text:before{content:"\f893"}.fa-text-height:before{content:"\f034"}.fa-text-size:before{content:"\f894"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-text-width:before{content:"\f035"}.fa-thermometer:before{content:"\f491"}.fa-theta:before{content:"\f69e"}.fa-thought-bubble:before{content:"\e32e"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-tick:before{content:"\e32f"}.fa-ticket:before{content:"\f145"}.fa-ticket-airline:before{content:"\e29a"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-tickets-airline:before{content:"\e29b"}.fa-tilde:before{content:"\7e"}.fa-timeline:before{content:"\e29c"}.fa-timeline-arrow:before{content:"\e29d"}.fa-timer:before{content:"\e29e"}.fa-tire:before{content:"\f631"}.fa-tire-flat:before{content:"\f632"}.fa-tire-pressure-warning:before{content:"\f633"}.fa-tire-rugged:before{content:"\f634"}.fa-toggle-large-off:before{content:"\e5b0"}.fa-toggle-large-on:before{content:"\e5b1"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-alt:before,.fa-toilet-paper-blank:before{content:"\f71f"}.fa-toilet-paper-blank-under:before,.fa-toilet-paper-reverse-alt:before{content:"\e29f"}.fa-toilet-paper-check:before{content:"\e5b2"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toilet-paper-reverse:before,.fa-toilet-paper-under:before{content:"\e2a0"}.fa-toilet-paper-reverse-slash:before,.fa-toilet-paper-under-slash:before{content:"\e2a1"}.fa-toilet-paper-xmark:before{content:"\e5b3"}.fa-toilet-portable:before{content:"\e583"}.fa-toilets-portable:before{content:"\e584"}.fa-tomato:before{content:"\e330"}.fa-tombstone:before{content:"\f720"}.fa-tombstone-alt:before,.fa-tombstone-blank:before{content:"\f721"}.fa-toolbox:before{content:"\f552"}.fa-tooth:before{content:"\f5c9"}.fa-toothbrush:before{content:"\f635"}.fa-torii-gate:before{content:"\f6a1"}.fa-tornado:before{content:"\f76f"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-tower-cell:before{content:"\e585"}.fa-tower-control:before{content:"\e2a2"}.fa-tower-observation:before{content:"\e586"}.fa-tractor:before{content:"\f722"}.fa-trademark:before{content:"\f25c"}.fa-traffic-cone:before{content:"\f636"}.fa-traffic-light:before{content:"\f637"}.fa-traffic-light-go:before{content:"\f638"}.fa-traffic-light-slow:before{content:"\f639"}.fa-traffic-light-stop:before{content:"\f63a"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-subway-tunnel:before,.fa-train-subway-tunnel:before{content:"\e2a3"}.fa-train-track:before{content:"\e453"}.fa-train-tram:before{content:"\e5b4"}.fa-train-tunnel:before{content:"\e454"}.fa-transformer-bolt:before{content:"\e2a4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-transporter:before{content:"\e042"}.fa-transporter-1:before{content:"\e043"}.fa-transporter-2:before{content:"\e044"}.fa-transporter-3:before{content:"\e045"}.fa-transporter-4:before{content:"\e2a5"}.fa-transporter-5:before{content:"\e2a6"}.fa-transporter-6:before{content:"\e2a7"}.fa-transporter-7:before{content:"\e2a8"}.fa-transporter-empty:before{content:"\e046"}.fa-trash:before{content:"\f1f8"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-trash-can-check:before{content:"\e2a9"}.fa-trash-can-clock:before{content:"\e2aa"}.fa-trash-can-list:before{content:"\e2ab"}.fa-trash-can-plus:before{content:"\e2ac"}.fa-trash-alt-slash:before,.fa-trash-can-slash:before{content:"\e2ad"}.fa-trash-can-arrow-turn-left:before,.fa-trash-can-undo:before,.fa-trash-undo-alt:before{content:"\f896"}.fa-trash-can-xmark:before{content:"\e2ae"}.fa-trash-check:before{content:"\e2af"}.fa-trash-clock:before{content:"\e2b0"}.fa-trash-list:before{content:"\e2b1"}.fa-trash-plus:before{content:"\e2b2"}.fa-trash-slash:before{content:"\e2b3"}.fa-trash-arrow-turn-left:before,.fa-trash-undo:before{content:"\f895"}.fa-trash-xmark:before{content:"\e2b4"}.fa-treasure-chest:before{content:"\f723"}.fa-tree:before{content:"\f1bb"}.fa-tree-christmas:before{content:"\f7db"}.fa-tree-city:before{content:"\e587"}.fa-tree-alt:before,.fa-tree-deciduous:before{content:"\f400"}.fa-tree-decorated:before{content:"\f7dc"}.fa-tree-large:before{content:"\f7dd"}.fa-tree-palm:before{content:"\f82b"}.fa-trees:before{content:"\f724"}.fa-triangle:before{content:"\f2ec"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-triangle-instrument:before,.fa-triangle-music:before{content:"\f8e2"}.fa-construction:before,.fa-triangle-person-digging:before{content:"\f85d"}.fa-trillium:before{content:"\e588"}.fa-trophy:before{content:"\f091"}.fa-trophy-alt:before,.fa-trophy-star:before{content:"\f2eb"}.fa-trowel:before{content:"\e589"}.fa-trowel-bricks:before{content:"\e58a"}.fa-truck:before{content:"\f0d1"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-truck-bolt:before{content:"\e3d0"}.fa-shipping-timed:before,.fa-truck-clock:before{content:"\f48c"}.fa-truck-container:before{content:"\f4dc"}.fa-truck-container-empty:before{content:"\e2b5"}.fa-truck-droplet:before{content:"\e58c"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-truck-field:before{content:"\e58d"}.fa-truck-field-un:before{content:"\e58e"}.fa-truck-flatbed:before{content:"\e2b6"}.fa-truck-front:before{content:"\e2b7"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-truck-plane:before{content:"\e58f"}.fa-truck-plow:before{content:"\f7de"}.fa-truck-ramp:before{content:"\f4e0"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-truck-couch:before,.fa-truck-ramp-couch:before{content:"\f4dd"}.fa-truck-tow:before{content:"\e2b8"}.fa-trumpet:before{content:"\f8e3"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-teletype-answer:before,.fa-tty-answer:before{content:"\e2b9"}.fa-tugrik-sign:before{content:"\e2ba"}.fa-turkey:before{content:"\f725"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-turn-down-left:before{content:"\e331"}.fa-turn-down-right:before{content:"\e455"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"}.fa-turntable:before{content:"\f8e4"}.fa-turtle:before{content:"\f726"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-tv-music:before{content:"\f8e6"}.fa-tv-retro:before{content:"\f401"}.fa-typewriter:before{content:"\f8e7"}.fa-u:before{content:"\55"}.fa-ufo:before{content:"\e047"}.fa-ufo-beam:before{content:"\e048"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-umbrella-alt:before,.fa-umbrella-simple:before{content:"\e2bc"}.fa-underline:before{content:"\f0cd"}.fa-unicorn:before{content:"\f727"}.fa-uniform-martial-arts:before{content:"\e3d1"}.fa-union:before{content:"\f6a2"}.fa-universal-access:before{content:"\f29a"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-arrow-alt-up:before,.fa-up:before{content:"\f357"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-up-from-bracket:before{content:"\e590"}.fa-up-from-dotted-line:before{content:"\e456"}.fa-arrow-alt-from-bottom:before,.fa-up-from-line:before{content:"\f346"}.fa-up-left:before{content:"\e2bd"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-up-right:before{content:"\e2be"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-up-to-dotted-line:before{content:"\e457"}.fa-arrow-alt-to-top:before,.fa-up-to-line:before{content:"\f34d"}.fa-upload:before{content:"\f093"}.fa-usb-drive:before{content:"\f8e9"}.fa-user:before{content:"\f007"}.fa-user-alien:before{content:"\e04a"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-bounty-hunter:before{content:"\e2bf"}.fa-user-check:before{content:"\f4fc"}.fa-user-chef:before{content:"\e3d2"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cowboy:before{content:"\f8ea"}.fa-user-crown:before{content:"\f6a4"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-user-doctor-hair:before{content:"\e458"}.fa-user-doctor-hair-long:before{content:"\e459"}.fa-user-doctor-message:before,.fa-user-md-chat:before{content:"\f82e"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-user-graduate:before{content:"\f501"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-user-group-crown:before,.fa-users-crown:before{content:"\f6a5"}.fa-user-hair:before{content:"\e45a"}.fa-user-hair-buns:before{content:"\e3d3"}.fa-user-hair-long:before{content:"\e45b"}.fa-business-front:before,.fa-party-back:before,.fa-trian-balbot:before,.fa-user-hair-mullet:before{content:"\e45c"}.fa-user-headset:before{content:"\f82d"}.fa-user-construction:before,.fa-user-hard-hat:before,.fa-user-helmet-safety:before{content:"\f82c"}.fa-user-injured:before{content:"\f728"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-user-lock:before{content:"\f502"}.fa-user-minus:before{content:"\f503"}.fa-user-music:before{content:"\f8eb"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-nurse-hair:before{content:"\e45d"}.fa-user-nurse-hair-long:before{content:"\e45e"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-user-pilot:before{content:"\e2c0"}.fa-user-pilot-tie:before{content:"\e2c1"}.fa-user-plus:before{content:"\f234"}.fa-user-police:before{content:"\e333"}.fa-user-police-tie:before{content:"\e334"}.fa-user-robot:before{content:"\e04b"}.fa-user-robot-xmarks:before{content:"\e4a7"}.fa-user-secret:before{content:"\f21b"}.fa-user-shakespeare:before{content:"\e2c2"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-tie-hair:before{content:"\e45f"}.fa-user-tie-hair-long:before{content:"\e460"}.fa-user-unlock:before{content:"\e058"}.fa-user-visor:before{content:"\e04c"}.fa-user-vneck:before{content:"\e461"}.fa-user-vneck-hair:before{content:"\e462"}.fa-user-vneck-hair-long:before{content:"\e463"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-between-lines:before{content:"\e591"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-users-line:before{content:"\e592"}.fa-users-medical:before{content:"\f830"}.fa-users-rays:before{content:"\e593"}.fa-users-rectangle:before{content:"\e594"}.fa-users-slash:before{content:"\e073"}.fa-users-viewfinder:before{content:"\e595"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-utensils-slash:before{content:"\e464"}.fa-utility-pole:before{content:"\e2c3"}.fa-utility-pole-double:before{content:"\e2c4"}.fa-v:before{content:"\56"}.fa-vacuum:before{content:"\e04d"}.fa-vacuum-robot:before{content:"\e04e"}.fa-value-absolute:before{content:"\f6a6"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-vault:before{content:"\e2c5"}.fa-vector-circle:before{content:"\e2c6"}.fa-vector-polygon:before{content:"\e2c7"}.fa-vector-square:before{content:"\f5cb"}.fa-vent-damper:before{content:"\e465"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-vial:before{content:"\f492"}.fa-vial-circle-check:before{content:"\e596"}.fa-vial-virus:before{content:"\e597"}.fa-vials:before{content:"\f493"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-video-arrow-down-left:before{content:"\e2c8"}.fa-video-arrow-up-right:before{content:"\e2c9"}.fa-video-plus:before{content:"\f4e1"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-violin:before{content:"\f8ed"}.fa-virus:before{content:"\e074"}.fa-virus-covid:before{content:"\e4a8"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-voicemail:before{content:"\f897"}.fa-volcano:before{content:"\f770"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-volume-medium:before,.fa-volume:before{content:"\f6a8"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-volume-off:before{content:"\f026"}.fa-volume-slash:before{content:"\f2e2"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-vr-cardboard:before{content:"\f729"}.fa-w:before{content:"\57"}.fa-waffle:before{content:"\e466"}.fa-wagon-covered:before{content:"\f8ee"}.fa-walker:before{content:"\f831"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-wallet:before{content:"\f555"}.fa-wand:before{content:"\f72a"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-wand-sparkles:before{content:"\f72b"}.fa-warehouse:before{content:"\f494"}.fa-warehouse-alt:before,.fa-warehouse-full:before{content:"\f495"}.fa-washer:before,.fa-washing-machine:before{content:"\f898"}.fa-watch:before{content:"\f2e1"}.fa-watch-apple:before{content:"\e2cb"}.fa-watch-calculator:before{content:"\f8f0"}.fa-watch-fitness:before{content:"\f63e"}.fa-watch-smart:before{content:"\e2cc"}.fa-water:before{content:"\f773"}.fa-water-arrow-down:before,.fa-water-lower:before{content:"\f774"}.fa-water-arrow-up:before,.fa-water-rise:before{content:"\f775"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-watermelon-slice:before{content:"\e337"}.fa-heart-rate:before,.fa-wave-pulse:before{content:"\f5f8"}.fa-wave-sine:before{content:"\f899"}.fa-wave-square:before{content:"\f83e"}.fa-wave-triangle:before{content:"\f89a"}.fa-waveform:before{content:"\f8f1"}.fa-waveform-lines:before,.fa-waveform-path:before{content:"\f8f2"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-whale:before{content:"\f72c"}.fa-wheat:before{content:"\f72d"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-wheat-awn-slash:before{content:"\e338"}.fa-wheat-slash:before{content:"\e339"}.fa-wheelchair:before{content:"\f193"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-glass-whiskey-rocks:before,.fa-whiskey-glass-ice:before{content:"\f7a1"}.fa-whistle:before{content:"\f460"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-wifi-exclamation:before{content:"\e2cf"}.fa-wifi-2:before,.fa-wifi-fair:before{content:"\f6ab"}.fa-wifi-slash:before{content:"\f6ac"}.fa-wifi-1:before,.fa-wifi-weak:before{content:"\f6aa"}.fa-wind:before{content:"\f72e"}.fa-wind-turbine:before{content:"\f89b"}.fa-wind-circle-exclamation:before,.fa-wind-warning:before{content:"\f776"}.fa-window:before{content:"\f40e"}.fa-window-alt:before,.fa-window-flip:before{content:"\f40f"}.fa-window-frame:before{content:"\e04f"}.fa-window-frame-open:before{content:"\e050"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windsock:before{content:"\f777"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-fragile:before,.fa-wine-glass-crack:before{content:"\f4bb"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-worm:before{content:"\e599"}.fa-wreath:before{content:"\f7e2"}.fa-wrench:before{content:"\f0ad"}.fa-wrench-simple:before{content:"\e2d1"}.fa-x:before{content:"\58"}.fa-x-ray:before{content:"\f497"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-xmark-large:before{content:"\e59b"}.fa-times-to-slot:before,.fa-vote-nay:before,.fa-xmark-to-slot:before{content:"\f771"}.fa-xmarks-lines:before{content:"\e59a"}.fa-y:before{content:"\59"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-z:before{content:"\5a"}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-f6b769.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-f6b769.ttf) format("truetype");unicode-range:u+20,u+e013,u+e07b,u+e084,u+f08c,u+f099-f09b,u+f0d2,u+f13b,u+f167,u+f16a-f16d,u+f179-f17c,u+f17e,u+f18c,u+f19a-f19b,u+f1a0,u+f1b4,u+f1bc,u+f1be,u+f1e8,u+f1ed,u+f1f0-f1f1,u+f20e,u+f210,u+f213-f214,u+f230,u+f232,u+f23a,u+f26b,u+f270,u+f288,u+f299,u+f29b,u+f2a6,u+f2b0,u+f2c5-f2c6,u+f2e0,u+f368,u+f379,u+f392-f393,u+f39f,u+f3a9,u+f3ab-f3ac,u+f3c0,u+f3c7,u+f3ca,u+f3e2,u+f3eb-f3ec,u+f3f8,u+f3fe,u+f419,u+f41b,u+f4d5,u+f4e4,u+f4f8-f4f9,u+f514,u+f5b5,u+f6c9,u+f731,u+f77b,u+f7af,u+f7e1,u+f83b}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-bbafe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-bbafe9.ttf) format("truetype");unicode-range:u+20,u+e007,u+e052,u+e077-e079,u+e07d-e081,u+e340,u+e360,u+e3d9,u+e40f,u+e499,u+f0d5,u+f0e1,u+f113,u+f13c,u+f15a,u+f16e,u+f170-f172,u+f17d,u+f180,u+f184,u+f1a5-f1a6,u+f1a9-f1aa,u+f1bd,u+f1cb-f1cc,u+f1d1,u+f1d3-f1d4,u+f1ee,u+f1f2-f1f5,u+f202,u+f208-f209,u+f20d,u+f211-f212,u+f23e,u+f24b-f24c,u+f25e,u+f260-f261,u+f265,u+f268-f269,u+f26d-f26e,u+f27c,u+f27e,u+f280,u+f282,u+f284,u+f286,u+f293-f294,u+f296,u+f2a5,u+f2b3-f2b4,u+f2b8,u+f2d5-f2d8,u+f369-f375,u+f378,u+f37a-f37d,u+f37f-f380,u+f383-f385,u+f388,u+f38b-f38f,u+f391,u+f394-f396,u+f399-f39a,u+f39d-f39e,u+f3a1-f3a4,u+f3a6-f3a8,u+f3aa,u+f3ad-f3ae,u+f3b0-f3b2,u+f3b4-f3b8,u+f3ba-f3bd,u+f415-f417,u+f41c-f41d,u+f420-f421,u+f423,u+f425-f427,u+f42c-f430,u+f44d,u+f452,u+f4e6-f4f5,u+f50a-f50e,u+f592,u+f5f1,u+f5f7,u+f5fa,u+f642,u+f6ca,u+f6cc,u+f6dc,u+f77a,u+f785,u+f789,u+f78d,u+f790-f791,u+f797-f799,u+f7b0-f7b1,u+f834-f83a,u+f841,u+f89e,u+f8a6}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-56ba33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-56ba33.ttf) format("truetype");unicode-range:u+20,u+e01a,u+e01e,u+e049,u+e055-e057,u+e07a,u+e07c,u+e082-e083,u+e087-e088,u+e2d0,u+e43a,u+e44a,u+e49b,u+e4a0,u+e530-e531,u+e570,u+e5ac-e5ae,u+f081-f082,u+f092,u+f0d3-f0d4,u+f136,u+f166,u+f168-f169,u+f173-f174,u+f181,u+f189-f18b,u+f18d,u+f194,u+f198,u+f19e,u+f1a1-f1a4,u+f1a7-f1a8,u+f1b5-f1b7,u+f1ca,u+f1d0,u+f1d2,u+f1d5-f1d7,u+f1e7,u+f1e9,u+f203,u+f215-f216,u+f231,u+f237,u+f23b-f23d,u+f263-f264,u+f266-f267,u+f26a,u+f27d,u+f281,u+f285,u+f287,u+f289-f28a,u+f297-f298,u+f2a9-f2ae,u+f2b1-f2b2,u+f2c4,u+f2d9-f2da,u+f2dd-f2de,u+f35c,u+f397,u+f3af,u+f3b9,u+f3c3-f3c4,u+f3c6,u+f3c8,u+f3cb-f3cc,u+f3d0,u+f3d2-f3dc,u+f3df,u+f3e1,u+f3e3-f3e4,u+f3e6-f3ea,u+f3ee-f3ef,u+f3f3,u+f3f5-f3f7,u+f3f9,u+f402-f405,u+f407-f40d,u+f411-f414,u+f41a,u+f41e-f41f,u+f428-f42b,u+f431,u+f457,u+f459,u+f4e5,u+f4f6-f4f7,u+f50f-f513,u+f59e,u+f5a3,u+f5a8,u+f5b2,u+f5be,u+f5c6,u+f5cc,u+f5cf,u+f60f,u+f612,u+f63f,u+f69d,u+f730,u+f75d,u+f7b3,u+f7bb-f7bc,u+f7c6,u+f7d3,u+f7d6,u+f7df-f7e0,u+f7e3,u+f83c-f83d,u+f83f-f840,u+f842,u+f8ca,u+f8d2,u+f8e1,u+f8e8}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-792d0c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-792d0c.ttf) format("truetype");unicode-range:u+20,u+f293}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-910f33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-910f33.ttf) format("truetype");unicode-range:u+20,u+f2b4,u+f425,u+f4e6}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-c238fb.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-c238fb.ttf) format("truetype");unicode-range:u+20,u+e531}.fa-brands,.fab{font-family:"Font Awesome 6 Brands";font-weight:400}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-alipay:before{content:"\f642"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-amilia:before{content:"\f36d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-pay:before{content:"\f415"}.fa-artstation:before{content:"\f77a"}.fa-asymmetrik:before{content:"\f372"}.fa-atlassian:before{content:"\f77b"}.fa-audible:before{content:"\f373"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-aws:before{content:"\f375"}.fa-bandcamp:before{content:"\f2d5"}.fa-battle-net:before{content:"\f835"}.fa-behance:before{content:"\f1b4"}.fa-bilibili:before{content:"\e3d9"}.fa-bimobject:before{content:"\f378"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bootstrap:before{content:"\f836"}.fa-bots:before{content:"\e340"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-buromobelexperte:before{content:"\f37f"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cmplid:before{content:"\e360"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cotton-bureau:before{content:"\f89e"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-critical-role:before{content:"\f6c9"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dhl:before{content:"\f790"}.fa-diaspora:before{content:"\f791"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-draft2digital:before{content:"\f396"}.fa-dribbble:before{content:"\f17d"}.fa-dropbox:before{content:"\f16b"}.fa-drupal:before{content:"\f1a9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-elementor:before{content:"\f430"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-etsy:before{content:"\f2d7"}.fa-evernote:before{content:"\f839"}.fa-expeditedssl:before{content:"\f23e"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-figma:before{content:"\f799"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-fly:before{content:"\f417"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-fulcrum:before{content:"\f50b"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-gofore:before{content:"\f3a7"}.fa-golang:before{content:"\e40f"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-wallet:before{content:"\f1ee"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-gulp:before{content:"\f3ae"}.fa-hacker-news:before{content:"\f1d4"}.fa-hackerrank:before{content:"\f5f7"}.fa-hashnode:before{content:"\e499"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-hive:before{content:"\e07f"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-hotjar:before{content:"\f3b1"}.fa-houzz:before{content:"\f27c"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-ideal:before{content:"\e013"}.fa-imdb:before{content:"\f2d8"}.fa-instagram:before{content:"\f16d"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joomla:before{content:"\f1aa"}.fa-js:before{content:"\f3b8"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaggle:before{content:"\f5fa"}.fa-keybase:before{content:"\f4f5"}.fa-keycdn:before{content:"\f3ba"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-korvue:before{content:"\f42f"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-leanpub:before{content:"\f212"}.fa-less:before{content:"\f41d"}.fa-line:before{content:"\f3c0"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-mailchimp:before{content:"\f59e"}.fa-mandalorian:before{content:"\f50f"}.fa-markdown:before{content:"\f60f"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medapps:before{content:"\f3c6"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-mendeley:before{content:"\f7b3"}.fa-meta:before{content:"\e49b"}.fa-microblog:before{content:"\e01a"}.fa-microsoft:before{content:"\f3ca"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-nfc-directional:before{content:"\e530"}.fa-nfc-symbol:before{content:"\e531"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-old-republic:before{content:"\f510"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-padlet:before{content:"\e4a0"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-palfed:before{content:"\f3d8"}.fa-patreon:before{content:"\f3d9"}.fa-paypal:before{content:"\f1ed"}.fa-perbyte:before{content:"\e083"}.fa-periscope:before{content:"\f3da"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pix:before{content:"\e43a"}.fa-playstation:before{content:"\f3df"}.fa-product-hunt:before{content:"\f288"}.fa-pushed:before{content:"\f3e1"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-r-project:before{content:"\f4f7"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-redhat:before{content:"\f7bc"}.fa-renren:before{content:"\f18b"}.fa-replyd:before{content:"\f3e6"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-rev:before{content:"\f5b2"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-rust:before{content:"\e07a"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-schlix:before{content:"\f3ea"}.fa-screenpal:before{content:"\e570"}.fa-scribd:before{content:"\f28a"}.fa-searchengin:before{content:"\f3eb"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-servicestack:before{content:"\f3ec"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shopify:before{content:"\e057"}.fa-shopware:before{content:"\f5b5"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sith:before{content:"\f512"}.fa-sitrox:before{content:"\e44a"}.fa-sketch:before{content:"\f7c6"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-slideshare:before{content:"\f1e7"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-space-awesome:before{content:"\e5ac"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spotify:before{content:"\f1bc"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-symbol:before{content:"\f3f6"}.fa-sticker-mule:before{content:"\f3f7"}.fa-strava:before{content:"\f428"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-superpowers:before{content:"\f2dd"}.fa-supple:before{content:"\f3f9"}.fa-suse:before{content:"\f7d6"}.fa-swift:before{content:"\f8e1"}.fa-symfony:before{content:"\f83d"}.fa-teamspeak:before{content:"\f4f9"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-the-red-yeti:before{content:"\f69d"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-think-peaks:before{content:"\f731"}.fa-tiktok:before{content:"\e07b"}.fa-trade-federation:before{content:"\f513"}.fa-trello:before{content:"\f181"}.fa-tumblr:before{content:"\f173"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-uncharted:before{content:"\e084"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-vaadin:before{content:"\f408"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viber:before{content:"\f409"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-vuejs:before{content:"\f41f"}.fa-watchman-monitoring:before{content:"\e087"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whmcs:before{content:"\f40d"}.fa-wikipedia-w:before{content:"\f266"}.fa-windows:before{content:"\f17a"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-zhihu:before{content:"\f63f"}:host,:root{--fa-font-duotone:normal 900 1em/1 "Font Awesome 6 Duotone"}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-d5bbe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-d5bbe9.ttf) format("truetype");unicode-range:u+20-21,u+23,u+2b,u+3f,u+1021,u+1023,u+102b,u+103f,u+e017,u+e01f,u+e024,u+e045,u+e060,u+f001,u+f004-f005,u+f007,u+f00c,u+f011-f012,u+f015,u+f017,u+f019,u+f023-f024,u+f02c-f02d,u+f02f-f031,u+f03a,u+f03d-f03e,u+f040-f041,u+f04a-f04e,u+f060-f065,u+f067-f068,u+f06b-f06d,u+f072,u+f075,u+f077,u+f07b,u+f084,u+f091,u+f093,u+f095,u+f09d,u+f0a6,u+f0ac-f0ad,u+f0b0,u+f0c0-f0c2,u+f0c5,u+f0c8-f0c9,u+f0cc,u+f0ce,u+f0d1,u+f0d6-f0d7,u+f0dc,u+f0e0,u+f0e8,u+f0f3,u+f106,u+f108-f109,u+f10e,u+f110-f111,u+f11e,u+f121,u+f128-f12a,u+f132-f133,u+f135,u+f145,u+f14e,u+f15b,u+f186,u+f188,u+f1ab,u+f1ad,u+f1bb,u+f1c0,u+f1c2-f1c3,u+f1d8,u+f1e4,u+f1ea-f1eb,u+f1f8,u+f205,u+f20a,u+f217,u+f21a,u+f21c-f21d,u+f233,u+f238,u+f251,u+f25d,u+f292,u+f29e,u+f2a0,u+f2a7,u+f2bb,u+f2cc,u+f2db,u+f2e1,u+f2ec,u+f2f7,u+f303,u+f316,u+f328,u+f332,u+f335,u+f37e,u+f390,u+f3c5,u+f3ce,u+f3f4,u+f40e,u+f435,u+f481,u+f493,u+f4cc,u+f4d1,u+f4d8,u+f4e2,u+f503,u+f51b,u+f52b,u+f549,u+f54e,u+f555,u+f559,u+f56e-f570,u+f594,u+f5a1,u+f5aa-f5ab,u+f5b7,u+f5db-f5dc,u+f5f6,u+f5fd,u+f621,u+f64a,u+f64f,u+f654,u+f656,u+f673,u+f67d,u+f67f,u+f695,u+f69c,u+f6a8,u+f6e3,u+f6e9,u+f6ff,u+f715,u+f734,u+f755,u+f757,u+f773,u+f781,u+f784,u+f788,u+f7b2,u+f7b6,u+f7bd,u+f7d5,u+f7ee,u+f7ff,u+f804,u+f80a,u+f80c,u+f813,u+f82f,u+f855,u+f858-f859,u+f85c,u+f86d,u+f871,u+f893-f894,u+f8a9,u+f8b2,u+f8d6,u+f8d9,u+f8e7,u+f8ef,u+10e017,u+10e01f,u+10e024,u+10e045,u+10e060,u+10f001,u+10f004-10f005,u+10f007,u+10f00c,u+10f011-10f012,u+10f015,u+10f017,u+10f019,u+10f023-10f024,u+10f02c-10f02d,u+10f02f-10f031,u+10f03a,u+10f03d-10f03e,u+10f040-10f041,u+10f04a-10f04e,u+10f060-10f065,u+10f067-10f068,u+10f06b-10f06d,u+10f072,u+10f075,u+10f077,u+10f07b,u+10f084,u+10f091,u+10f093,u+10f095,u+10f09d,u+10f0a6,u+10f0ac-10f0ad,u+10f0b0,u+10f0c0-10f0c2,u+10f0c5,u+10f0c8-10f0c9,u+10f0cc,u+10f0ce,u+10f0d1,u+10f0d6-10f0d7,u+10f0dc,u+10f0e0,u+10f0e8,u+10f0f3,u+10f106,u+10f108-10f109,u+10f10e,u+10f110-10f111,u+10f11e,u+10f121,u+10f128-10f12a,u+10f132-10f133,u+10f135,u+10f145,u+10f14e,u+10f15b,u+10f186,u+10f188,u+10f1ab,u+10f1ad,u+10f1bb,u+10f1c0,u+10f1c2-10f1c3,u+10f1d8,u+10f1e4,u+10f1ea-10f1eb,u+10f1f8,u+10f205,u+10f20a,u+10f217,u+10f21a,u+10f21c-10f21d,u+10f233,u+10f238,u+10f251,u+10f25d,u+10f292,u+10f29e,u+10f2a0,u+10f2a7,u+10f2bb,u+10f2cc,u+10f2db,u+10f2e1,u+10f2ec,u+10f2f7,u+10f303,u+10f316,u+10f328,u+10f332,u+10f335,u+10f37e,u+10f390,u+10f3c5,u+10f3ce,u+10f3f4,u+10f40e,u+10f435,u+10f481,u+10f493,u+10f4cc,u+10f4d1,u+10f4d8,u+10f4e2,u+10f503,u+10f51b,u+10f52b,u+10f549,u+10f54e,u+10f555,u+10f559,u+10f56e-10f570,u+10f594,u+10f5a1,u+10f5aa-10f5ab,u+10f5b7,u+10f5db-10f5dc,u+10f5f6,u+10f5fd,u+10f621,u+10f64a,u+10f64f,u+10f654,u+10f656,u+10f673,u+10f67d,u+10f67f,u+10f695,u+10f69c,u+10f6a8,u+10f6e3,u+10f6e9,u+10f6ff,u+10f715,u+10f734,u+10f755,u+10f757,u+10f773,u+10f781,u+10f784,u+10f788,u+10f7b2,u+10f7b6,u+10f7bd,u+10f7d5,u+10f7ee,u+10f7ff,u+10f804,u+10f80a,u+10f80c,u+10f813,u+10f82f,u+10f855,u+10f858-10f859,u+10f85c,u+10f86d,u+10f871,u+10f893-10f894,u+10f8a9,u+10f8b2,u+10f8d6,u+10f8d9,u+10f8e7,u+10f8ef}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-e41116.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-e41116.ttf) format("truetype");unicode-range:u+20,u+24-25,u+1024-1025,u+e010,u+e01b,u+e020-e021,u+e02f,u+e03a,u+e042,u+e046,u+e068,u+e06e,u+e074,u+e076,u+f008,u+f018,u+f01c,u+f025,u+f02a,u+f02e,u+f05b,u+f06e,u+f078,u+f086,u+f09c,u+f0a3,u+f0b1,u+f0c6,u+f0e7,u+f0eb,u+f0f8,u+f11c,u+f126,u+f12c-f12e,u+f130-f131,u+f13d,u+f140,u+f155,u+f164,u+f1ae,u+f1b2,u+f1b8,u+f1c1,u+f1ce,u+f1dc,u+f1e5-f1e6,u+f1ec,u+f1f9,u+f219,u+f21b,u+f22d,u+f234,u+f246,u+f24d,u+f275,u+f295,u+f2b5,u+f2cd,u+f2d2,u+f2fc,u+f302,u+f31a,u+f363,u+f3e5,u+f3fb,u+f44b,u+f47d,u+f48a,u+f48f-f490,u+f494,u+f498,u+f4b7,u+f4ca,u+f4d7,u+f508,u+f51d-f51e,u+f521-f522,u+f530,u+f535,u+f53e,u+f541,u+f543-f545,u+f548,u+f55d,u+f564,u+f56c,u+f577-f578,u+f590,u+f595,u+f5a2,u+f5b0,u+f5ba,u+f5bf,u+f5ca,u+f5ef,u+f5f2,u+f5fb,u+f63b,u+f649,u+f653,u+f65b,u+f664,u+f675,u+f6bf-f6c0,u+f6d5,u+f6f5,u+f6fa,u+f700,u+f70b,u+f70e,u+f71b,u+f72e-f72f,u+f733,u+f747,u+f75c,u+f762,u+f77c,u+f801,u+f814,u+f830,u+f845-f846,u+f850,u+f866,u+f875,u+f897,u+f89f,u+f8b1,u+f8bb,u+f8c7,u+f8d7,u+f8df-f8e0,u+f8ee,u+f8fd,u+10e010,u+10e01b,u+10e020-10e021,u+10e02f,u+10e03a,u+10e042,u+10e046,u+10e068,u+10e06e,u+10e074,u+10e076,u+10f008,u+10f018,u+10f01c,u+10f025,u+10f02a,u+10f02e,u+10f05b,u+10f06e,u+10f078,u+10f086,u+10f09c,u+10f0a3,u+10f0b1,u+10f0c6,u+10f0e7,u+10f0eb,u+10f0f8,u+10f11c,u+10f126,u+10f12c-10f12e,u+10f130-10f131,u+10f13d,u+10f140,u+10f155,u+10f164,u+10f1ae,u+10f1b2,u+10f1b8,u+10f1c1,u+10f1ce,u+10f1dc,u+10f1e5-10f1e6,u+10f1ec,u+10f1f9,u+10f219,u+10f21b,u+10f22d,u+10f234,u+10f246,u+10f24d,u+10f275,u+10f295,u+10f2b5,u+10f2cd,u+10f2d2,u+10f2fc,u+10f302,u+10f31a,u+10f363,u+10f3e5,u+10f3fb,u+10f44b,u+10f47d,u+10f48a,u+10f48f-10f490,u+10f494,u+10f498,u+10f4b7,u+10f4ca,u+10f4d7,u+10f508,u+10f51d-10f51e,u+10f521-10f522,u+10f530,u+10f535,u+10f53e,u+10f541,u+10f543-10f545,u+10f548,u+10f55d,u+10f564,u+10f56c,u+10f577-10f578,u+10f590,u+10f595,u+10f5a2,u+10f5b0,u+10f5ba,u+10f5bf,u+10f5ca,u+10f5ef,u+10f5f2,u+10f5fb,u+10f63b,u+10f649,u+10f653,u+10f65b,u+10f664,u+10f675,u+10f6bf-10f6c0,u+10f6d5,u+10f6f5,u+10f6fa,u+10f700,u+10f70b,u+10f70e,u+10f71b,u+10f72e-10f72f,u+10f733,u+10f747,u+10f75c,u+10f762,u+10f77c,u+10f801,u+10f814,u+10f830,u+10f845-10f846,u+10f850,u+10f866,u+10f875,u+10f897,u+10f89f,u+10f8b1,u+10f8bb,u+10f8c7,u+10f8d7,u+10f8df-10f8e0,u+10f8ee,u+10f8fd}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-bbafe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-bbafe9.ttf) format("truetype");unicode-range:u+20,u+f293,u+f2b4,u+f4e6,u+10f293,u+10f2b4,u+10f4e6}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-56ba33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-56ba33.ttf) format("truetype");unicode-range:u+20,u+e531}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-c046b6.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-c046b6.ttf) format("truetype");unicode-range:u+20,u+26-27,u+2a,u+30-39,u+40-42,u+60,u+102a,u+e059-e05a,u+e089-e08a,u+e08c-e08d,u+e08f-e0ac,u+e2dc,u+e2df,u+e2e1,u+e2e3-e2e6,u+e33a,u+e3d4-e3d8,u+e467-e468,u+e48c-e48f,u+e4aa-e4c2,u+f01e,u+f021,u+f036-f039,u+f047-f049,u+f05e,u+f069,u+f07d-f07e,u+f08b,u+f08e,u+f090,u+f0e2,u+f0ec,u+f100-f105,u+f107,u+f148-f149,u+f15d-f15e,u+f160-f163,u+f175-f178,u+f1fa,u+f245,u+f290,u+f2b9,u+f31d,u+f336,u+f33d-f33e,u+f340-f345,u+f34e,u+f361,u+f364,u+f366,u+f462,u+f464,u+f54d,u+f557,u+f5d1-f5d4,u+f616,u+f640,u+f644-f646,u+f666,u+f6ae,u+f6b0,u+f6b2-f6b4,u+f732,u+f779,u+f77d-f77e,u+f7e5,u+f7f9,u+f843-f844,u+f847,u+f881-f88f,u+f8a0-f8a3,u+f8f4-f8f6,u+10e059-10e05a,u+10f01e,u+10f021,u+10f036-10f039,u+10f047-10f049,u+10f05e,u+10f069,u+10f07d-10f07e,u+10f08b,u+10f08e,u+10f090,u+10f0e2,u+10f0ec,u+10f100-10f105,u+10f107,u+10f148-10f149,u+10f15d-10f15e,u+10f160-10f163,u+10f175-10f178,u+10f1fa,u+10f245,u+10f290,u+10f2b9,u+10f31d,u+10f336,u+10f33d-10f33e,u+10f340-10f345,u+10f34e,u+10f361,u+10f364,u+10f366,u+10f462,u+10f464,u+10f54d,u+10f557,u+10f5d1-10f5d4,u+10f616,u+10f640,u+10f644-10f646,u+10f666,u+10f6ae,u+10f6b0,u+10f6b2-10f6b4,u+10f732,u+10f779,u+10f77d-10f77e,u+10f7e5,u+10f7f9,u+10f843-10f844,u+10f847,u+10f881-10f88f,u+10f8a0-10f8a3,u+10f8f4-10f8f6}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-792d0c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-792d0c.ttf) format("truetype");unicode-range:u+20,u+28-29,u+43,u+5b,u+5d,u+7b,u+7d,u+e05b,u+e0ad-e0ce,u+e2e7-e2eb,u+e2f2,u+e33b-e33f,u+e3da-e3e4,u+e469-e46d,u+e490,u+e4c3-e4dc,u+f032,u+f0a1,u+f0fc,u+f187,u+f19c,u+f1e2,u+f1f6,u+f206-f207,u+f236,u+f240-f244,u+f291,u+f293,u+f2a1,u+f376-f377,u+f432-f434,u+f436-f438,u+f458,u+f465-f469,u+f487,u+f499-f49a,u+f49c-f49e,u+f4a0-f4a1,u+f517-f518,u+f51a,u+f550,u+f558,u+f55b-f55c,u+f55e,u+f562,u+f5d5-f5da,u+f5dd,u+f647-f648,u+f64b,u+f66a,u+f677,u+f687,u+f6b5-f6b9,u+f735,u+f77f-f780,u+f782,u+f7e6-f7ed,u+f7f1,u+f805,u+f823,u+f827-f828,u+f848-f849,u+f84c-f84f,u+f851-f854,u+f856-f857,u+f89c-f89d,u+f8a5,u+f8f7-f8fc,u+10e05b,u+10f032,u+10f0a1,u+10f0fc,u+10f187,u+10f19c,u+10f1e2,u+10f1f6,u+10f206-10f207,u+10f236,u+10f240-10f244,u+10f291,u+10f293,u+10f2a1,u+10f376-10f377,u+10f432-10f434,u+10f436-10f438,u+10f458,u+10f465-10f469,u+10f487,u+10f499-10f49a,u+10f49c-10f49e,u+10f4a0-10f4a1,u+10f517-10f518,u+10f51a,u+10f550,u+10f558,u+10f55b-10f55c,u+10f55e,u+10f562,u+10f5d5-10f5da,u+10f5dd,u+10f647-10f648,u+10f64b,u+10f66a,u+10f677,u+10f687,u+10f6b5-10f6b9,u+10f735,u+10f77f-10f780,u+10f782,u+10f7e6-10f7ed,u+10f7f1,u+10f805,u+10f823,u+10f827-10f828,u+10f848-10f849,u+10f84c-10f84f,u+10f851-10f854,u+10f856-10f857,u+10f89c-10f89d,u+10f8a5,u+10f8f7-10f8fc}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-16f2f9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-16f2f9.ttf) format("truetype");unicode-range:u+20,u+e000-e001,u+e0d?,u+e0e1-e105,u+e341-e344,u+e3e5-e3f7,u+e46e-e474,u+e4dd-e4e1,u+e59c-e59d,u+f053-f054,u+f058,u+f073,u+f07a,u+f080,u+f083,u+f0a8-f0ab,u+f0d8-f0da,u+f137-f13a,u+f1b9,u+f1fd-f1fe,u+f200-f201,u+f218,u+f271-f274,u+f322-f325,u+f32d-f32e,u+f330-f331,u+f333-f334,u+f439-f448,u+f46b,u+f474-f476,u+f51c,u+f55f-f560,u+f59d,u+f5de-f5e7,u+f643,u+f64c-f64e,u+f6a3,u+f6ba-f6be,u+f6c1,u+f736,u+f772,u+f783,u+f786-f787,u+f78a-f78b,u+f79e-f79f,u+f7da,u+f7ef-f7f0,u+f832-f833,u+f85a-f85b,u+f8a4,u+f8a7-f8a8,u+f8aa-f8ac,u+f8ec,u+f8fe-f8ff,u+10e000-10e001,u+10f053-10f054,u+10f058,u+10f073,u+10f07a,u+10f080,u+10f083,u+10f0a8-10f0ab,u+10f0d8-10f0da,u+10f137-10f13a,u+10f1b9,u+10f1fd-10f1fe,u+10f200-10f201,u+10f218,u+10f271-10f274,u+10f322-10f325,u+10f32d-10f32e,u+10f330-10f331,u+10f333-10f334,u+10f439-10f448,u+10f46b,u+10f474-10f476,u+10f51c,u+10f55f-10f560,u+10f59d,u+10f5de-10f5e7,u+10f643,u+10f64c-10f64e,u+10f6a3,u+10f6ba-10f6be,u+10f6c1,u+10f736,u+10f772,u+10f783,u+10f786-10f787,u+10f78a-10f78b,u+10f79e-10f79f,u+10f7da,u+10f7ef-10f7f0,u+10f832-10f833,u+10f85a-10f85b,u+10f8a4,u+10f8a7-10f8a8,u+10f8aa-10f8ac,u+10f8ec,u+10f8fe-10f8ff}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-3eb023.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-3eb023.ttf) format("truetype");unicode-range:u+20,u+2c,u+3a,u+e002-e003,u+e030-e032,u+e051,u+e106-e140,u+e142-e14f,u+e2f4-e2f6,u+e345-e35f,u+e361,u+e3f8-e3fd,u+e491-e492,u+e4e2-e4e4,u+f042,u+f055-f057,u+f059-f05a,u+f066,u+f06a,u+f0ed-f0ee,u+f144,u+f192,u+f1da,u+f28b,u+f28d,u+f2bd,u+f2e8,u+f327,u+f358-f35b,u+f381-f382,u+f386-f387,u+f46c-f46d,u+f47e,u+f4ac-f4b5,u+f4b9,u+f4c7,u+f51f,u+f568,u+f5e8-f5e9,u+f602,u+f615,u+f651,u+f6c2-f6c4,u+f6c6,u+f737-f746,u+f74e,u+f76c-f76e,u+f7ba,u+f7cd,u+f7f3,u+f7f5,u+f8ad-f8ae,u+f8b0,u+10e002-10e003,u+10e030-10e032,u+10e051,u+10f042,u+10f055-10f057,u+10f059-10f05a,u+10f066,u+10f06a,u+10f0ed-10f0ee,u+10f144,u+10f192,u+10f1da,u+10f28b,u+10f28d,u+10f2bd,u+10f2e8,u+10f327,u+10f358-10f35b,u+10f381-10f382,u+10f386-10f387,u+10f46c-10f46d,u+10f47e,u+10f4ac-10f4b5,u+10f4b9,u+10f4c7,u+10f51f,u+10f568,u+10f5e8-10f5e9,u+10f602,u+10f615,u+10f651,u+10f6c2-10f6c4,u+10f6c6,u+10f737-10f746,u+10f74e,u+10f76c-10f76e,u+10f7ba,u+10f7cd,u+10f7f3,u+10f7f5,u+10f8ad-10f8ae,u+10f8b0}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-b1cb49.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-b1cb49.ttf) format("truetype");unicode-range:u+20,u+22,u+3d,u+44-46,u+103d,u+e150-e152,u+e154-e158,u+e15a-e166,u+e168-e173,u+e2fa,u+e2fe,u+e362-e375,u+e3fe-e3ff,u+e401-e409,u+e475-e480,u+e4e5-e4e9,u+e59f,u+f043,u+f052,u+f070,u+f119,u+f125,u+f141-f142,u+f153,u+f1b3,u+f1fb,u+f2a2,u+f2a4,u+f2a8,u+f2b6,u+f309,u+f320,u+f326,u+f349-f34a,u+f354,u+f389-f38a,u+f39b-f39c,u+f422,u+f449-f44a,u+f46e-f46f,u+f471-f473,u+f4b8,u+f4ba,u+f520,u+f523-f52a,u+f52c,u+f542,u+f556,u+f55a,u+f563,u+f565,u+f567,u+f569-f56a,u+f579,u+f57c-f57e,u+f5c7,u+f5ea-f5ee,u+f5f0,u+f655,u+f657-f658,u+f674,u+f6b1,u+f6c5,u+f6c7-f6c8,u+f6cb,u+f6cd-f6d4,u+f6d6-f6db,u+f748-f749,u+f750,u+f78e-f78f,u+f792-f796,u+f7a2,u+f7f6-f7f8,u+f7fa-f7fc,u+f85f-f862,u+f8b3-f8b5,u+f8cc-f8cd,u+10f043,u+10f052,u+10f070,u+10f119,u+10f125,u+10f141-10f142,u+10f153,u+10f1b3,u+10f1fb,u+10f2a2,u+10f2a4,u+10f2a8,u+10f2b6,u+10f309,u+10f320,u+10f326,u+10f349-10f34a,u+10f354,u+10f389-10f38a,u+10f39b-10f39c,u+10f422,u+10f449-10f44a,u+10f46e-10f46f,u+10f471-10f473,u+10f4b8,u+10f4ba,u+10f520,u+10f523-10f52a,u+10f52c,u+10f542,u+10f556,u+10f55a,u+10f563,u+10f565,u+10f567,u+10f569-10f56a,u+10f579,u+10f57c-10f57e,u+10f5c7,u+10f5ea-10f5ee,u+10f5f0,u+10f655,u+10f657-10f658,u+10f674,u+10f6b1,u+10f6c5,u+10f6c7-10f6c8,u+10f6cb,u+10f6cd-10f6d4,u+10f6d6-10f6db,u+10f748-10f749,u+10f750,u+10f78e-10f78f,u+10f792-10f796,u+10f7a2,u+10f7f6-10f7f8,u+10f7fa-10f7fc,u+10f85f-10f862,u+10f8b3-10f8b5,u+10f8cc-10f8cd}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-493f48.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-493f48.ttf) format("truetype");unicode-range:u+20,u+e004-e006,u+e053-e054,u+e174-e18d,u+e2ff-e304,u+e376-e3a9,u+e40a-e40c,u+e481-e485,u+e493-e494,u+e4ea-e4eb,u+e4ed,u+e4ef-e4f3,u+e5a0-e5a1,u+f07c,u+f0c3,u+f0c7,u+f118,u+f11a,u+f134,u+f15c,u+f1ac,u+f1c4-f1c9,u+f317-f319,u+f31c,u+f3a0,u+f44c,u+f456,u+f46a,u+f477-f478,u+f4da,u+f52d,u+f56b,u+f56d,u+f571-f576,u+f57a,u+f57f-f58c,u+f596-f59c,u+f5a4-f5a5,u+f5b3-f5b4,u+f5b8-f5b9,u+f5c2,u+f5c8,u+f5f3,u+f659-f65a,u+f65c-f65d,u+f662,u+f6dd,u+f6df-f6e1,u+f74b-f74d,u+f79a,u+f7e4,u+f7fd-f7fe,u+f800,u+f863-f865,u+f877,u+f8b6-f8ba,u+10e004-10e006,u+10e053-10e054,u+10f07c,u+10f0c3,u+10f0c7,u+10f118,u+10f11a,u+10f134,u+10f15c,u+10f1ac,u+10f1c4-10f1c9,u+10f317-10f319,u+10f31c,u+10f3a0,u+10f44c,u+10f456,u+10f46a,u+10f477-10f478,u+10f4da,u+10f52d,u+10f56b,u+10f56d,u+10f571-10f576,u+10f57a,u+10f57f-10f58c,u+10f596-10f59c,u+10f5a4-10f5a5,u+10f5b3-10f5b4,u+10f5b8-10f5b9,u+10f5c2,u+10f5c8,u+10f5f3,u+10f659-10f65a,u+10f65c-10f65d,u+10f662,u+10f6dd,u+10f6df-10f6e1,u+10f74b-10f74d,u+10f79a,u+10f7e4,u+10f7fd-10f7fe,u+10f800,u+10f863-10f865,u+10f877,u+10f8b6-10f8ba}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-910f33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-910f33.ttf) format("truetype");unicode-range:u+20,u+3e,u+47-48,u+103e,u+e008-e00c,u+e05c-e05f,u+e061-e064,u+e18e-e1ad,u+e306-e307,u+e3aa-e3ad,u+e40d-e40e,u+e410-e417,u+e486,u+e495-e498,u+e4f4-e504,u+e5a2-e5a5,u+f013,u+f050-f051,u+f085,u+f0a0,u+f0a4-f0a5,u+f0a7,u+f0e3-f0e4,u+f11b,u+f19d,u+f1e3,u+f21e,u+f255-f25b,u+f2a3,u+f2b4,u+f2e3,u+f2e6,u+f307,u+f312-f315,u+f3a5,u+f3fd,u+f44e-f451,u+f461,u+f47a-f47c,u+f4bc-f4c6,u+f4e6,u+f52e-f52f,u+f531-f533,u+f58d-f58f,u+f5f4-f5f5,u+f624-f62d,u+f65e-f661,u+f663,u+f665,u+f684,u+f6de,u+f6e2,u+f6e4-f6e8,u+f6ea-f6eb,u+f79c-f79d,u+f7a3-f7a9,u+f802-f803,u+f806-f809,u+f867-f86b,u+f8bc-f8c2,u+10e008-10e00c,u+10e05c-10e05f,u+10e061-10e064,u+10f013,u+10f050-10f051,u+10f085,u+10f0a0,u+10f0a4-10f0a5,u+10f0a7,u+10f0e3-10f0e4,u+10f11b,u+10f19d,u+10f1e3,u+10f21e,u+10f255-10f25b,u+10f2a3,u+10f2b4,u+10f2e3,u+10f2e6,u+10f307,u+10f312-10f315,u+10f3a5,u+10f3fd,u+10f44e-10f451,u+10f461,u+10f47a-10f47c,u+10f4bc-10f4c6,u+10f4e6,u+10f52e-10f52f,u+10f531-10f533,u+10f58d-10f58f,u+10f5f4-10f5f5,u+10f624-10f62d,u+10f65e-10f661,u+10f663,u+10f665,u+10f684,u+10f6de,u+10f6e2,u+10f6e4-10f6e8,u+10f6ea-10f6eb,u+10f79c-10f79d,u+10f7a3-10f7a9,u+10f802-10f803,u+10f806-10f809,u+10f867-10f86b,u+10f8bc-10f8c2}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-25ee0f.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-25ee0f.ttf) format("truetype");unicode-range:u+20,u+2d,u+3c,u+49-4c,u+103c,u+e00d-e00f,u+e011-e012,u+e014-e016,u+e018-e019,u+e065-e066,u+e1ae-e1d4,u+e30c,u+e3ae-e3b6,u+e418-e421,u+e487,u+e505-e51e,u+e5a6-e5a7,u+f033,u+f03c,u+f094,u+f0ae,u+f0ca-f0cb,u+f0fb,u+f124,u+f127,u+f195,u+f1cd,u+f252-f254,u+f2c1-f2c2,u+f2e4,u+f2ee,u+f300,u+f30a,u+f30e,u+f310-f311,u+f337,u+f348,u+f34b,u+f355,u+f3b3,u+f3e0,u+f453-f454,u+f479,u+f47f,u+f4c9,u+f4cb,u+f534,u+f536-f537,u+f591,u+f593,u+f5f9,u+f5fc,u+f5fe-f601,u+f603,u+f605-f606,u+f667-f669,u+f66b-f672,u+f6ed-f6f4,u+f6f6-f6f7,u+f74f,u+f751-f752,u+f7aa-f7ae,u+f7f2,u+f80b,u+f80d-f812,u+f86c,u+f86f-f870,u+f87a,u+f8c3-f8c6,u+f8c8-f8c9,u+10e00d-10e00f,u+10e011-10e012,u+10e014-10e016,u+10e018-10e019,u+10e065-10e066,u+10f033,u+10f03c,u+10f094,u+10f0ae,u+10f0ca-10f0cb,u+10f0fb,u+10f124,u+10f127,u+10f195,u+10f1cd,u+10f252-10f254,u+10f2c1-10f2c2,u+10f2e4,u+10f2ee,u+10f300,u+10f30a,u+10f30e,u+10f310-10f311,u+10f337,u+10f348,u+10f34b,u+10f355,u+10f3b3,u+10f3e0,u+10f453-10f454,u+10f479,u+10f47f,u+10f4c9,u+10f4cb,u+10f534,u+10f536-10f537,u+10f591,u+10f593,u+10f5f9,u+10f5fc,u+10f5fe-10f601,u+10f603,u+10f605-10f606,u+10f667-10f669,u+10f66b-10f672,u+10f6ed-10f6f4,u+10f6f6-10f6f7,u+10f74f,u+10f751-10f752,u+10f7aa-10f7ae,u+10f7f2,u+10f80b,u+10f80d-10f812,u+10f86c,u+10f86f-10f870,u+10f87a,u+10f8c3-10f8c6,u+10f8c8-10f8c9}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-c238fb.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-c238fb.ttf) format("truetype");unicode-range:u+20,u+4d-4f,u+e067,u+e1d5-e205,u+e30f-e313,u+e316,u+e3b7-e3c1,u+e422-e426,u+e49a,u+e49c-e49f,u+e51f-e52f,u+e531-e532,u+e5a8,u+f000,u+f002,u+f00e,u+f010,u+f076,u+f0f4,u+f10b,u+f222-f224,u+f227,u+f229-f22c,u+f247-f249,u+f276,u+f279-f27a,u+f2f0,u+f301,u+f306,u+f308,u+f30d,u+f31e,u+f3c1-f3c2,u+f3c9,u+f3cd,u+f3cf,u+f3d1,u+f455,u+f4a2-f4ab,u+f4b6,u+f538-f53d,u+f561,u+f57b,u+f59f-f5a0,u+f5a6-f5a7,u+f604,u+f607-f60e,u+f610-f611,u+f613-f614,u+f630,u+f650,u+f652,u+f676,u+f678,u+f688-f689,u+f6f8-f6f9,u+f6fb-f6fe,u+f74a,u+f753-f754,u+f78c,u+f7b4-f7b5,u+f7b7,u+f7f4,u+f872-f874,u+f8af,u+f8cb,u+f8ce-f8d1,u+10e067,u+10f000,u+10f002,u+10f00e,u+10f010,u+10f076,u+10f0f4,u+10f10b,u+10f222-10f224,u+10f227,u+10f229-10f22c,u+10f247-10f249,u+10f276,u+10f279-10f27a,u+10f2f0,u+10f301,u+10f306,u+10f308,u+10f30d,u+10f31e,u+10f3c1-10f3c2,u+10f3c9,u+10f3cd,u+10f3cf,u+10f3d1,u+10f455,u+10f4a2-10f4ab,u+10f4b6,u+10f538-10f53d,u+10f561,u+10f57b,u+10f59f-10f5a0,u+10f5a6-10f5a7,u+10f604,u+10f607-10f60e,u+10f610-10f611,u+10f613-10f614,u+10f630,u+10f650,u+10f652,u+10f676,u+10f678,u+10f688-10f689,u+10f6f8-10f6f9,u+10f6fb-10f6fe,u+10f74a,u+10f753-10f754,u+10f78c,u+10f7b4-10f7b5,u+10f7b7,u+10f7f4,u+10f872-10f874,u+10f8af,u+10f8cb,u+10f8ce-10f8d1}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-cbbfb4.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-cbbfb4.ttf) format("truetype");unicode-range:u+20,u+2e,u+50,u+7c,u+e01c-e01d,u+e022-e023,u+e069,u+e206-e229,u+e22b-e22f,u+e317-e318,u+e31a-e31c,u+e31e-e31f,u+e3c2-e3c4,u+e427-e439,u+e43b-e43d,u+e4a1,u+e533-e54f,u+e551-e558,u+e55a-e560,u+e59e,u+e5a9-e5aa,u+f03b,u+f044,u+f0ea,u+f182-f183,u+f1b0,u+f1dd,u+f1fc,u+f29d,u+f2ce,u+f304-f305,u+f3dd-f3de,u+f470,u+f482-f484,u+f4cd-f4d0,u+f4d2-f4d3,u+f53f,u+f554,u+f5a9,u+f5ac-f5af,u+f5c4,u+f618,u+f679-f67a,u+f67c,u+f67e,u+f680,u+f683,u+f6ec,u+f701-f703,u+f705-f706,u+f70c,u+f756,u+f758-f759,u+f7b8,u+f7c5,u+f7c7-f7cb,u+f7ce,u+f7d1,u+f815-f818,u+f84a-f84b,u+f85e,u+f876,u+f878-f879,u+f87c,u+f8d3-f8d5,u+10e01c-10e01d,u+10e022-10e023,u+10e069,u+10e207,u+10f03b,u+10f044,u+10f0ea,u+10f182-10f183,u+10f1b0,u+10f1dd,u+10f1fc,u+10f29d,u+10f2ce,u+10f304-10f305,u+10f3dd-10f3de,u+10f470,u+10f482-10f484,u+10f4cd-10f4d0,u+10f4d2-10f4d3,u+10f53f,u+10f554,u+10f5a9,u+10f5ac-10f5af,u+10f5c4,u+10f618,u+10f679-10f67a,u+10f67c,u+10f67e,u+10f680,u+10f683,u+10f6ec,u+10f701-10f703,u+10f705-10f706,u+10f70c,u+10f756,u+10f758-10f759,u+10f7b8,u+10f7c5,u+10f7c7-10f7cb,u+10f7ce,u+10f7d1,u+10f815-10f818,u+10f84a-10f84b,u+10f85e,u+10f876,u+10f878-10f879,u+10f87c,u+10f8d3-10f8d5}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-aa90b0.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-aa90b0.ttf) format("truetype");unicode-range:u+20,u+3b,u+51-53,u+e025-e02c,u+e06a-e06c,u+e070,u+e231,u+e234-e244,u+e246-e24f,u+e2d2,u+e322-e324,u+e3c5-e3c9,u+e43e-e449,u+e4a2-e4a5,u+e561-e56f,u+e571-e575,u+e5ab,u+f022,u+f029,u+f074,u+f079,u+f09e,u+f0c4,u+f10d,u+f122,u+f14d,u+f156,u+f158,u+f197,u+f1e0,u+f20b,u+f24e,u+f2ea,u+f2f1,u+f2f5-f2f6,u+f2f8-f2fb,u+f2fe,u+f30b,u+f347,u+f34c,u+f356,u+f362,u+f365,u+f367,u+f3ed,u+f410,u+f45a-f45b,u+f463,u+f480,u+f485-f486,u+f488-f489,u+f4d4,u+f4d6,u+f4d9,u+f515-f516,u+f546-f547,u+f54a-f54b,u+f54f,u+f553,u+f5b1,u+f619-f61f,u+f63d,u+f641,u+f685-f686,u+f68a-f68b,u+f690-f694,u+f6a0,u+f707-f70a,u+f70d,u+f70f-f713,u+f75a-f75b,u+f75e,u+f7b9,u+f7be-f7c3,u+f7d9,u+f819-f822,u+f87e-f87f,u+f8d8,u+f8da-f8dc,u+f8f3,u+10e025-10e02c,u+10e06a-10e06c,u+10e070,u+10f022,u+10f029,u+10f074,u+10f079,u+10f09e,u+10f0c4,u+10f10d,u+10f122,u+10f14d,u+10f156,u+10f158,u+10f197,u+10f1e0,u+10f20b,u+10f24e,u+10f2ea,u+10f2f1,u+10f2f5-10f2f6,u+10f2f8-10f2fb,u+10f2fe,u+10f30b,u+10f347,u+10f34c,u+10f356,u+10f362,u+10f365,u+10f367,u+10f3ed,u+10f410,u+10f45a-10f45b,u+10f463,u+10f480,u+10f485-10f486,u+10f488-10f489,u+10f4d4,u+10f4d6,u+10f4d9,u+10f515-10f516,u+10f546-10f547,u+10f54a-10f54b,u+10f54f,u+10f553,u+10f5b1,u+10f619-10f61f,u+10f63d,u+10f641,u+10f685-10f686,u+10f68a-10f68b,u+10f690-10f694,u+10f6a0,u+10f707-10f70a,u+10f70d,u+10f70f-10f713,u+10f75a-10f75b,u+10f75e,u+10f7b9,u+10f7be-10f7c3,u+10f7d9,u+10f819-10f822,u+10f87e-10f87f,u+10f8d8,u+10f8da-10f8dc,u+10f8f3}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-9d9a2c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-9d9a2c.ttf) format("truetype");unicode-range:u+20,u+2f,u+5c,u+e02d-e02e,u+e033-e039,u+e06d,u+e06f,u+e071,u+e250-e28e,u+e329-e32b,u+e3ca-e3ce,u+e400,u+e44b-e450,u+e488-e489,u+e4a6,u+e576-e579,u+e5af,u+f089,u+f098,u+f0dd-f0de,u+f0f1,u+f0fd-f0fe,u+f143,u+f146,u+f14a-f14c,u+f150-f152,u+f154,u+f191,u+f199,u+f1de,u+f1e1,u+f277,u+f2d3,u+f2dc,u+f2e5,u+f2e9,u+f2f2-f2f4,u+f2fd,u+f30f,u+f321,u+f329-f32c,u+f339-f33c,u+f350-f353,u+f360,u+f3f0-f3f2,u+f45c,u+f48d,u+f49b,u+f49f,u+f4c8,u+f540,u+f54c,u+f551,u+f5bb-f5bd,u+f5c0,u+f5d0,u+f617,u+f620,u+f622-f623,u+f67b,u+f681-f682,u+f68c-f68f,u+f696-f69a,u+f714,u+f716-f71a,u+f75f-f761,u+f79b,u+f7c4,u+f7cc,u+f7cf-f7d0,u+f7d2,u+f7d4,u+f824-f825,u+f87b,u+f880,u+f890-f891,u+f8dd-f8de,u+10e02d-10e02e,u+10e033-10e039,u+10e06d,u+10e06f,u+10e071,u+10f089,u+10f098,u+10f0dd-10f0de,u+10f0f1,u+10f0fd-10f0fe,u+10f143,u+10f146,u+10f14a-10f14c,u+10f150-10f152,u+10f154,u+10f191,u+10f199,u+10f1de,u+10f1e1,u+10f277,u+10f2d3,u+10f2dc,u+10f2e5,u+10f2e9,u+10f2f2-10f2f4,u+10f2fd,u+10f30f,u+10f321,u+10f329-10f32c,u+10f339-10f33c,u+10f350-10f353,u+10f360,u+10f3f0-10f3f2,u+10f45c,u+10f48d,u+10f49b,u+10f49f,u+10f4c8,u+10f540,u+10f54c,u+10f551,u+10f5bb-10f5bd,u+10f5c0,u+10f5d0,u+10f617,u+10f620,u+10f622-10f623,u+10f67b,u+10f681-10f682,u+10f68c-10f68f,u+10f696-10f69a,u+10f714,u+10f716-10f71a,u+10f75f-10f761,u+10f79b,u+10f7c4,u+10f7cc,u+10f7cf-10f7d0,u+10f7d2,u+10f7d4,u+10f824-10f825,u+10f87b,u+10f880,u+10f890-10f891,u+10f8dd-10f8de}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-f064f7.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-f064f7.ttf) format("truetype");unicode-range:u+20,u+54,u+7e,u+107e,u+e03b-e041,u+e043-e044,u+e072,u+e28f-e2ba,u+e32d-e330,u+e3cf-e3d0,u+e451-e454,u+e48a-e48b,u+e57a-e58f,u+e5b0-e5b4,u+f009-f00b,u+f02b,u+f034-f035,u+f071,u+f08d,u+f0db,u+f0f2,u+f0f9-f0fa,u+f10a,u+f120,u+f12b,u+f165,u+f185,u+f1ba,u+f204,u+f225,u+f239,u+f25c,u+f2c7-f2cb,u+f2eb,u+f2ed,u+f3fa,u+f3fc,u+f3ff-f400,u+f45d-f45e,u+f48b-f48c,u+f48e,u+f491,u+f4db-f4e0,u+f519,u+f552,u+f566,u+f5c1,u+f5c3,u+f5c9,u+f62e-f62f,u+f631-f63a,u+f63c,u+f69b,u+f69e-f69f,u+f6a1,u+f71c-f725,u+f763-f76b,u+f76f,u+f7d7-f7d8,u+f7db-f7de,u+f826,u+f829-f82b,u+f85d,u+f86e,u+f87d,u+f892,u+f895-f896,u+f8e2-f8e3,u+10e03b-10e041,u+10e043-10e044,u+10e072,u+10f009-10f00b,u+10f02b,u+10f034-10f035,u+10f071,u+10f08d,u+10f0db,u+10f0f2,u+10f0f9-10f0fa,u+10f10a,u+10f120,u+10f12b,u+10f165,u+10f185,u+10f1ba,u+10f204,u+10f225,u+10f239,u+10f25c,u+10f2c7-10f2cb,u+10f2eb,u+10f2ed,u+10f3fa,u+10f3fc,u+10f3ff-10f400,u+10f45d-10f45e,u+10f48b-10f48c,u+10f48e,u+10f491,u+10f4db-10f4e0,u+10f519,u+10f552,u+10f566,u+10f5c1,u+10f5c3,u+10f5c9,u+10f62e-10f62f,u+10f631-10f63a,u+10f63c,u+10f69b,u+10f69e-10f69f,u+10f6a1,u+10f71c-10f725,u+10f763-10f76b,u+10f76f,u+10f7d7-10f7d8,u+10f7db-10f7de,u+10f826,u+10f829-10f82b,u+10f85d,u+10f86e,u+10f87d,u+10f892,u+10f895-10f896,u+10f8e2-10f8e3}@font-face{font-family:"Font Awesome 6 Duotone";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-b1cf62.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-b1cf62.ttf) format("truetype");unicode-range:u+20,u+55-5a,u+e047-e048,u+e04a-e050,u+e058,u+e073,u+e075,u+e085-e086,u+e2bb-e2cf,u+e2d1,u+e331,u+e333-e334,u+e337-e339,u+e3d1-e3d3,u+e455-e466,u+e4a7-e4a9,u+e590-e59b,u+f00d,u+f026-f028,u+f0b2,u+f0cd,u+f0d0,u+f0e9,u+f0f0,u+f13e,u+f157,u+f159,u+f193,u+f221,u+f226,u+f228,u+f235,u+f26c,u+f29a,u+f2d0-f2d1,u+f2e2,u+f2e7,u+f30c,u+f338,u+f346,u+f34d,u+f357,u+f35d,u+f3be-f3bf,u+f401,u+f406,u+f40f,u+f424,u+f45f-f460,u+f492,u+f495-f497,u+f4bb,u+f4e1,u+f4e3,u+f4fa-f502,u+f504-f507,u+f509,u+f5b6,u+f5c5,u+f5cb,u+f5cd-f5ce,u+f5f8,u+f63e,u+f6a2,u+f6a4-f6a7,u+f6a9-f6ad,u+f726-f72d,u+f770-f771,u+f774-f777,u+f7a0-f7a1,u+f7e2,u+f82c-f82e,u+f831,u+f83e,u+f898-f89b,u+f8e4-f8e6,u+f8e9-f8eb,u+f8ed,u+f8f0-f8f2,u+10e047-10e048,u+10e04a-10e050,u+10e058,u+10e073,u+10e075,u+10e085-10e086,u+10f00d,u+10f026-10f028,u+10f0b2,u+10f0cd,u+10f0d0,u+10f0e9,u+10f0f0,u+10f13e,u+10f157,u+10f159,u+10f193,u+10f221,u+10f226,u+10f228,u+10f235,u+10f26c,u+10f29a,u+10f2d0-10f2d1,u+10f2e2,u+10f2e7,u+10f30c,u+10f338,u+10f346,u+10f34d,u+10f357,u+10f35d,u+10f3be-10f3bf,u+10f401,u+10f406,u+10f40f,u+10f424,u+10f45f-10f460,u+10f492,u+10f495-10f497,u+10f4bb,u+10f4e1,u+10f4e3,u+10f4fa-10f502,u+10f504-10f507,u+10f509,u+10f5b6,u+10f5c5,u+10f5cb,u+10f5cd-10f5ce,u+10f5f8,u+10f63e,u+10f6a2,u+10f6a4-10f6a7,u+10f6a9-10f6ad,u+10f726-10f72d,u+10f770-10f771,u+10f774-10f777,u+10f7a0-10f7a1,u+10f7e2,u+10f82c-10f82e,u+10f831,u+10f83e,u+10f898-10f89b,u+10f8e4-10f8e6,u+10f8e9-10f8eb,u+10f8ed,u+10f8f0-10f8f2}.fa-duotone,.fad{position:relative;font-family:"Font Awesome 6 Duotone";font-weight:900;letter-spacing:normal}.fa-duotone:before,.fad:before{position:absolute;color:var(--fa-primary-color,inherit);opacity:var(--fa-primary-opacity,1)}.fa-duotone:after,.fad:after{color:var(--fa-secondary-color,inherit)}.fa-duotone.fa-swap-opacity:before,.fa-duotone:after,.fa-swap-opacity .fa-duotone:before,.fa-swap-opacity .fad:before,.fad.fa-swap-opacity:before,.fad:after{opacity:var(--fa-secondary-opacity,.4)}.fa-duotone.fa-swap-opacity:after,.fa-swap-opacity .fa-duotone:after,.fa-swap-opacity .fad:after,.fad.fa-swap-opacity:after{opacity:var(--fa-primary-opacity,1)}.fa-duotone.fa-inverse,.fad.fa-inverse{color:var(--fa-inverse,#fff)}.fa-duotone.fa-stack-1x,.fa-duotone.fa-stack-2x,.fad.fa-stack-1x,.fad.fa-stack-2x{position:absolute}.fa-duotone.fa-0:after,.fad.fa-0:after{content:"\30\30"}.fa-duotone.fa-1:after,.fad.fa-1:after{content:"\31\31"}.fa-duotone.fa-2:after,.fad.fa-2:after{content:"\32\32"}.fa-duotone.fa-3:after,.fad.fa-3:after{content:"\33\33"}.fa-duotone.fa-4:after,.fad.fa-4:after{content:"\34\34"}.fa-duotone.fa-5:after,.fad.fa-5:after{content:"\35\35"}.fa-duotone.fa-6:after,.fad.fa-6:after{content:"\36\36"}.fa-duotone.fa-7:after,.fad.fa-7:after{content:"\37\37"}.fa-duotone.fa-8:after,.fad.fa-8:after{content:"\38\38"}.fa-duotone.fa-9:after,.fad.fa-9:after{content:"\39\39"}.fa-duotone.fa-00:after,.fad.fa-00:after{content:"\e467\e467"}.fa-duotone.fa-360-degrees:after,.fad.fa-360-degrees:after{content:"\e2dc\e2dc"}.fa-duotone.fa-a:after,.fad.fa-a:after{content:"\41\41"}.fa-duotone.fa-abacus:after,.fad.fa-abacus:after{content:"\f640\f640"}.fa-duotone.fa-accent-grave:after,.fad.fa-accent-grave:after{content:"\60\60"}.fa-duotone.fa-acorn:after,.fad.fa-acorn:after{content:"\f6ae\f6ae"}.fa-duotone.fa-address-book:after,.fa-duotone.fa-contact-book:after,.fad.fa-address-book:after,.fad.fa-contact-book:after{content:"\f2b9\f2b9"}.fa-duotone.fa-address-card:after,.fa-duotone.fa-contact-card:after,.fa-duotone.fa-vcard:after,.fad.fa-address-card:after,.fad.fa-contact-card:after,.fad.fa-vcard:after{content:"\f2bb\f2bb"}.fa-duotone.fa-air-conditioner:after,.fad.fa-air-conditioner:after{content:"\f8f4\f8f4"}.fa-duotone.fa-airplay:after,.fad.fa-airplay:after{content:"\e089\e089"}.fa-duotone.fa-alarm-clock:after,.fad.fa-alarm-clock:after{content:"\f34e\f34e"}.fa-duotone.fa-alarm-exclamation:after,.fad.fa-alarm-exclamation:after{content:"\f843\f843"}.fa-duotone.fa-alarm-plus:after,.fad.fa-alarm-plus:after{content:"\f844\f844"}.fa-duotone.fa-alarm-snooze:after,.fad.fa-alarm-snooze:after{content:"\f845\f845"}.fa-duotone.fa-album:after,.fad.fa-album:after{content:"\f89f\f89f"}.fa-duotone.fa-album-circle-plus:after,.fad.fa-album-circle-plus:after{content:"\e48c\e48c"}.fa-duotone.fa-album-circle-user:after,.fad.fa-album-circle-user:after{content:"\e48d\e48d"}.fa-duotone.fa-album-collection:after,.fad.fa-album-collection:after{content:"\f8a0\f8a0"}.fa-duotone.fa-album-collection-circle-plus:after,.fad.fa-album-collection-circle-plus:after{content:"\e48e\e48e"}.fa-duotone.fa-album-collection-circle-user:after,.fad.fa-album-collection-circle-user:after{content:"\e48f\e48f"}.fa-duotone.fa-alicorn:after,.fad.fa-alicorn:after{content:"\f6b0\f6b0"}.fa-duotone.fa-alien:after,.fad.fa-alien:after{content:"\f8f5\f8f5"}.fa-duotone.fa-alien-8bit:after,.fa-duotone.fa-alien-monster:after,.fad.fa-alien-8bit:after,.fad.fa-alien-monster:after{content:"\f8f6\f8f6"}.fa-duotone.fa-align-center:after,.fad.fa-align-center:after{content:"\f037\f037"}.fa-duotone.fa-align-justify:after,.fad.fa-align-justify:after{content:"\f039\f039"}.fa-duotone.fa-align-left:after,.fad.fa-align-left:after{content:"\f036\f036"}.fa-duotone.fa-align-right:after,.fad.fa-align-right:after{content:"\f038\f038"}.fa-duotone.fa-align-slash:after,.fad.fa-align-slash:after{content:"\f846\f846"}.fa-duotone.fa-alt:after,.fad.fa-alt:after{content:"\e08a\e08a"}.fa-duotone.fa-amp-guitar:after,.fad.fa-amp-guitar:after{content:"\f8a1\f8a1"}.fa-duotone.fa-ampersand:after,.fad.fa-ampersand:after{content:"\26\26"}.fa-duotone.fa-anchor:after,.fad.fa-anchor:after{content:"\f13d\f13d"}.fa-duotone.fa-anchor-circle-check:after,.fad.fa-anchor-circle-check:after{content:"\e4aa\e4aa"}.fa-duotone.fa-anchor-circle-exclamation:after,.fad.fa-anchor-circle-exclamation:after{content:"\e4ab\e4ab"}.fa-duotone.fa-anchor-circle-xmark:after,.fad.fa-anchor-circle-xmark:after{content:"\e4ac\e4ac"}.fa-duotone.fa-anchor-lock:after,.fad.fa-anchor-lock:after{content:"\e4ad\e4ad"}.fa-duotone.fa-angel:after,.fad.fa-angel:after{content:"\f779\f779"}.fa-duotone.fa-angle:after,.fad.fa-angle:after{content:"\e08c\e08c"}.fa-duotone.fa-angle-90:after,.fad.fa-angle-90:after{content:"\e08d\e08d"}.fa-duotone.fa-angle-down:after,.fad.fa-angle-down:after{content:"\f107\f107"}.fa-duotone.fa-angle-left:after,.fad.fa-angle-left:after{content:"\f104\f104"}.fa-duotone.fa-angle-right:after,.fad.fa-angle-right:after{content:"\f105\f105"}.fa-duotone.fa-angle-up:after,.fad.fa-angle-up:after{content:"\f106\f106"}.fa-duotone.fa-angle-double-down:after,.fa-duotone.fa-angles-down:after,.fad.fa-angle-double-down:after,.fad.fa-angles-down:after{content:"\f103\f103"}.fa-duotone.fa-angle-double-left:after,.fa-duotone.fa-angles-left:after,.fad.fa-angle-double-left:after,.fad.fa-angles-left:after{content:"\f100\f100"}.fa-duotone.fa-angle-double-right:after,.fa-duotone.fa-angles-right:after,.fad.fa-angle-double-right:after,.fad.fa-angles-right:after{content:"\f101\f101"}.fa-duotone.fa-angle-double-up:after,.fa-duotone.fa-angles-up:after,.fad.fa-angle-double-up:after,.fad.fa-angles-up:after{content:"\f102\f102"}.fa-duotone.fa-ankh:after,.fad.fa-ankh:after{content:"\f644\f644"}.fa-duotone.fa-apartment:after,.fad.fa-apartment:after{content:"\e468\e468"}.fa-duotone.fa-aperture:after,.fad.fa-aperture:after{content:"\e2df\e2df"}.fa-duotone.fa-apostrophe:after,.fad.fa-apostrophe:after{content:"\27\27"}.fa-duotone.fa-apple-core:after,.fad.fa-apple-core:after{content:"\e08f\e08f"}.fa-duotone.fa-apple-alt:after,.fa-duotone.fa-apple-whole:after,.fad.fa-apple-alt:after,.fad.fa-apple-whole:after{content:"\f5d1\f5d1"}.fa-duotone.fa-archway:after,.fad.fa-archway:after{content:"\f557\f557"}.fa-duotone.fa-arrow-down:after,.fad.fa-arrow-down:after{content:"\f063\f063"}.fa-duotone.fa-arrow-down-1-9:after,.fa-duotone.fa-sort-numeric-asc:after,.fa-duotone.fa-sort-numeric-down:after,.fad.fa-arrow-down-1-9:after,.fad.fa-sort-numeric-asc:after,.fad.fa-sort-numeric-down:after{content:"\f162\f162"}.fa-duotone.fa-arrow-down-9-1:after,.fa-duotone.fa-sort-numeric-desc:after,.fa-duotone.fa-sort-numeric-down-alt:after,.fad.fa-arrow-down-9-1:after,.fad.fa-sort-numeric-desc:after,.fad.fa-sort-numeric-down-alt:after{content:"\f886\f886"}.fa-duotone.fa-arrow-down-a-z:after,.fa-duotone.fa-sort-alpha-asc:after,.fa-duotone.fa-sort-alpha-down:after,.fad.fa-arrow-down-a-z:after,.fad.fa-sort-alpha-asc:after,.fad.fa-sort-alpha-down:after{content:"\f15d\f15d"}.fa-duotone.fa-arrow-down-arrow-up:after,.fa-duotone.fa-sort-alt:after,.fad.fa-arrow-down-arrow-up:after,.fad.fa-sort-alt:after{content:"\f883\f883"}.fa-duotone.fa-arrow-down-big-small:after,.fa-duotone.fa-sort-size-down:after,.fad.fa-arrow-down-big-small:after,.fad.fa-sort-size-down:after{content:"\f88c\f88c"}.fa-duotone.fa-arrow-down-from-dotted-line:after,.fad.fa-arrow-down-from-dotted-line:after{content:"\e090\e090"}.fa-duotone.fa-arrow-down-from-line:after,.fa-duotone.fa-arrow-from-top:after,.fad.fa-arrow-down-from-line:after,.fad.fa-arrow-from-top:after{content:"\f345\f345"}.fa-duotone.fa-arrow-down-left:after,.fad.fa-arrow-down-left:after{content:"\e091\e091"}.fa-duotone.fa-arrow-down-left-and-arrow-up-right-to-center:after,.fad.fa-arrow-down-left-and-arrow-up-right-to-center:after{content:"\e092\e092"}.fa-duotone.fa-arrow-down-long:after,.fa-duotone.fa-long-arrow-down:after,.fad.fa-arrow-down-long:after,.fad.fa-long-arrow-down:after{content:"\f175\f175"}.fa-duotone.fa-arrow-down-right:after,.fad.fa-arrow-down-right:after{content:"\e093\e093"}.fa-duotone.fa-arrow-down-short-wide:after,.fa-duotone.fa-sort-amount-desc:after,.fa-duotone.fa-sort-amount-down-alt:after,.fad.fa-arrow-down-short-wide:after,.fad.fa-sort-amount-desc:after,.fad.fa-sort-amount-down-alt:after{content:"\f884\f884"}.fa-duotone.fa-arrow-down-small-big:after,.fa-duotone.fa-sort-size-down-alt:after,.fad.fa-arrow-down-small-big:after,.fad.fa-sort-size-down-alt:after{content:"\f88d\f88d"}.fa-duotone.fa-arrow-down-square-triangle:after,.fa-duotone.fa-sort-shapes-down-alt:after,.fad.fa-arrow-down-square-triangle:after,.fad.fa-sort-shapes-down-alt:after{content:"\f889\f889"}.fa-duotone.fa-arrow-down-to-arc:after,.fad.fa-arrow-down-to-arc:after{content:"\e4ae\e4ae"}.fa-duotone.fa-arrow-down-to-bracket:after,.fad.fa-arrow-down-to-bracket:after{content:"\e094\e094"}.fa-duotone.fa-arrow-down-to-dotted-line:after,.fad.fa-arrow-down-to-dotted-line:after{content:"\e095\e095"}.fa-duotone.fa-arrow-down-to-line:after,.fa-duotone.fa-arrow-to-bottom:after,.fad.fa-arrow-down-to-line:after,.fad.fa-arrow-to-bottom:after{content:"\f33d\f33d"}.fa-duotone.fa-arrow-down-to-square:after,.fad.fa-arrow-down-to-square:after{content:"\e096\e096"}.fa-duotone.fa-arrow-down-triangle-square:after,.fa-duotone.fa-sort-shapes-down:after,.fad.fa-arrow-down-triangle-square:after,.fad.fa-sort-shapes-down:after{content:"\f888\f888"}.fa-duotone.fa-arrow-down-up-across-line:after,.fad.fa-arrow-down-up-across-line:after{content:"\e4af\e4af"}.fa-duotone.fa-arrow-down-up-lock:after,.fad.fa-arrow-down-up-lock:after{content:"\e4b0\e4b0"}.fa-duotone.fa-arrow-down-wide-short:after,.fa-duotone.fa-sort-amount-asc:after,.fa-duotone.fa-sort-amount-down:after,.fad.fa-arrow-down-wide-short:after,.fad.fa-sort-amount-asc:after,.fad.fa-sort-amount-down:after{content:"\f160\f160"}.fa-duotone.fa-arrow-down-z-a:after,.fa-duotone.fa-sort-alpha-desc:after,.fa-duotone.fa-sort-alpha-down-alt:after,.fad.fa-arrow-down-z-a:after,.fad.fa-sort-alpha-desc:after,.fad.fa-sort-alpha-down-alt:after{content:"\f881\f881"}.fa-duotone.fa-arrow-left:after,.fad.fa-arrow-left:after{content:"\f060\f060"}.fa-duotone.fa-arrow-from-right:after,.fa-duotone.fa-arrow-left-from-line:after,.fad.fa-arrow-from-right:after,.fad.fa-arrow-left-from-line:after{content:"\f344\f344"}.fa-duotone.fa-arrow-left-long:after,.fa-duotone.fa-long-arrow-left:after,.fad.fa-arrow-left-long:after,.fad.fa-long-arrow-left:after{content:"\f177\f177"}.fa-duotone.fa-arrow-left-long-to-line:after,.fad.fa-arrow-left-long-to-line:after{content:"\e3d4\e3d4"}.fa-duotone.fa-arrow-left-to-line:after,.fa-duotone.fa-arrow-to-left:after,.fad.fa-arrow-left-to-line:after,.fad.fa-arrow-to-left:after{content:"\f33e\f33e"}.fa-duotone.fa-arrow-pointer:after,.fa-duotone.fa-mouse-pointer:after,.fad.fa-arrow-pointer:after,.fad.fa-mouse-pointer:after{content:"\f245\f245"}.fa-duotone.fa-arrow-right:after,.fad.fa-arrow-right:after{content:"\f061\f061"}.fa-duotone.fa-arrow-right-arrow-left:after,.fa-duotone.fa-exchange:after,.fad.fa-arrow-right-arrow-left:after,.fad.fa-exchange:after{content:"\f0ec\f0ec"}.fa-duotone.fa-arrow-right-from-arc:after,.fad.fa-arrow-right-from-arc:after{content:"\e4b1\e4b1"}.fa-duotone.fa-arrow-right-from-bracket:after,.fa-duotone.fa-sign-out:after,.fad.fa-arrow-right-from-bracket:after,.fad.fa-sign-out:after{content:"\f08b\f08b"}.fa-duotone.fa-arrow-from-left:after,.fa-duotone.fa-arrow-right-from-line:after,.fad.fa-arrow-from-left:after,.fad.fa-arrow-right-from-line:after{content:"\f343\f343"}.fa-duotone.fa-arrow-right-long:after,.fa-duotone.fa-long-arrow-right:after,.fad.fa-arrow-right-long:after,.fad.fa-long-arrow-right:after{content:"\f178\f178"}.fa-duotone.fa-arrow-right-long-to-line:after,.fad.fa-arrow-right-long-to-line:after{content:"\e3d5\e3d5"}.fa-duotone.fa-arrow-right-to-arc:after,.fad.fa-arrow-right-to-arc:after{content:"\e4b2\e4b2"}.fa-duotone.fa-arrow-right-to-bracket:after,.fa-duotone.fa-sign-in:after,.fad.fa-arrow-right-to-bracket:after,.fad.fa-sign-in:after{content:"\f090\f090"}.fa-duotone.fa-arrow-right-to-city:after,.fad.fa-arrow-right-to-city:after{content:"\e4b3\e4b3"}.fa-duotone.fa-arrow-right-to-line:after,.fa-duotone.fa-arrow-to-right:after,.fad.fa-arrow-right-to-line:after,.fad.fa-arrow-to-right:after{content:"\f340\f340"}.fa-duotone.fa-arrow-left-rotate:after,.fa-duotone.fa-arrow-rotate-back:after,.fa-duotone.fa-arrow-rotate-backward:after,.fa-duotone.fa-arrow-rotate-left:after,.fa-duotone.fa-undo:after,.fad.fa-arrow-left-rotate:after,.fad.fa-arrow-rotate-back:after,.fad.fa-arrow-rotate-backward:after,.fad.fa-arrow-rotate-left:after,.fad.fa-undo:after{content:"\f0e2\f0e2"}.fa-duotone.fa-arrow-right-rotate:after,.fa-duotone.fa-arrow-rotate-forward:after,.fa-duotone.fa-arrow-rotate-right:after,.fa-duotone.fa-redo:after,.fad.fa-arrow-right-rotate:after,.fad.fa-arrow-rotate-forward:after,.fad.fa-arrow-rotate-right:after,.fad.fa-redo:after{content:"\f01e\f01e"}.fa-duotone.fa-arrow-trend-down:after,.fad.fa-arrow-trend-down:after{content:"\e097\e097"}.fa-duotone.fa-arrow-trend-up:after,.fad.fa-arrow-trend-up:after{content:"\e098\e098"}.fa-duotone.fa-arrow-turn-down:after,.fa-duotone.fa-level-down:after,.fad.fa-arrow-turn-down:after,.fad.fa-level-down:after{content:"\f149\f149"}.fa-duotone.fa-arrow-turn-down-left:after,.fad.fa-arrow-turn-down-left:after{content:"\e2e1\e2e1"}.fa-duotone.fa-arrow-turn-down-right:after,.fad.fa-arrow-turn-down-right:after{content:"\e3d6\e3d6"}.fa-duotone.fa-arrow-turn-up:after,.fa-duotone.fa-level-up:after,.fad.fa-arrow-turn-up:after,.fad.fa-level-up:after{content:"\f148\f148"}.fa-duotone.fa-arrow-up:after,.fad.fa-arrow-up:after{content:"\f062\f062"}.fa-duotone.fa-arrow-up-1-9:after,.fa-duotone.fa-sort-numeric-up:after,.fad.fa-arrow-up-1-9:after,.fad.fa-sort-numeric-up:after{content:"\f163\f163"}.fa-duotone.fa-arrow-up-9-1:after,.fa-duotone.fa-sort-numeric-up-alt:after,.fad.fa-arrow-up-9-1:after,.fad.fa-sort-numeric-up-alt:after{content:"\f887\f887"}.fa-duotone.fa-arrow-up-a-z:after,.fa-duotone.fa-sort-alpha-up:after,.fad.fa-arrow-up-a-z:after,.fad.fa-sort-alpha-up:after{content:"\f15e\f15e"}.fa-duotone.fa-arrow-up-arrow-down:after,.fa-duotone.fa-sort-up-down:after,.fad.fa-arrow-up-arrow-down:after,.fad.fa-sort-up-down:after{content:"\e099\e099"}.fa-duotone.fa-arrow-up-big-small:after,.fa-duotone.fa-sort-size-up:after,.fad.fa-arrow-up-big-small:after,.fad.fa-sort-size-up:after{content:"\f88e\f88e"}.fa-duotone.fa-arrow-up-from-arc:after,.fad.fa-arrow-up-from-arc:after{content:"\e4b4\e4b4"}.fa-duotone.fa-arrow-up-from-bracket:after,.fad.fa-arrow-up-from-bracket:after{content:"\e09a\e09a"}.fa-duotone.fa-arrow-up-from-dotted-line:after,.fad.fa-arrow-up-from-dotted-line:after{content:"\e09b\e09b"}.fa-duotone.fa-arrow-up-from-ground-water:after,.fad.fa-arrow-up-from-ground-water:after{content:"\e4b5\e4b5"}.fa-duotone.fa-arrow-from-bottom:after,.fa-duotone.fa-arrow-up-from-line:after,.fad.fa-arrow-from-bottom:after,.fad.fa-arrow-up-from-line:after{content:"\f342\f342"}.fa-duotone.fa-arrow-up-from-square:after,.fad.fa-arrow-up-from-square:after{content:"\e09c\e09c"}.fa-duotone.fa-arrow-up-from-water-pump:after,.fad.fa-arrow-up-from-water-pump:after{content:"\e4b6\e4b6"}.fa-duotone.fa-arrow-up-left:after,.fad.fa-arrow-up-left:after{content:"\e09d\e09d"}.fa-duotone.fa-arrow-up-left-from-circle:after,.fad.fa-arrow-up-left-from-circle:after{content:"\e09e\e09e"}.fa-duotone.fa-arrow-up-long:after,.fa-duotone.fa-long-arrow-up:after,.fad.fa-arrow-up-long:after,.fad.fa-long-arrow-up:after{content:"\f176\f176"}.fa-duotone.fa-arrow-up-right:after,.fad.fa-arrow-up-right:after{content:"\e09f\e09f"}.fa-duotone.fa-arrow-up-right-and-arrow-down-left-from-center:after,.fad.fa-arrow-up-right-and-arrow-down-left-from-center:after{content:"\e0a0\e0a0"}.fa-duotone.fa-arrow-up-right-dots:after,.fad.fa-arrow-up-right-dots:after{content:"\e4b7\e4b7"}.fa-duotone.fa-arrow-up-right-from-square:after,.fa-duotone.fa-external-link:after,.fad.fa-arrow-up-right-from-square:after,.fad.fa-external-link:after{content:"\f08e\f08e"}.fa-duotone.fa-arrow-up-short-wide:after,.fa-duotone.fa-sort-amount-up-alt:after,.fad.fa-arrow-up-short-wide:after,.fad.fa-sort-amount-up-alt:after{content:"\f885\f885"}.fa-duotone.fa-arrow-up-small-big:after,.fa-duotone.fa-sort-size-up-alt:after,.fad.fa-arrow-up-small-big:after,.fad.fa-sort-size-up-alt:after{content:"\f88f\f88f"}.fa-duotone.fa-arrow-up-square-triangle:after,.fa-duotone.fa-sort-shapes-up-alt:after,.fad.fa-arrow-up-square-triangle:after,.fad.fa-sort-shapes-up-alt:after{content:"\f88b\f88b"}.fa-duotone.fa-arrow-up-to-dotted-line:after,.fad.fa-arrow-up-to-dotted-line:after{content:"\e0a1\e0a1"}.fa-duotone.fa-arrow-to-top:after,.fa-duotone.fa-arrow-up-to-line:after,.fad.fa-arrow-to-top:after,.fad.fa-arrow-up-to-line:after{content:"\f341\f341"}.fa-duotone.fa-arrow-up-triangle-square:after,.fa-duotone.fa-sort-shapes-up:after,.fad.fa-arrow-up-triangle-square:after,.fad.fa-sort-shapes-up:after{content:"\f88a\f88a"}.fa-duotone.fa-arrow-up-wide-short:after,.fa-duotone.fa-sort-amount-up:after,.fad.fa-arrow-up-wide-short:after,.fad.fa-sort-amount-up:after{content:"\f161\f161"}.fa-duotone.fa-arrow-up-z-a:after,.fa-duotone.fa-sort-alpha-up-alt:after,.fad.fa-arrow-up-z-a:after,.fad.fa-sort-alpha-up-alt:after{content:"\f882\f882"}.fa-duotone.fa-arrows-cross:after,.fad.fa-arrows-cross:after{content:"\e0a2\e0a2"}.fa-duotone.fa-arrows-down-to-line:after,.fad.fa-arrows-down-to-line:after{content:"\e4b8\e4b8"}.fa-duotone.fa-arrows-down-to-people:after,.fad.fa-arrows-down-to-people:after{content:"\e4b9\e4b9"}.fa-duotone.fa-arrows-from-dotted-line:after,.fad.fa-arrows-from-dotted-line:after{content:"\e0a3\e0a3"}.fa-duotone.fa-arrows-from-line:after,.fad.fa-arrows-from-line:after{content:"\e0a4\e0a4"}.fa-duotone.fa-arrows-h:after,.fa-duotone.fa-arrows-left-right:after,.fad.fa-arrows-h:after,.fad.fa-arrows-left-right:after{content:"\f07e\f07e"}.fa-duotone.fa-arrows-left-right-to-line:after,.fad.fa-arrows-left-right-to-line:after{content:"\e4ba\e4ba"}.fa-duotone.fa-arrows-maximize:after,.fa-duotone.fa-expand-arrows:after,.fad.fa-arrows-maximize:after,.fad.fa-expand-arrows:after{content:"\f31d\f31d"}.fa-duotone.fa-arrows-minimize:after,.fa-duotone.fa-compress-arrows:after,.fad.fa-arrows-minimize:after,.fad.fa-compress-arrows:after{content:"\e0a5\e0a5"}.fa-duotone.fa-arrows-repeat:after,.fa-duotone.fa-repeat-alt:after,.fad.fa-arrows-repeat:after,.fad.fa-repeat-alt:after{content:"\f364\f364"}.fa-duotone.fa-arrows-repeat-1:after,.fa-duotone.fa-repeat-1-alt:after,.fad.fa-arrows-repeat-1:after,.fad.fa-repeat-1-alt:after{content:"\f366\f366"}.fa-duotone.fa-arrows-retweet:after,.fa-duotone.fa-retweet-alt:after,.fad.fa-arrows-retweet:after,.fad.fa-retweet-alt:after{content:"\f361\f361"}.fa-duotone.fa-arrows-rotate:after,.fa-duotone.fa-refresh:after,.fa-duotone.fa-sync:after,.fad.fa-arrows-rotate:after,.fad.fa-refresh:after,.fad.fa-sync:after{content:"\f021\f021"}.fa-duotone.fa-arrows-spin:after,.fad.fa-arrows-spin:after{content:"\e4bb\e4bb"}.fa-duotone.fa-arrows-split-up-and-left:after,.fad.fa-arrows-split-up-and-left:after{content:"\e4bc\e4bc"}.fa-duotone.fa-arrows-to-circle:after,.fad.fa-arrows-to-circle:after{content:"\e4bd\e4bd"}.fa-duotone.fa-arrows-to-dot:after,.fad.fa-arrows-to-dot:after{content:"\e4be\e4be"}.fa-duotone.fa-arrows-to-dotted-line:after,.fad.fa-arrows-to-dotted-line:after{content:"\e0a6\e0a6"}.fa-duotone.fa-arrows-to-eye:after,.fad.fa-arrows-to-eye:after{content:"\e4bf\e4bf"}.fa-duotone.fa-arrows-to-line:after,.fad.fa-arrows-to-line:after{content:"\e0a7\e0a7"}.fa-duotone.fa-arrows-turn-right:after,.fad.fa-arrows-turn-right:after{content:"\e4c0\e4c0"}.fa-duotone.fa-arrows-turn-to-dots:after,.fad.fa-arrows-turn-to-dots:after{content:"\e4c1\e4c1"}.fa-duotone.fa-arrows-up-down:after,.fa-duotone.fa-arrows-v:after,.fad.fa-arrows-up-down:after,.fad.fa-arrows-v:after{content:"\f07d\f07d"}.fa-duotone.fa-arrows-up-down-left-right:after,.fa-duotone.fa-arrows:after,.fad.fa-arrows-up-down-left-right:after,.fad.fa-arrows:after{content:"\f047\f047"}.fa-duotone.fa-arrows-up-to-line:after,.fad.fa-arrows-up-to-line:after{content:"\e4c2\e4c2"}.fa-duotone.fa-asterisk:after,.fad.fa-asterisk:after{content:"\2a\2a"}.fa-duotone.fa-at:after,.fad.fa-at:after{content:"\40\40"}.fa-duotone.fa-atom:after,.fad.fa-atom:after{content:"\f5d2\f5d2"}.fa-duotone.fa-atom-alt:after,.fa-duotone.fa-atom-simple:after,.fad.fa-atom-alt:after,.fad.fa-atom-simple:after{content:"\f5d3\f5d3"}.fa-duotone.fa-audio-description:after,.fad.fa-audio-description:after{content:"\f29e\f29e"}.fa-duotone.fa-audio-description-slash:after,.fad.fa-audio-description-slash:after{content:"\e0a8\e0a8"}.fa-duotone.fa-austral-sign:after,.fad.fa-austral-sign:after{content:"\e0a9\e0a9"}.fa-duotone.fa-avocado:after,.fad.fa-avocado:after{content:"\e0aa\e0aa"}.fa-duotone.fa-award:after,.fad.fa-award:after{content:"\f559\f559"}.fa-duotone.fa-award-simple:after,.fad.fa-award-simple:after{content:"\e0ab\e0ab"}.fa-duotone.fa-axe:after,.fad.fa-axe:after{content:"\f6b2\f6b2"}.fa-duotone.fa-axe-battle:after,.fad.fa-axe-battle:after{content:"\f6b3\f6b3"}.fa-duotone.fa-b:after,.fad.fa-b:after{content:"\42\42"}.fa-duotone.fa-baby:after,.fad.fa-baby:after{content:"\f77c\f77c"}.fa-duotone.fa-baby-carriage:after,.fa-duotone.fa-carriage-baby:after,.fad.fa-baby-carriage:after,.fad.fa-carriage-baby:after{content:"\f77d\f77d"}.fa-duotone.fa-backpack:after,.fad.fa-backpack:after{content:"\f5d4\f5d4"}.fa-duotone.fa-backward:after,.fad.fa-backward:after{content:"\f04a\f04a"}.fa-duotone.fa-backward-fast:after,.fa-duotone.fa-fast-backward:after,.fad.fa-backward-fast:after,.fad.fa-fast-backward:after{content:"\f049\f049"}.fa-duotone.fa-backward-step:after,.fa-duotone.fa-step-backward:after,.fad.fa-backward-step:after,.fad.fa-step-backward:after{content:"\f048\f048"}.fa-duotone.fa-bacon:after,.fad.fa-bacon:after{content:"\f7e5\f7e5"}.fa-duotone.fa-bacteria:after,.fad.fa-bacteria:after{content:"\e059\e059"}.fa-duotone.fa-bacterium:after,.fad.fa-bacterium:after{content:"\e05a\e05a"}.fa-duotone.fa-badge:after,.fad.fa-badge:after{content:"\f335\f335"}.fa-duotone.fa-badge-check:after,.fad.fa-badge-check:after{content:"\f336\f336"}.fa-duotone.fa-badge-dollar:after,.fad.fa-badge-dollar:after{content:"\f645\f645"}.fa-duotone.fa-badge-percent:after,.fad.fa-badge-percent:after{content:"\f646\f646"}.fa-duotone.fa-badge-sheriff:after,.fad.fa-badge-sheriff:after{content:"\f8a2\f8a2"}.fa-duotone.fa-badger-honey:after,.fad.fa-badger-honey:after{content:"\f6b4\f6b4"}.fa-duotone.fa-badminton:after,.fad.fa-badminton:after{content:"\e33a\e33a"}.fa-duotone.fa-bag-shopping:after,.fa-duotone.fa-shopping-bag:after,.fad.fa-bag-shopping:after,.fad.fa-shopping-bag:after{content:"\f290\f290"}.fa-duotone.fa-bagel:after,.fad.fa-bagel:after{content:"\e3d7\e3d7"}.fa-duotone.fa-bags-shopping:after,.fad.fa-bags-shopping:after{content:"\f847\f847"}.fa-duotone.fa-baguette:after,.fad.fa-baguette:after{content:"\e3d8\e3d8"}.fa-duotone.fa-bahai:after,.fa-duotone.fa-haykal:after,.fad.fa-bahai:after,.fad.fa-haykal:after{content:"\f666\f666"}.fa-duotone.fa-baht-sign:after,.fad.fa-baht-sign:after{content:"\e0ac\e0ac"}.fa-duotone.fa-ball-pile:after,.fad.fa-ball-pile:after{content:"\f77e\f77e"}.fa-duotone.fa-balloon:after,.fad.fa-balloon:after{content:"\e2e3\e2e3"}.fa-duotone.fa-balloons:after,.fad.fa-balloons:after{content:"\e2e4\e2e4"}.fa-duotone.fa-ballot:after,.fad.fa-ballot:after{content:"\f732\f732"}.fa-duotone.fa-ballot-check:after,.fad.fa-ballot-check:after{content:"\f733\f733"}.fa-duotone.fa-ban:after,.fa-duotone.fa-cancel:after,.fad.fa-ban:after,.fad.fa-cancel:after{content:"\f05e\f05e"}.fa-duotone.fa-ban-bug:after,.fa-duotone.fa-debug:after,.fad.fa-ban-bug:after,.fad.fa-debug:after{content:"\f7f9\f7f9"}.fa-duotone.fa-ban-parking:after,.fa-duotone.fa-parking-circle-slash:after,.fad.fa-ban-parking:after,.fad.fa-parking-circle-slash:after{content:"\f616\f616"}.fa-duotone.fa-ban-smoking:after,.fa-duotone.fa-smoking-ban:after,.fad.fa-ban-smoking:after,.fad.fa-smoking-ban:after{content:"\f54d\f54d"}.fa-duotone.fa-banana:after,.fad.fa-banana:after{content:"\e2e5\e2e5"}.fa-duotone.fa-band-aid:after,.fa-duotone.fa-bandage:after,.fad.fa-band-aid:after,.fad.fa-bandage:after{content:"\f462\f462"}.fa-duotone.fa-bangladeshi-taka-sign:after,.fad.fa-bangladeshi-taka-sign:after{content:"\e2e6\e2e6"}.fa-duotone.fa-banjo:after,.fad.fa-banjo:after{content:"\f8a3\f8a3"}.fa-duotone.fa-barcode:after,.fad.fa-barcode:after{content:"\f02a\f02a"}.fa-duotone.fa-barcode-read:after,.fad.fa-barcode-read:after{content:"\f464\f464"}.fa-duotone.fa-barcode-scan:after,.fad.fa-barcode-scan:after{content:"\f465\f465"}.fa-duotone.fa-bars:after,.fa-duotone.fa-navicon:after,.fad.fa-bars:after,.fad.fa-navicon:after{content:"\f0c9\f0c9"}.fa-duotone.fa-bars-filter:after,.fad.fa-bars-filter:after{content:"\e0ad\e0ad"}.fa-duotone.fa-bars-progress:after,.fa-duotone.fa-tasks-alt:after,.fad.fa-bars-progress:after,.fad.fa-tasks-alt:after{content:"\f828\f828"}.fa-duotone.fa-bars-sort:after,.fad.fa-bars-sort:after{content:"\e0ae\e0ae"}.fa-duotone.fa-bars-staggered:after,.fa-duotone.fa-reorder:after,.fa-duotone.fa-stream:after,.fad.fa-bars-staggered:after,.fad.fa-reorder:after,.fad.fa-stream:after{content:"\f550\f550"}.fa-duotone.fa-baseball-ball:after,.fa-duotone.fa-baseball:after,.fad.fa-baseball-ball:after,.fad.fa-baseball:after{content:"\f433\f433"}.fa-duotone.fa-baseball-bat-ball:after,.fad.fa-baseball-bat-ball:after{content:"\f432\f432"}.fa-duotone.fa-basket-shopping:after,.fa-duotone.fa-shopping-basket:after,.fad.fa-basket-shopping:after,.fad.fa-shopping-basket:after{content:"\f291\f291"}.fa-duotone.fa-basket-shopping-simple:after,.fa-duotone.fa-shopping-basket-alt:after,.fad.fa-basket-shopping-simple:after,.fad.fa-shopping-basket-alt:after{content:"\e0af\e0af"}.fa-duotone.fa-basketball-ball:after,.fa-duotone.fa-basketball:after,.fad.fa-basketball-ball:after,.fad.fa-basketball:after{content:"\f434\f434"}.fa-duotone.fa-basketball-hoop:after,.fad.fa-basketball-hoop:after{content:"\f435\f435"}.fa-duotone.fa-bat:after,.fad.fa-bat:after{content:"\f6b5\f6b5"}.fa-duotone.fa-bath:after,.fa-duotone.fa-bathtub:after,.fad.fa-bath:after,.fad.fa-bathtub:after{content:"\f2cd\f2cd"}.fa-duotone.fa-battery-bolt:after,.fad.fa-battery-bolt:after{content:"\f376\f376"}.fa-duotone.fa-battery-0:after,.fa-duotone.fa-battery-empty:after,.fad.fa-battery-0:after,.fad.fa-battery-empty:after{content:"\f244\f244"}.fa-duotone.fa-battery-exclamation:after,.fad.fa-battery-exclamation:after{content:"\e0b0\e0b0"}.fa-duotone.fa-battery-5:after,.fa-duotone.fa-battery-full:after,.fa-duotone.fa-battery:after,.fad.fa-battery-5:after,.fad.fa-battery-full:after,.fad.fa-battery:after{content:"\f240\f240"}.fa-duotone.fa-battery-3:after,.fa-duotone.fa-battery-half:after,.fad.fa-battery-3:after,.fad.fa-battery-half:after{content:"\f242\f242"}.fa-duotone.fa-battery-1:after,.fa-duotone.fa-battery-low:after,.fad.fa-battery-1:after,.fad.fa-battery-low:after{content:"\e0b1\e0b1"}.fa-duotone.fa-battery-2:after,.fa-duotone.fa-battery-quarter:after,.fad.fa-battery-2:after,.fad.fa-battery-quarter:after{content:"\f243\f243"}.fa-duotone.fa-battery-slash:after,.fad.fa-battery-slash:after{content:"\f377\f377"}.fa-duotone.fa-battery-4:after,.fa-duotone.fa-battery-three-quarters:after,.fad.fa-battery-4:after,.fad.fa-battery-three-quarters:after{content:"\f241\f241"}.fa-duotone.fa-bed:after,.fad.fa-bed:after{content:"\f236\f236"}.fa-duotone.fa-bed-bunk:after,.fad.fa-bed-bunk:after{content:"\f8f8\f8f8"}.fa-duotone.fa-bed-empty:after,.fad.fa-bed-empty:after{content:"\f8f9\f8f9"}.fa-duotone.fa-bed-alt:after,.fa-duotone.fa-bed-front:after,.fad.fa-bed-alt:after,.fad.fa-bed-front:after{content:"\f8f7\f8f7"}.fa-duotone.fa-bed-pulse:after,.fa-duotone.fa-procedures:after,.fad.fa-bed-pulse:after,.fad.fa-procedures:after{content:"\f487\f487"}.fa-duotone.fa-bee:after,.fad.fa-bee:after{content:"\e0b2\e0b2"}.fa-duotone.fa-beer-foam:after,.fa-duotone.fa-beer-mug:after,.fad.fa-beer-foam:after,.fad.fa-beer-mug:after{content:"\e0b3\e0b3"}.fa-duotone.fa-beer-mug-empty:after,.fa-duotone.fa-beer:after,.fad.fa-beer-mug-empty:after,.fad.fa-beer:after{content:"\f0fc\f0fc"}.fa-duotone.fa-bell:after,.fad.fa-bell:after{content:"\f0f3\f0f3"}.fa-duotone.fa-bell-concierge:after,.fa-duotone.fa-concierge-bell:after,.fad.fa-bell-concierge:after,.fad.fa-concierge-bell:after{content:"\f562\f562"}.fa-duotone.fa-bell-exclamation:after,.fad.fa-bell-exclamation:after{content:"\f848\f848"}.fa-duotone.fa-bell-on:after,.fad.fa-bell-on:after{content:"\f8fa\f8fa"}.fa-duotone.fa-bell-plus:after,.fad.fa-bell-plus:after{content:"\f849\f849"}.fa-duotone.fa-bell-school:after,.fad.fa-bell-school:after{content:"\f5d5\f5d5"}.fa-duotone.fa-bell-school-slash:after,.fad.fa-bell-school-slash:after{content:"\f5d6\f5d6"}.fa-duotone.fa-bell-slash:after,.fad.fa-bell-slash:after{content:"\f1f6\f1f6"}.fa-duotone.fa-bells:after,.fad.fa-bells:after{content:"\f77f\f77f"}.fa-duotone.fa-bench-tree:after,.fad.fa-bench-tree:after{content:"\e2e7\e2e7"}.fa-duotone.fa-bezier-curve:after,.fad.fa-bezier-curve:after{content:"\f55b\f55b"}.fa-duotone.fa-bicycle:after,.fad.fa-bicycle:after{content:"\f206\f206"}.fa-duotone.fa-binary:after,.fad.fa-binary:after{content:"\e33b\e33b"}.fa-duotone.fa-binary-circle-check:after,.fad.fa-binary-circle-check:after{content:"\e33c\e33c"}.fa-duotone.fa-binary-lock:after,.fad.fa-binary-lock:after{content:"\e33d\e33d"}.fa-duotone.fa-binary-slash:after,.fad.fa-binary-slash:after{content:"\e33e\e33e"}.fa-duotone.fa-binoculars:after,.fad.fa-binoculars:after{content:"\f1e5\f1e5"}.fa-duotone.fa-biohazard:after,.fad.fa-biohazard:after{content:"\f780\f780"}.fa-duotone.fa-bird:after,.fad.fa-bird:after{content:"\e469\e469"}.fa-duotone.fa-bitcoin-sign:after,.fad.fa-bitcoin-sign:after{content:"\e0b4\e0b4"}.fa-duotone.fa-blanket:after,.fad.fa-blanket:after{content:"\f498\f498"}.fa-duotone.fa-blanket-fire:after,.fad.fa-blanket-fire:after{content:"\e3da\e3da"}.fa-duotone.fa-blender:after,.fad.fa-blender:after{content:"\f517\f517"}.fa-duotone.fa-blender-phone:after,.fad.fa-blender-phone:after{content:"\f6b6\f6b6"}.fa-duotone.fa-blinds:after,.fad.fa-blinds:after{content:"\f8fb\f8fb"}.fa-duotone.fa-blinds-open:after,.fad.fa-blinds-open:after{content:"\f8fc\f8fc"}.fa-duotone.fa-blinds-raised:after,.fad.fa-blinds-raised:after{content:"\f8fd\f8fd"}.fa-duotone.fa-block:after,.fad.fa-block:after{content:"\e46a\e46a"}.fa-duotone.fa-block-brick:after,.fa-duotone.fa-wall-brick:after,.fad.fa-block-brick:after,.fad.fa-wall-brick:after{content:"\e3db\e3db"}.fa-duotone.fa-block-brick-fire:after,.fa-duotone.fa-firewall:after,.fad.fa-block-brick-fire:after,.fad.fa-firewall:after{content:"\e3dc\e3dc"}.fa-duotone.fa-block-question:after,.fad.fa-block-question:after{content:"\e3dd\e3dd"}.fa-duotone.fa-block-quote:after,.fad.fa-block-quote:after{content:"\e0b5\e0b5"}.fa-duotone.fa-blog:after,.fad.fa-blog:after{content:"\f781\f781"}.fa-duotone.fa-blueberries:after,.fad.fa-blueberries:after{content:"\e2e8\e2e8"}.fa-duotone.fa-bold:after,.fad.fa-bold:after{content:"\f032\f032"}.fa-duotone.fa-bolt:after,.fa-duotone.fa-zap:after,.fad.fa-bolt:after,.fad.fa-zap:after{content:"\f0e7\f0e7"}.fa-duotone.fa-bolt-auto:after,.fad.fa-bolt-auto:after{content:"\e0b6\e0b6"}.fa-duotone.fa-bolt-lightning:after,.fad.fa-bolt-lightning:after{content:"\e0b7\e0b7"}.fa-duotone.fa-bolt-slash:after,.fad.fa-bolt-slash:after{content:"\e0b8\e0b8"}.fa-duotone.fa-bomb:after,.fad.fa-bomb:after{content:"\f1e2\f1e2"}.fa-duotone.fa-bone:after,.fad.fa-bone:after{content:"\f5d7\f5d7"}.fa-duotone.fa-bone-break:after,.fad.fa-bone-break:after{content:"\f5d8\f5d8"}.fa-duotone.fa-bong:after,.fad.fa-bong:after{content:"\f55c\f55c"}.fa-duotone.fa-book:after,.fad.fa-book:after{content:"\f02d\f02d"}.fa-duotone.fa-book-arrow-right:after,.fad.fa-book-arrow-right:after{content:"\e0b9\e0b9"}.fa-duotone.fa-book-arrow-up:after,.fad.fa-book-arrow-up:after{content:"\e0ba\e0ba"}.fa-duotone.fa-atlas:after,.fa-duotone.fa-book-atlas:after,.fad.fa-atlas:after,.fad.fa-book-atlas:after{content:"\f558\f558"}.fa-duotone.fa-bible:after,.fa-duotone.fa-book-bible:after,.fad.fa-bible:after,.fad.fa-book-bible:after{content:"\f647\f647"}.fa-duotone.fa-book-alt:after,.fa-duotone.fa-book-blank:after,.fad.fa-book-alt:after,.fad.fa-book-blank:after{content:"\f5d9\f5d9"}.fa-duotone.fa-book-bookmark:after,.fad.fa-book-bookmark:after{content:"\e0bb\e0bb"}.fa-duotone.fa-book-circle-arrow-right:after,.fad.fa-book-circle-arrow-right:after{content:"\e0bc\e0bc"}.fa-duotone.fa-book-circle-arrow-up:after,.fad.fa-book-circle-arrow-up:after{content:"\e0bd\e0bd"}.fa-duotone.fa-book-copy:after,.fad.fa-book-copy:after{content:"\e0be\e0be"}.fa-duotone.fa-book-font:after,.fad.fa-book-font:after{content:"\e0bf\e0bf"}.fa-duotone.fa-book-heart:after,.fad.fa-book-heart:after{content:"\f499\f499"}.fa-duotone.fa-book-journal-whills:after,.fa-duotone.fa-journal-whills:after,.fad.fa-book-journal-whills:after,.fad.fa-journal-whills:after{content:"\f66a\f66a"}.fa-duotone.fa-book-medical:after,.fad.fa-book-medical:after{content:"\f7e6\f7e6"}.fa-duotone.fa-book-open:after,.fad.fa-book-open:after{content:"\f518\f518"}.fa-duotone.fa-book-open-alt:after,.fa-duotone.fa-book-open-cover:after,.fad.fa-book-open-alt:after,.fad.fa-book-open-cover:after{content:"\e0c0\e0c0"}.fa-duotone.fa-book-open-reader:after,.fa-duotone.fa-book-reader:after,.fad.fa-book-open-reader:after,.fad.fa-book-reader:after{content:"\f5da\f5da"}.fa-duotone.fa-book-quran:after,.fa-duotone.fa-quran:after,.fad.fa-book-quran:after,.fad.fa-quran:after{content:"\f687\f687"}.fa-duotone.fa-book-law:after,.fa-duotone.fa-book-section:after,.fad.fa-book-law:after,.fad.fa-book-section:after{content:"\e0c1\e0c1"}.fa-duotone.fa-book-dead:after,.fa-duotone.fa-book-skull:after,.fad.fa-book-dead:after,.fad.fa-book-skull:after{content:"\f6b7\f6b7"}.fa-duotone.fa-book-sparkles:after,.fa-duotone.fa-book-spells:after,.fad.fa-book-sparkles:after,.fad.fa-book-spells:after{content:"\f6b8\f6b8"}.fa-duotone.fa-book-tanakh:after,.fa-duotone.fa-tanakh:after,.fad.fa-book-tanakh:after,.fad.fa-tanakh:after{content:"\f827\f827"}.fa-duotone.fa-book-user:after,.fad.fa-book-user:after{content:"\f7e7\f7e7"}.fa-duotone.fa-bookmark:after,.fad.fa-bookmark:after{content:"\f02e\f02e"}.fa-duotone.fa-bookmark-slash:after,.fad.fa-bookmark-slash:after{content:"\e0c2\e0c2"}.fa-duotone.fa-books:after,.fad.fa-books:after{content:"\f5db\f5db"}.fa-duotone.fa-books-medical:after,.fad.fa-books-medical:after{content:"\f7e8\f7e8"}.fa-duotone.fa-boombox:after,.fad.fa-boombox:after{content:"\f8a5\f8a5"}.fa-duotone.fa-boot:after,.fad.fa-boot:after{content:"\f782\f782"}.fa-duotone.fa-boot-heeled:after,.fad.fa-boot-heeled:after{content:"\e33f\e33f"}.fa-duotone.fa-booth-curtain:after,.fad.fa-booth-curtain:after{content:"\f734\f734"}.fa-duotone.fa-border-all:after,.fad.fa-border-all:after{content:"\f84c\f84c"}.fa-duotone.fa-border-bottom:after,.fad.fa-border-bottom:after{content:"\f84d\f84d"}.fa-duotone.fa-border-bottom-right:after,.fa-duotone.fa-border-style-alt:after,.fad.fa-border-bottom-right:after,.fad.fa-border-style-alt:after{content:"\f854\f854"}.fa-duotone.fa-border-center-h:after,.fad.fa-border-center-h:after{content:"\f89c\f89c"}.fa-duotone.fa-border-center-v:after,.fad.fa-border-center-v:after{content:"\f89d\f89d"}.fa-duotone.fa-border-inner:after,.fad.fa-border-inner:after{content:"\f84e\f84e"}.fa-duotone.fa-border-left:after,.fad.fa-border-left:after{content:"\f84f\f84f"}.fa-duotone.fa-border-none:after,.fad.fa-border-none:after{content:"\f850\f850"}.fa-duotone.fa-border-outer:after,.fad.fa-border-outer:after{content:"\f851\f851"}.fa-duotone.fa-border-right:after,.fad.fa-border-right:after{content:"\f852\f852"}.fa-duotone.fa-border-top:after,.fad.fa-border-top:after{content:"\f855\f855"}.fa-duotone.fa-border-style:after,.fa-duotone.fa-border-top-left:after,.fad.fa-border-style:after,.fad.fa-border-top-left:after{content:"\f853\f853"}.fa-duotone.fa-bore-hole:after,.fad.fa-bore-hole:after{content:"\e4c3\e4c3"}.fa-duotone.fa-bottle-droplet:after,.fad.fa-bottle-droplet:after{content:"\e4c4\e4c4"}.fa-duotone.fa-bottle-water:after,.fad.fa-bottle-water:after{content:"\e4c5\e4c5"}.fa-duotone.fa-bow-arrow:after,.fad.fa-bow-arrow:after{content:"\f6b9\f6b9"}.fa-duotone.fa-bowl-chopsticks:after,.fad.fa-bowl-chopsticks:after{content:"\e2e9\e2e9"}.fa-duotone.fa-bowl-chopsticks-noodles:after,.fad.fa-bowl-chopsticks-noodles:after{content:"\e2ea\e2ea"}.fa-duotone.fa-bowl-food:after,.fad.fa-bowl-food:after{content:"\e4c6\e4c6"}.fa-duotone.fa-bowl-hot:after,.fa-duotone.fa-soup:after,.fad.fa-bowl-hot:after,.fad.fa-soup:after{content:"\f823\f823"}.fa-duotone.fa-bowl-rice:after,.fad.fa-bowl-rice:after{content:"\e2eb\e2eb"}.fa-duotone.fa-bowl-scoop:after,.fa-duotone.fa-bowl-shaved-ice:after,.fad.fa-bowl-scoop:after,.fad.fa-bowl-shaved-ice:after{content:"\e3de\e3de"}.fa-duotone.fa-bowl-scoops:after,.fad.fa-bowl-scoops:after{content:"\e3df\e3df"}.fa-duotone.fa-bowl-soft-serve:after,.fad.fa-bowl-soft-serve:after{content:"\e46b\e46b"}.fa-duotone.fa-bowl-spoon:after,.fad.fa-bowl-spoon:after{content:"\e3e0\e3e0"}.fa-duotone.fa-bowling-ball:after,.fad.fa-bowling-ball:after{content:"\f436\f436"}.fa-duotone.fa-bowling-ball-pin:after,.fad.fa-bowling-ball-pin:after{content:"\e0c3\e0c3"}.fa-duotone.fa-bowling-pins:after,.fad.fa-bowling-pins:after{content:"\f437\f437"}.fa-duotone.fa-box:after,.fad.fa-box:after{content:"\f466\f466"}.fa-duotone.fa-archive:after,.fa-duotone.fa-box-archive:after,.fad.fa-archive:after,.fad.fa-box-archive:after{content:"\f187\f187"}.fa-duotone.fa-box-ballot:after,.fad.fa-box-ballot:after{content:"\f735\f735"}.fa-duotone.fa-box-check:after,.fad.fa-box-check:after{content:"\f467\f467"}.fa-duotone.fa-box-circle-check:after,.fad.fa-box-circle-check:after{content:"\e0c4\e0c4"}.fa-duotone.fa-box-dollar:after,.fa-duotone.fa-box-usd:after,.fad.fa-box-dollar:after,.fad.fa-box-usd:after{content:"\f4a0\f4a0"}.fa-duotone.fa-box-heart:after,.fad.fa-box-heart:after{content:"\f49d\f49d"}.fa-duotone.fa-box-open:after,.fad.fa-box-open:after{content:"\f49e\f49e"}.fa-duotone.fa-box-full:after,.fa-duotone.fa-box-open-full:after,.fad.fa-box-full:after,.fad.fa-box-open-full:after{content:"\f49c\f49c"}.fa-duotone.fa-box-alt:after,.fa-duotone.fa-box-taped:after,.fad.fa-box-alt:after,.fad.fa-box-taped:after{content:"\f49a\f49a"}.fa-duotone.fa-box-tissue:after,.fad.fa-box-tissue:after{content:"\e05b\e05b"}.fa-duotone.fa-boxes-packing:after,.fad.fa-boxes-packing:after{content:"\e4c7\e4c7"}.fa-duotone.fa-boxes-alt:after,.fa-duotone.fa-boxes-stacked:after,.fa-duotone.fa-boxes:after,.fad.fa-boxes-alt:after,.fad.fa-boxes-stacked:after,.fad.fa-boxes:after{content:"\f468\f468"}.fa-duotone.fa-boxing-glove:after,.fa-duotone.fa-glove-boxing:after,.fad.fa-boxing-glove:after,.fad.fa-glove-boxing:after{content:"\f438\f438"}.fa-duotone.fa-bracket-curly-left:after,.fa-duotone.fa-bracket-curly:after,.fad.fa-bracket-curly-left:after,.fad.fa-bracket-curly:after{content:"\7b\7b"}.fa-duotone.fa-bracket-curly-right:after,.fad.fa-bracket-curly-right:after{content:"\7d\7d"}.fa-duotone.fa-bracket-round:after,.fa-duotone.fa-parenthesis:after,.fad.fa-bracket-round:after,.fad.fa-parenthesis:after{content:"\28\28"}.fa-duotone.fa-bracket-round-right:after,.fad.fa-bracket-round-right:after{content:"\29\29"}.fa-duotone.fa-bracket-left:after,.fa-duotone.fa-bracket-square:after,.fa-duotone.fa-bracket:after,.fad.fa-bracket-left:after,.fad.fa-bracket-square:after,.fad.fa-bracket:after{content:"\5b\5b"}.fa-duotone.fa-bracket-square-right:after,.fad.fa-bracket-square-right:after{content:"\5d\5d"}.fa-duotone.fa-brackets-curly:after,.fad.fa-brackets-curly:after{content:"\f7ea\f7ea"}.fa-duotone.fa-brackets-round:after,.fa-duotone.fa-parentheses:after,.fad.fa-brackets-round:after,.fad.fa-parentheses:after{content:"\e0c5\e0c5"}.fa-duotone.fa-brackets-square:after,.fa-duotone.fa-brackets:after,.fad.fa-brackets-square:after,.fad.fa-brackets:after{content:"\f7e9\f7e9"}.fa-duotone.fa-braille:after,.fad.fa-braille:after{content:"\f2a1\f2a1"}.fa-duotone.fa-brain:after,.fad.fa-brain:after{content:"\f5dc\f5dc"}.fa-duotone.fa-brain-arrow-curved-right:after,.fa-duotone.fa-mind-share:after,.fad.fa-brain-arrow-curved-right:after,.fad.fa-mind-share:after{content:"\f677\f677"}.fa-duotone.fa-brain-circuit:after,.fad.fa-brain-circuit:after{content:"\e0c6\e0c6"}.fa-duotone.fa-brake-warning:after,.fad.fa-brake-warning:after{content:"\e0c7\e0c7"}.fa-duotone.fa-brazilian-real-sign:after,.fad.fa-brazilian-real-sign:after{content:"\e46c\e46c"}.fa-duotone.fa-bread-loaf:after,.fad.fa-bread-loaf:after{content:"\f7eb\f7eb"}.fa-duotone.fa-bread-slice:after,.fad.fa-bread-slice:after{content:"\f7ec\f7ec"}.fa-duotone.fa-bread-slice-butter:after,.fad.fa-bread-slice-butter:after{content:"\e3e1\e3e1"}.fa-duotone.fa-bridge:after,.fad.fa-bridge:after{content:"\e4c8\e4c8"}.fa-duotone.fa-bridge-circle-check:after,.fad.fa-bridge-circle-check:after{content:"\e4c9\e4c9"}.fa-duotone.fa-bridge-circle-exclamation:after,.fad.fa-bridge-circle-exclamation:after{content:"\e4ca\e4ca"}.fa-duotone.fa-bridge-circle-xmark:after,.fad.fa-bridge-circle-xmark:after{content:"\e4cb\e4cb"}.fa-duotone.fa-bridge-lock:after,.fad.fa-bridge-lock:after{content:"\e4cc\e4cc"}.fa-duotone.fa-bridge-suspension:after,.fad.fa-bridge-suspension:after{content:"\e4cd\e4cd"}.fa-duotone.fa-bridge-water:after,.fad.fa-bridge-water:after{content:"\e4ce\e4ce"}.fa-duotone.fa-briefcase:after,.fad.fa-briefcase:after{content:"\f0b1\f0b1"}.fa-duotone.fa-briefcase-arrow-right:after,.fad.fa-briefcase-arrow-right:after{content:"\e2f2\e2f2"}.fa-duotone.fa-briefcase-blank:after,.fad.fa-briefcase-blank:after{content:"\e0c8\e0c8"}.fa-duotone.fa-briefcase-medical:after,.fad.fa-briefcase-medical:after{content:"\f469\f469"}.fa-duotone.fa-brightness:after,.fad.fa-brightness:after{content:"\e0c9\e0c9"}.fa-duotone.fa-brightness-low:after,.fad.fa-brightness-low:after{content:"\e0ca\e0ca"}.fa-duotone.fa-bring-forward:after,.fad.fa-bring-forward:after{content:"\f856\f856"}.fa-duotone.fa-bring-front:after,.fad.fa-bring-front:after{content:"\f857\f857"}.fa-duotone.fa-broccoli:after,.fad.fa-broccoli:after{content:"\e3e2\e3e2"}.fa-duotone.fa-broom:after,.fad.fa-broom:after{content:"\f51a\f51a"}.fa-duotone.fa-broom-ball:after,.fa-duotone.fa-quidditch-broom-ball:after,.fa-duotone.fa-quidditch:after,.fad.fa-broom-ball:after,.fad.fa-quidditch-broom-ball:after,.fad.fa-quidditch:after{content:"\f458\f458"}.fa-duotone.fa-browser:after,.fad.fa-browser:after{content:"\f37e\f37e"}.fa-duotone.fa-browsers:after,.fad.fa-browsers:after{content:"\e0cb\e0cb"}.fa-duotone.fa-brush:after,.fad.fa-brush:after{content:"\f55d\f55d"}.fa-duotone.fa-bucket:after,.fad.fa-bucket:after{content:"\e4cf\e4cf"}.fa-duotone.fa-bug:after,.fad.fa-bug:after{content:"\f188\f188"}.fa-duotone.fa-bug-slash:after,.fad.fa-bug-slash:after{content:"\e490\e490"}.fa-duotone.fa-bugs:after,.fad.fa-bugs:after{content:"\e4d0\e4d0"}.fa-duotone.fa-building:after,.fad.fa-building:after{content:"\f1ad\f1ad"}.fa-duotone.fa-building-circle-arrow-right:after,.fad.fa-building-circle-arrow-right:after{content:"\e4d1\e4d1"}.fa-duotone.fa-building-circle-check:after,.fad.fa-building-circle-check:after{content:"\e4d2\e4d2"}.fa-duotone.fa-building-circle-exclamation:after,.fad.fa-building-circle-exclamation:after{content:"\e4d3\e4d3"}.fa-duotone.fa-building-circle-xmark:after,.fad.fa-building-circle-xmark:after{content:"\e4d4\e4d4"}.fa-duotone.fa-bank:after,.fa-duotone.fa-building-columns:after,.fa-duotone.fa-institution:after,.fa-duotone.fa-museum:after,.fa-duotone.fa-university:after,.fad.fa-bank:after,.fad.fa-building-columns:after,.fad.fa-institution:after,.fad.fa-museum:after,.fad.fa-university:after{content:"\f19c\f19c"}.fa-duotone.fa-building-flag:after,.fad.fa-building-flag:after{content:"\e4d5\e4d5"}.fa-duotone.fa-building-lock:after,.fad.fa-building-lock:after{content:"\e4d6\e4d6"}.fa-duotone.fa-building-ngo:after,.fad.fa-building-ngo:after{content:"\e4d7\e4d7"}.fa-duotone.fa-building-shield:after,.fad.fa-building-shield:after{content:"\e4d8\e4d8"}.fa-duotone.fa-building-un:after,.fad.fa-building-un:after{content:"\e4d9\e4d9"}.fa-duotone.fa-building-user:after,.fad.fa-building-user:after{content:"\e4da\e4da"}.fa-duotone.fa-building-wheat:after,.fad.fa-building-wheat:after{content:"\e4db\e4db"}.fa-duotone.fa-buildings:after,.fad.fa-buildings:after{content:"\e0cc\e0cc"}.fa-duotone.fa-bullhorn:after,.fad.fa-bullhorn:after{content:"\f0a1\f0a1"}.fa-duotone.fa-bullseye:after,.fad.fa-bullseye:after{content:"\f140\f140"}.fa-duotone.fa-bullseye-arrow:after,.fad.fa-bullseye-arrow:after{content:"\f648\f648"}.fa-duotone.fa-bullseye-pointer:after,.fad.fa-bullseye-pointer:after{content:"\f649\f649"}.fa-duotone.fa-burger:after,.fa-duotone.fa-hamburger:after,.fad.fa-burger:after,.fad.fa-hamburger:after{content:"\f805\f805"}.fa-duotone.fa-burger-cheese:after,.fa-duotone.fa-cheeseburger:after,.fad.fa-burger-cheese:after,.fad.fa-cheeseburger:after{content:"\f7f1\f7f1"}.fa-duotone.fa-burger-fries:after,.fad.fa-burger-fries:after{content:"\e0cd\e0cd"}.fa-duotone.fa-burger-glass:after,.fad.fa-burger-glass:after{content:"\e0ce\e0ce"}.fa-duotone.fa-burger-lettuce:after,.fad.fa-burger-lettuce:after{content:"\e3e3\e3e3"}.fa-duotone.fa-burger-soda:after,.fad.fa-burger-soda:after{content:"\f858\f858"}.fa-duotone.fa-burrito:after,.fad.fa-burrito:after{content:"\f7ed\f7ed"}.fa-duotone.fa-burst:after,.fad.fa-burst:after{content:"\e4dc\e4dc"}.fa-duotone.fa-bus:after,.fad.fa-bus:after{content:"\f207\f207"}.fa-duotone.fa-bus-school:after,.fad.fa-bus-school:after{content:"\f5dd\f5dd"}.fa-duotone.fa-bus-alt:after,.fa-duotone.fa-bus-simple:after,.fad.fa-bus-alt:after,.fad.fa-bus-simple:after{content:"\f55e\f55e"}.fa-duotone.fa-briefcase-clock:after,.fa-duotone.fa-business-time:after,.fad.fa-briefcase-clock:after,.fad.fa-business-time:after{content:"\f64a\f64a"}.fa-duotone.fa-butter:after,.fad.fa-butter:after{content:"\e3e4\e3e4"}.fa-duotone.fa-c:after,.fad.fa-c:after{content:"\43\43"}.fa-duotone.fa-cabin:after,.fad.fa-cabin:after{content:"\e46d\e46d"}.fa-duotone.fa-cabinet-filing:after,.fad.fa-cabinet-filing:after{content:"\f64b\f64b"}.fa-duotone.fa-cable-car:after,.fa-duotone.fa-tram:after,.fad.fa-cable-car:after,.fad.fa-tram:after{content:"\f7da\f7da"}.fa-duotone.fa-cactus:after,.fad.fa-cactus:after{content:"\f8a7\f8a7"}.fa-duotone.fa-birthday-cake:after,.fa-duotone.fa-cake-candles:after,.fa-duotone.fa-cake:after,.fad.fa-birthday-cake:after,.fad.fa-cake-candles:after,.fad.fa-cake:after{content:"\f1fd\f1fd"}.fa-duotone.fa-cake-slice:after,.fa-duotone.fa-shortcake:after,.fad.fa-cake-slice:after,.fad.fa-shortcake:after{content:"\e3e5\e3e5"}.fa-duotone.fa-calculator:after,.fad.fa-calculator:after{content:"\f1ec\f1ec"}.fa-duotone.fa-calculator-alt:after,.fa-duotone.fa-calculator-simple:after,.fad.fa-calculator-alt:after,.fad.fa-calculator-simple:after{content:"\f64c\f64c"}.fa-duotone.fa-calendar:after,.fad.fa-calendar:after{content:"\f133\f133"}.fa-duotone.fa-calendar-arrow-down:after,.fa-duotone.fa-calendar-download:after,.fad.fa-calendar-arrow-down:after,.fad.fa-calendar-download:after{content:"\e0d0\e0d0"}.fa-duotone.fa-calendar-arrow-up:after,.fa-duotone.fa-calendar-upload:after,.fad.fa-calendar-arrow-up:after,.fad.fa-calendar-upload:after{content:"\e0d1\e0d1"}.fa-duotone.fa-calendar-check:after,.fad.fa-calendar-check:after{content:"\f274\f274"}.fa-duotone.fa-calendar-circle-exclamation:after,.fad.fa-calendar-circle-exclamation:after{content:"\e46e\e46e"}.fa-duotone.fa-calendar-circle-minus:after,.fad.fa-calendar-circle-minus:after{content:"\e46f\e46f"}.fa-duotone.fa-calendar-circle-plus:after,.fad.fa-calendar-circle-plus:after{content:"\e470\e470"}.fa-duotone.fa-calendar-circle-user:after,.fad.fa-calendar-circle-user:after{content:"\e471\e471"}.fa-duotone.fa-calendar-clock:after,.fa-duotone.fa-calendar-time:after,.fad.fa-calendar-clock:after,.fad.fa-calendar-time:after{content:"\e0d2\e0d2"}.fa-duotone.fa-calendar-day:after,.fad.fa-calendar-day:after{content:"\f783\f783"}.fa-duotone.fa-calendar-alt:after,.fa-duotone.fa-calendar-days:after,.fad.fa-calendar-alt:after,.fad.fa-calendar-days:after{content:"\f073\f073"}.fa-duotone.fa-calendar-exclamation:after,.fad.fa-calendar-exclamation:after{content:"\f334\f334"}.fa-duotone.fa-calendar-heart:after,.fad.fa-calendar-heart:after{content:"\e0d3\e0d3"}.fa-duotone.fa-calendar-image:after,.fad.fa-calendar-image:after{content:"\e0d4\e0d4"}.fa-duotone.fa-calendar-lines:after,.fa-duotone.fa-calendar-note:after,.fad.fa-calendar-lines:after,.fad.fa-calendar-note:after{content:"\e0d5\e0d5"}.fa-duotone.fa-calendar-lines-pen:after,.fad.fa-calendar-lines-pen:after{content:"\e472\e472"}.fa-duotone.fa-calendar-minus:after,.fad.fa-calendar-minus:after{content:"\f272\f272"}.fa-duotone.fa-calendar-edit:after,.fa-duotone.fa-calendar-pen:after,.fad.fa-calendar-edit:after,.fad.fa-calendar-pen:after{content:"\f333\f333"}.fa-duotone.fa-calendar-plus:after,.fad.fa-calendar-plus:after{content:"\f271\f271"}.fa-duotone.fa-calendar-range:after,.fad.fa-calendar-range:after{content:"\e0d6\e0d6"}.fa-duotone.fa-calendar-star:after,.fad.fa-calendar-star:after{content:"\f736\f736"}.fa-duotone.fa-calendar-week:after,.fad.fa-calendar-week:after{content:"\f784\f784"}.fa-duotone.fa-calendar-times:after,.fa-duotone.fa-calendar-xmark:after,.fad.fa-calendar-times:after,.fad.fa-calendar-xmark:after{content:"\f273\f273"}.fa-duotone.fa-calendars:after,.fad.fa-calendars:after{content:"\e0d7\e0d7"}.fa-duotone.fa-camcorder:after,.fa-duotone.fa-video-handheld:after,.fad.fa-camcorder:after,.fad.fa-video-handheld:after{content:"\f8a8\f8a8"}.fa-duotone.fa-camera-alt:after,.fa-duotone.fa-camera:after,.fad.fa-camera-alt:after,.fad.fa-camera:after{content:"\f030\f030"}.fa-duotone.fa-camera-cctv:after,.fa-duotone.fa-cctv:after,.fad.fa-camera-cctv:after,.fad.fa-cctv:after{content:"\f8ac\f8ac"}.fa-duotone.fa-camera-movie:after,.fad.fa-camera-movie:after{content:"\f8a9\f8a9"}.fa-duotone.fa-camera-polaroid:after,.fad.fa-camera-polaroid:after{content:"\f8aa\f8aa"}.fa-duotone.fa-camera-retro:after,.fad.fa-camera-retro:after{content:"\f083\f083"}.fa-duotone.fa-camera-rotate:after,.fad.fa-camera-rotate:after{content:"\e0d8\e0d8"}.fa-duotone.fa-camera-home:after,.fa-duotone.fa-camera-security:after,.fad.fa-camera-home:after,.fad.fa-camera-security:after{content:"\f8fe\f8fe"}.fa-duotone.fa-camera-slash:after,.fad.fa-camera-slash:after{content:"\e0d9\e0d9"}.fa-duotone.fa-camera-viewfinder:after,.fa-duotone.fa-screenshot:after,.fad.fa-camera-viewfinder:after,.fad.fa-screenshot:after{content:"\e0da\e0da"}.fa-duotone.fa-camera-web:after,.fa-duotone.fa-webcam:after,.fad.fa-camera-web:after,.fad.fa-webcam:after{content:"\f832\f832"}.fa-duotone.fa-camera-web-slash:after,.fa-duotone.fa-webcam-slash:after,.fad.fa-camera-web-slash:after,.fad.fa-webcam-slash:after{content:"\f833\f833"}.fa-duotone.fa-campfire:after,.fad.fa-campfire:after{content:"\f6ba\f6ba"}.fa-duotone.fa-campground:after,.fad.fa-campground:after{content:"\f6bb\f6bb"}.fa-duotone.fa-can-food:after,.fad.fa-can-food:after{content:"\e3e6\e3e6"}.fa-duotone.fa-candle-holder:after,.fad.fa-candle-holder:after{content:"\f6bc\f6bc"}.fa-duotone.fa-candy:after,.fad.fa-candy:after{content:"\e3e7\e3e7"}.fa-duotone.fa-candy-bar:after,.fa-duotone.fa-chocolate-bar:after,.fad.fa-candy-bar:after,.fad.fa-chocolate-bar:after{content:"\e3e8\e3e8"}.fa-duotone.fa-candy-cane:after,.fad.fa-candy-cane:after{content:"\f786\f786"}.fa-duotone.fa-candy-corn:after,.fad.fa-candy-corn:after{content:"\f6bd\f6bd"}.fa-duotone.fa-cannabis:after,.fad.fa-cannabis:after{content:"\f55f\f55f"}.fa-duotone.fa-capsules:after,.fad.fa-capsules:after{content:"\f46b\f46b"}.fa-duotone.fa-automobile:after,.fa-duotone.fa-car:after,.fad.fa-automobile:after,.fad.fa-car:after{content:"\f1b9\f1b9"}.fa-duotone.fa-battery-car:after,.fa-duotone.fa-car-battery:after,.fad.fa-battery-car:after,.fad.fa-car-battery:after{content:"\f5df\f5df"}.fa-duotone.fa-car-bolt:after,.fad.fa-car-bolt:after{content:"\e341\e341"}.fa-duotone.fa-car-building:after,.fad.fa-car-building:after{content:"\f859\f859"}.fa-duotone.fa-car-bump:after,.fad.fa-car-bump:after{content:"\f5e0\f5e0"}.fa-duotone.fa-car-burst:after,.fa-duotone.fa-car-crash:after,.fad.fa-car-burst:after,.fad.fa-car-crash:after{content:"\f5e1\f5e1"}.fa-duotone.fa-car-bus:after,.fad.fa-car-bus:after{content:"\f85a\f85a"}.fa-duotone.fa-car-circle-bolt:after,.fad.fa-car-circle-bolt:after{content:"\e342\e342"}.fa-duotone.fa-car-garage:after,.fad.fa-car-garage:after{content:"\f5e2\f5e2"}.fa-duotone.fa-car-mirrors:after,.fad.fa-car-mirrors:after{content:"\e343\e343"}.fa-duotone.fa-car-on:after,.fad.fa-car-on:after{content:"\e4dd\e4dd"}.fa-duotone.fa-car-alt:after,.fa-duotone.fa-car-rear:after,.fad.fa-car-alt:after,.fad.fa-car-rear:after{content:"\f5de\f5de"}.fa-duotone.fa-car-side:after,.fad.fa-car-side:after{content:"\f5e4\f5e4"}.fa-duotone.fa-car-side-bolt:after,.fad.fa-car-side-bolt:after{content:"\e344\e344"}.fa-duotone.fa-car-tilt:after,.fad.fa-car-tilt:after{content:"\f5e5\f5e5"}.fa-duotone.fa-car-tunnel:after,.fad.fa-car-tunnel:after{content:"\e4de\e4de"}.fa-duotone.fa-car-wash:after,.fad.fa-car-wash:after{content:"\f5e6\f5e6"}.fa-duotone.fa-car-mechanic:after,.fa-duotone.fa-car-wrench:after,.fad.fa-car-mechanic:after,.fad.fa-car-wrench:after{content:"\f5e3\f5e3"}.fa-duotone.fa-caravan:after,.fad.fa-caravan:after{content:"\f8ff\f8ff"}.fa-duotone.fa-caravan-alt:after,.fa-duotone.fa-caravan-simple:after,.fad.fa-caravan-alt:after,.fad.fa-caravan-simple:after{content:"\e000\e000"}.fa-duotone.fa-card-club:after,.fad.fa-card-club:after{content:"\e3e9\e3e9"}.fa-duotone.fa-card-diamond:after,.fad.fa-card-diamond:after{content:"\e3ea\e3ea"}.fa-duotone.fa-card-heart:after,.fad.fa-card-heart:after{content:"\e3eb\e3eb"}.fa-duotone.fa-card-spade:after,.fad.fa-card-spade:after{content:"\e3ec\e3ec"}.fa-duotone.fa-cards:after,.fad.fa-cards:after{content:"\e3ed\e3ed"}.fa-duotone.fa-cards-blank:after,.fad.fa-cards-blank:after{content:"\e4df\e4df"}.fa-duotone.fa-caret-down:after,.fad.fa-caret-down:after{content:"\f0d7\f0d7"}.fa-duotone.fa-caret-left:after,.fad.fa-caret-left:after{content:"\f0d9\f0d9"}.fa-duotone.fa-caret-right:after,.fad.fa-caret-right:after{content:"\f0da\f0da"}.fa-duotone.fa-caret-up:after,.fad.fa-caret-up:after{content:"\f0d8\f0d8"}.fa-duotone.fa-carrot:after,.fad.fa-carrot:after{content:"\f787\f787"}.fa-duotone.fa-cars:after,.fad.fa-cars:after{content:"\f85b\f85b"}.fa-duotone.fa-cart-arrow-down:after,.fad.fa-cart-arrow-down:after{content:"\f218\f218"}.fa-duotone.fa-cart-arrow-up:after,.fad.fa-cart-arrow-up:after{content:"\e3ee\e3ee"}.fa-duotone.fa-cart-circle-arrow-down:after,.fad.fa-cart-circle-arrow-down:after{content:"\e3ef\e3ef"}.fa-duotone.fa-cart-circle-arrow-up:after,.fad.fa-cart-circle-arrow-up:after{content:"\e3f0\e3f0"}.fa-duotone.fa-cart-circle-check:after,.fad.fa-cart-circle-check:after{content:"\e3f1\e3f1"}.fa-duotone.fa-cart-circle-exclamation:after,.fad.fa-cart-circle-exclamation:after{content:"\e3f2\e3f2"}.fa-duotone.fa-cart-circle-plus:after,.fad.fa-cart-circle-plus:after{content:"\e3f3\e3f3"}.fa-duotone.fa-cart-circle-xmark:after,.fad.fa-cart-circle-xmark:after{content:"\e3f4\e3f4"}.fa-duotone.fa-cart-flatbed:after,.fa-duotone.fa-dolly-flatbed:after,.fad.fa-cart-flatbed:after,.fad.fa-dolly-flatbed:after{content:"\f474\f474"}.fa-duotone.fa-cart-flatbed-boxes:after,.fa-duotone.fa-dolly-flatbed-alt:after,.fad.fa-cart-flatbed-boxes:after,.fad.fa-dolly-flatbed-alt:after{content:"\f475\f475"}.fa-duotone.fa-cart-flatbed-empty:after,.fa-duotone.fa-dolly-flatbed-empty:after,.fad.fa-cart-flatbed-empty:after,.fad.fa-dolly-flatbed-empty:after{content:"\f476\f476"}.fa-duotone.fa-cart-flatbed-suitcase:after,.fa-duotone.fa-luggage-cart:after,.fad.fa-cart-flatbed-suitcase:after,.fad.fa-luggage-cart:after{content:"\f59d\f59d"}.fa-duotone.fa-cart-minus:after,.fad.fa-cart-minus:after{content:"\e0db\e0db"}.fa-duotone.fa-cart-plus:after,.fad.fa-cart-plus:after{content:"\f217\f217"}.fa-duotone.fa-cart-shopping:after,.fa-duotone.fa-shopping-cart:after,.fad.fa-cart-shopping:after,.fad.fa-shopping-cart:after{content:"\f07a\f07a"}.fa-duotone.fa-cart-shopping-fast:after,.fad.fa-cart-shopping-fast:after{content:"\e0dc\e0dc"}.fa-duotone.fa-cart-xmark:after,.fad.fa-cart-xmark:after{content:"\e0dd\e0dd"}.fa-duotone.fa-cash-register:after,.fad.fa-cash-register:after{content:"\f788\f788"}.fa-duotone.fa-betamax:after,.fa-duotone.fa-cassette-betamax:after,.fad.fa-betamax:after,.fad.fa-cassette-betamax:after{content:"\f8a4\f8a4"}.fa-duotone.fa-cassette-tape:after,.fad.fa-cassette-tape:after{content:"\f8ab\f8ab"}.fa-duotone.fa-cassette-vhs:after,.fa-duotone.fa-vhs:after,.fad.fa-cassette-vhs:after,.fad.fa-vhs:after{content:"\f8ec\f8ec"}.fa-duotone.fa-castle:after,.fad.fa-castle:after{content:"\e0de\e0de"}.fa-duotone.fa-cat:after,.fad.fa-cat:after{content:"\f6be\f6be"}.fa-duotone.fa-cat-space:after,.fad.fa-cat-space:after{content:"\e001\e001"}.fa-duotone.fa-cauldron:after,.fad.fa-cauldron:after{content:"\f6bf\f6bf"}.fa-duotone.fa-cedi-sign:after,.fad.fa-cedi-sign:after{content:"\e0df\e0df"}.fa-duotone.fa-cent-sign:after,.fad.fa-cent-sign:after{content:"\e3f5\e3f5"}.fa-duotone.fa-certificate:after,.fad.fa-certificate:after{content:"\f0a3\f0a3"}.fa-duotone.fa-chair:after,.fad.fa-chair:after{content:"\f6c0\f6c0"}.fa-duotone.fa-chair-office:after,.fad.fa-chair-office:after{content:"\f6c1\f6c1"}.fa-duotone.fa-blackboard:after,.fa-duotone.fa-chalkboard:after,.fad.fa-blackboard:after,.fad.fa-chalkboard:after{content:"\f51b\f51b"}.fa-duotone.fa-chalkboard-teacher:after,.fa-duotone.fa-chalkboard-user:after,.fad.fa-chalkboard-teacher:after,.fad.fa-chalkboard-user:after{content:"\f51c\f51c"}.fa-duotone.fa-champagne-glass:after,.fa-duotone.fa-glass-champagne:after,.fad.fa-champagne-glass:after,.fad.fa-glass-champagne:after{content:"\f79e\f79e"}.fa-duotone.fa-champagne-glasses:after,.fa-duotone.fa-glass-cheers:after,.fad.fa-champagne-glasses:after,.fad.fa-glass-cheers:after{content:"\f79f\f79f"}.fa-duotone.fa-charging-station:after,.fad.fa-charging-station:after{content:"\f5e7\f5e7"}.fa-duotone.fa-area-chart:after,.fa-duotone.fa-chart-area:after,.fad.fa-area-chart:after,.fad.fa-chart-area:after{content:"\f1fe\f1fe"}.fa-duotone.fa-bar-chart:after,.fa-duotone.fa-chart-bar:after,.fad.fa-bar-chart:after,.fad.fa-chart-bar:after{content:"\f080\f080"}.fa-duotone.fa-chart-bullet:after,.fad.fa-chart-bullet:after{content:"\e0e1\e0e1"}.fa-duotone.fa-chart-candlestick:after,.fad.fa-chart-candlestick:after{content:"\e0e2\e0e2"}.fa-duotone.fa-chart-column:after,.fad.fa-chart-column:after{content:"\e0e3\e0e3"}.fa-duotone.fa-chart-gantt:after,.fad.fa-chart-gantt:after{content:"\e0e4\e0e4"}.fa-duotone.fa-chart-line:after,.fa-duotone.fa-line-chart:after,.fad.fa-chart-line:after,.fad.fa-line-chart:after{content:"\f201\f201"}.fa-duotone.fa-chart-line-down:after,.fad.fa-chart-line-down:after{content:"\f64d\f64d"}.fa-duotone.fa-chart-line-up:after,.fad.fa-chart-line-up:after{content:"\e0e5\e0e5"}.fa-duotone.fa-analytics:after,.fa-duotone.fa-chart-mixed:after,.fad.fa-analytics:after,.fad.fa-chart-mixed:after{content:"\f643\f643"}.fa-duotone.fa-chart-network:after,.fad.fa-chart-network:after{content:"\f78a\f78a"}.fa-duotone.fa-chart-pie:after,.fa-duotone.fa-pie-chart:after,.fad.fa-chart-pie:after,.fad.fa-pie-chart:after{content:"\f200\f200"}.fa-duotone.fa-chart-pie-alt:after,.fa-duotone.fa-chart-pie-simple:after,.fad.fa-chart-pie-alt:after,.fad.fa-chart-pie-simple:after{content:"\f64e\f64e"}.fa-duotone.fa-chart-pyramid:after,.fad.fa-chart-pyramid:after{content:"\e0e6\e0e6"}.fa-duotone.fa-chart-radar:after,.fad.fa-chart-radar:after{content:"\e0e7\e0e7"}.fa-duotone.fa-chart-scatter:after,.fad.fa-chart-scatter:after{content:"\f7ee\f7ee"}.fa-duotone.fa-chart-scatter-3d:after,.fad.fa-chart-scatter-3d:after{content:"\e0e8\e0e8"}.fa-duotone.fa-chart-scatter-bubble:after,.fad.fa-chart-scatter-bubble:after{content:"\e0e9\e0e9"}.fa-duotone.fa-chart-simple:after,.fad.fa-chart-simple:after{content:"\e473\e473"}.fa-duotone.fa-chart-simple-horizontal:after,.fad.fa-chart-simple-horizontal:after{content:"\e474\e474"}.fa-duotone.fa-chart-tree-map:after,.fad.fa-chart-tree-map:after{content:"\e0ea\e0ea"}.fa-duotone.fa-chart-user:after,.fa-duotone.fa-user-chart:after,.fad.fa-chart-user:after,.fad.fa-user-chart:after{content:"\f6a3\f6a3"}.fa-duotone.fa-chart-waterfall:after,.fad.fa-chart-waterfall:after{content:"\e0eb\e0eb"}.fa-duotone.fa-check:after,.fad.fa-check:after{content:"\f00c\f00c"}.fa-duotone.fa-check-double:after,.fad.fa-check-double:after{content:"\f560\f560"}.fa-duotone.fa-check-to-slot:after,.fa-duotone.fa-vote-yea:after,.fad.fa-check-to-slot:after,.fad.fa-vote-yea:after{content:"\f772\f772"}.fa-duotone.fa-cheese:after,.fad.fa-cheese:after{content:"\f7ef\f7ef"}.fa-duotone.fa-cheese-swiss:after,.fad.fa-cheese-swiss:after{content:"\f7f0\f7f0"}.fa-duotone.fa-cherries:after,.fad.fa-cherries:after{content:"\e0ec\e0ec"}.fa-duotone.fa-chess:after,.fad.fa-chess:after{content:"\f439\f439"}.fa-duotone.fa-chess-bishop:after,.fad.fa-chess-bishop:after{content:"\f43a\f43a"}.fa-duotone.fa-chess-bishop-alt:after,.fa-duotone.fa-chess-bishop-piece:after,.fad.fa-chess-bishop-alt:after,.fad.fa-chess-bishop-piece:after{content:"\f43b\f43b"}.fa-duotone.fa-chess-board:after,.fad.fa-chess-board:after{content:"\f43c\f43c"}.fa-duotone.fa-chess-clock:after,.fad.fa-chess-clock:after{content:"\f43d\f43d"}.fa-duotone.fa-chess-clock-alt:after,.fa-duotone.fa-chess-clock-flip:after,.fad.fa-chess-clock-alt:after,.fad.fa-chess-clock-flip:after{content:"\f43e\f43e"}.fa-duotone.fa-chess-king:after,.fad.fa-chess-king:after{content:"\f43f\f43f"}.fa-duotone.fa-chess-king-alt:after,.fa-duotone.fa-chess-king-piece:after,.fad.fa-chess-king-alt:after,.fad.fa-chess-king-piece:after{content:"\f440\f440"}.fa-duotone.fa-chess-knight:after,.fad.fa-chess-knight:after{content:"\f441\f441"}.fa-duotone.fa-chess-knight-alt:after,.fa-duotone.fa-chess-knight-piece:after,.fad.fa-chess-knight-alt:after,.fad.fa-chess-knight-piece:after{content:"\f442\f442"}.fa-duotone.fa-chess-pawn:after,.fad.fa-chess-pawn:after{content:"\f443\f443"}.fa-duotone.fa-chess-pawn-alt:after,.fa-duotone.fa-chess-pawn-piece:after,.fad.fa-chess-pawn-alt:after,.fad.fa-chess-pawn-piece:after{content:"\f444\f444"}.fa-duotone.fa-chess-queen:after,.fad.fa-chess-queen:after{content:"\f445\f445"}.fa-duotone.fa-chess-queen-alt:after,.fa-duotone.fa-chess-queen-piece:after,.fad.fa-chess-queen-alt:after,.fad.fa-chess-queen-piece:after{content:"\f446\f446"}.fa-duotone.fa-chess-rook:after,.fad.fa-chess-rook:after{content:"\f447\f447"}.fa-duotone.fa-chess-rook-alt:after,.fa-duotone.fa-chess-rook-piece:after,.fad.fa-chess-rook-alt:after,.fad.fa-chess-rook-piece:after{content:"\f448\f448"}.fa-duotone.fa-chestnut:after,.fad.fa-chestnut:after{content:"\e3f6\e3f6"}.fa-duotone.fa-chevron-down:after,.fad.fa-chevron-down:after{content:"\f078\f078"}.fa-duotone.fa-chevron-left:after,.fad.fa-chevron-left:after{content:"\f053\f053"}.fa-duotone.fa-chevron-right:after,.fad.fa-chevron-right:after{content:"\f054\f054"}.fa-duotone.fa-chevron-up:after,.fad.fa-chevron-up:after{content:"\f077\f077"}.fa-duotone.fa-chevron-double-down:after,.fa-duotone.fa-chevrons-down:after,.fad.fa-chevron-double-down:after,.fad.fa-chevrons-down:after{content:"\f322\f322"}.fa-duotone.fa-chevron-double-left:after,.fa-duotone.fa-chevrons-left:after,.fad.fa-chevron-double-left:after,.fad.fa-chevrons-left:after{content:"\f323\f323"}.fa-duotone.fa-chevron-double-right:after,.fa-duotone.fa-chevrons-right:after,.fad.fa-chevron-double-right:after,.fad.fa-chevrons-right:after{content:"\f324\f324"}.fa-duotone.fa-chevron-double-up:after,.fa-duotone.fa-chevrons-up:after,.fad.fa-chevron-double-up:after,.fad.fa-chevrons-up:after{content:"\f325\f325"}.fa-duotone.fa-child:after,.fad.fa-child:after{content:"\f1ae\f1ae"}.fa-duotone.fa-child-dress:after,.fad.fa-child-dress:after{content:"\e59c\e59c"}.fa-duotone.fa-child-reaching:after,.fad.fa-child-reaching:after{content:"\e59d\e59d"}.fa-duotone.fa-child-rifle:after,.fad.fa-child-rifle:after{content:"\e4e0\e4e0"}.fa-duotone.fa-children:after,.fad.fa-children:after{content:"\e4e1\e4e1"}.fa-duotone.fa-chimney:after,.fad.fa-chimney:after{content:"\f78b\f78b"}.fa-duotone.fa-chopsticks:after,.fad.fa-chopsticks:after{content:"\e3f7\e3f7"}.fa-duotone.fa-church:after,.fad.fa-church:after{content:"\f51d\f51d"}.fa-duotone.fa-circle:after,.fad.fa-circle:after{content:"\f111\f111"}.fa-duotone.fa-circle-0:after,.fad.fa-circle-0:after{content:"\e0ed\e0ed"}.fa-duotone.fa-circle-1:after,.fad.fa-circle-1:after{content:"\e0ee\e0ee"}.fa-duotone.fa-circle-2:after,.fad.fa-circle-2:after{content:"\e0ef\e0ef"}.fa-duotone.fa-circle-3:after,.fad.fa-circle-3:after{content:"\e0f0\e0f0"}.fa-duotone.fa-circle-4:after,.fad.fa-circle-4:after{content:"\e0f1\e0f1"}.fa-duotone.fa-circle-5:after,.fad.fa-circle-5:after{content:"\e0f2\e0f2"}.fa-duotone.fa-circle-6:after,.fad.fa-circle-6:after{content:"\e0f3\e0f3"}.fa-duotone.fa-circle-7:after,.fad.fa-circle-7:after{content:"\e0f4\e0f4"}.fa-duotone.fa-circle-8:after,.fad.fa-circle-8:after{content:"\e0f5\e0f5"}.fa-duotone.fa-circle-9:after,.fad.fa-circle-9:after{content:"\e0f6\e0f6"}.fa-duotone.fa-circle-a:after,.fad.fa-circle-a:after{content:"\e0f7\e0f7"}.fa-duotone.fa-circle-ampersand:after,.fad.fa-circle-ampersand:after{content:"\e0f8\e0f8"}.fa-duotone.fa-arrow-circle-down:after,.fa-duotone.fa-circle-arrow-down:after,.fad.fa-arrow-circle-down:after,.fad.fa-circle-arrow-down:after{content:"\f0ab\f0ab"}.fa-duotone.fa-circle-arrow-down-left:after,.fad.fa-circle-arrow-down-left:after{content:"\e0f9\e0f9"}.fa-duotone.fa-circle-arrow-down-right:after,.fad.fa-circle-arrow-down-right:after{content:"\e0fa\e0fa"}.fa-duotone.fa-arrow-circle-left:after,.fa-duotone.fa-circle-arrow-left:after,.fad.fa-arrow-circle-left:after,.fad.fa-circle-arrow-left:after{content:"\f0a8\f0a8"}.fa-duotone.fa-arrow-circle-right:after,.fa-duotone.fa-circle-arrow-right:after,.fad.fa-arrow-circle-right:after,.fad.fa-circle-arrow-right:after{content:"\f0a9\f0a9"}.fa-duotone.fa-arrow-circle-up:after,.fa-duotone.fa-circle-arrow-up:after,.fad.fa-arrow-circle-up:after,.fad.fa-circle-arrow-up:after{content:"\f0aa\f0aa"}.fa-duotone.fa-circle-arrow-up-left:after,.fad.fa-circle-arrow-up-left:after{content:"\e0fb\e0fb"}.fa-duotone.fa-circle-arrow-up-right:after,.fad.fa-circle-arrow-up-right:after{content:"\e0fc\e0fc"}.fa-duotone.fa-circle-b:after,.fad.fa-circle-b:after{content:"\e0fd\e0fd"}.fa-duotone.fa-circle-bolt:after,.fad.fa-circle-bolt:after{content:"\e0fe\e0fe"}.fa-duotone.fa-book-circle:after,.fa-duotone.fa-circle-book-open:after,.fad.fa-book-circle:after,.fad.fa-circle-book-open:after{content:"\e0ff\e0ff"}.fa-duotone.fa-bookmark-circle:after,.fa-duotone.fa-circle-bookmark:after,.fad.fa-bookmark-circle:after,.fad.fa-circle-bookmark:after{content:"\e100\e100"}.fa-duotone.fa-circle-c:after,.fad.fa-circle-c:after{content:"\e101\e101"}.fa-duotone.fa-calendar-circle:after,.fa-duotone.fa-circle-calendar:after,.fad.fa-calendar-circle:after,.fad.fa-circle-calendar:after{content:"\e102\e102"}.fa-duotone.fa-camera-circle:after,.fa-duotone.fa-circle-camera:after,.fad.fa-camera-circle:after,.fad.fa-circle-camera:after{content:"\e103\e103"}.fa-duotone.fa-caret-circle-down:after,.fa-duotone.fa-circle-caret-down:after,.fad.fa-caret-circle-down:after,.fad.fa-circle-caret-down:after{content:"\f32d\f32d"}.fa-duotone.fa-caret-circle-left:after,.fa-duotone.fa-circle-caret-left:after,.fad.fa-caret-circle-left:after,.fad.fa-circle-caret-left:after{content:"\f32e\f32e"}.fa-duotone.fa-caret-circle-right:after,.fa-duotone.fa-circle-caret-right:after,.fad.fa-caret-circle-right:after,.fad.fa-circle-caret-right:after{content:"\f330\f330"}.fa-duotone.fa-caret-circle-up:after,.fa-duotone.fa-circle-caret-up:after,.fad.fa-caret-circle-up:after,.fad.fa-circle-caret-up:after{content:"\f331\f331"}.fa-duotone.fa-check-circle:after,.fa-duotone.fa-circle-check:after,.fad.fa-check-circle:after,.fad.fa-circle-check:after{content:"\f058\f058"}.fa-duotone.fa-chevron-circle-down:after,.fa-duotone.fa-circle-chevron-down:after,.fad.fa-chevron-circle-down:after,.fad.fa-circle-chevron-down:after{content:"\f13a\f13a"}.fa-duotone.fa-chevron-circle-left:after,.fa-duotone.fa-circle-chevron-left:after,.fad.fa-chevron-circle-left:after,.fad.fa-circle-chevron-left:after{content:"\f137\f137"}.fa-duotone.fa-chevron-circle-right:after,.fa-duotone.fa-circle-chevron-right:after,.fad.fa-chevron-circle-right:after,.fad.fa-circle-chevron-right:after{content:"\f138\f138"}.fa-duotone.fa-chevron-circle-up:after,.fa-duotone.fa-circle-chevron-up:after,.fad.fa-chevron-circle-up:after,.fad.fa-circle-chevron-up:after{content:"\f139\f139"}.fa-duotone.fa-circle-d:after,.fad.fa-circle-d:after{content:"\e104\e104"}.fa-duotone.fa-circle-dashed:after,.fad.fa-circle-dashed:after{content:"\e105\e105"}.fa-duotone.fa-circle-divide:after,.fad.fa-circle-divide:after{content:"\e106\e106"}.fa-duotone.fa-circle-dollar:after,.fa-duotone.fa-dollar-circle:after,.fa-duotone.fa-usd-circle:after,.fad.fa-circle-dollar:after,.fad.fa-dollar-circle:after,.fad.fa-usd-circle:after{content:"\f2e8\f2e8"}.fa-duotone.fa-circle-dollar-to-slot:after,.fa-duotone.fa-donate:after,.fad.fa-circle-dollar-to-slot:after,.fad.fa-donate:after{content:"\f4b9\f4b9"}.fa-duotone.fa-circle-dot:after,.fa-duotone.fa-dot-circle:after,.fad.fa-circle-dot:after,.fad.fa-dot-circle:after{content:"\f192\f192"}.fa-duotone.fa-arrow-alt-circle-down:after,.fa-duotone.fa-circle-down:after,.fad.fa-arrow-alt-circle-down:after,.fad.fa-circle-down:after{content:"\f358\f358"}.fa-duotone.fa-circle-down-left:after,.fad.fa-circle-down-left:after{content:"\e107\e107"}.fa-duotone.fa-circle-down-right:after,.fad.fa-circle-down-right:after{content:"\e108\e108"}.fa-duotone.fa-circle-e:after,.fad.fa-circle-e:after{content:"\e109\e109"}.fa-duotone.fa-circle-ellipsis:after,.fad.fa-circle-ellipsis:after{content:"\e10a\e10a"}.fa-duotone.fa-circle-ellipsis-vertical:after,.fad.fa-circle-ellipsis-vertical:after{content:"\e10b\e10b"}.fa-duotone.fa-circle-envelope:after,.fa-duotone.fa-envelope-circle:after,.fad.fa-circle-envelope:after,.fad.fa-envelope-circle:after{content:"\e10c\e10c"}.fa-duotone.fa-circle-exclamation:after,.fa-duotone.fa-exclamation-circle:after,.fad.fa-circle-exclamation:after,.fad.fa-exclamation-circle:after{content:"\f06a\f06a"}.fa-duotone.fa-circle-exclamation-check:after,.fad.fa-circle-exclamation-check:after{content:"\e10d\e10d"}.fa-duotone.fa-circle-f:after,.fad.fa-circle-f:after{content:"\e10e\e10e"}.fa-duotone.fa-circle-g:after,.fad.fa-circle-g:after{content:"\e10f\e10f"}.fa-duotone.fa-circle-h:after,.fa-duotone.fa-hospital-symbol:after,.fad.fa-circle-h:after,.fad.fa-hospital-symbol:after{content:"\f47e\f47e"}.fa-duotone.fa-circle-half:after,.fad.fa-circle-half:after{content:"\e110\e110"}.fa-duotone.fa-adjust:after,.fa-duotone.fa-circle-half-stroke:after,.fad.fa-adjust:after,.fad.fa-circle-half-stroke:after{content:"\f042\f042"}.fa-duotone.fa-circle-heart:after,.fa-duotone.fa-heart-circle:after,.fad.fa-circle-heart:after,.fad.fa-heart-circle:after{content:"\f4c7\f4c7"}.fa-duotone.fa-circle-i:after,.fad.fa-circle-i:after{content:"\e111\e111"}.fa-duotone.fa-circle-info:after,.fa-duotone.fa-info-circle:after,.fad.fa-circle-info:after,.fad.fa-info-circle:after{content:"\f05a\f05a"}.fa-duotone.fa-circle-j:after,.fad.fa-circle-j:after{content:"\e112\e112"}.fa-duotone.fa-circle-k:after,.fad.fa-circle-k:after{content:"\e113\e113"}.fa-duotone.fa-circle-l:after,.fad.fa-circle-l:after{content:"\e114\e114"}.fa-duotone.fa-arrow-alt-circle-left:after,.fa-duotone.fa-circle-left:after,.fad.fa-arrow-alt-circle-left:after,.fad.fa-circle-left:after{content:"\f359\f359"}.fa-duotone.fa-circle-location-arrow:after,.fa-duotone.fa-location-circle:after,.fad.fa-circle-location-arrow:after,.fad.fa-location-circle:after{content:"\f602\f602"}.fa-duotone.fa-circle-m:after,.fad.fa-circle-m:after{content:"\e115\e115"}.fa-duotone.fa-circle-microphone:after,.fa-duotone.fa-microphone-circle:after,.fad.fa-circle-microphone:after,.fad.fa-microphone-circle:after{content:"\e116\e116"}.fa-duotone.fa-circle-microphone-lines:after,.fa-duotone.fa-microphone-circle-alt:after,.fad.fa-circle-microphone-lines:after,.fad.fa-microphone-circle-alt:after{content:"\e117\e117"}.fa-duotone.fa-circle-minus:after,.fa-duotone.fa-minus-circle:after,.fad.fa-circle-minus:after,.fad.fa-minus-circle:after{content:"\f056\f056"}.fa-duotone.fa-circle-n:after,.fad.fa-circle-n:after{content:"\e118\e118"}.fa-duotone.fa-circle-nodes:after,.fad.fa-circle-nodes:after{content:"\e4e2\e4e2"}.fa-duotone.fa-circle-notch:after,.fad.fa-circle-notch:after{content:"\f1ce\f1ce"}.fa-duotone.fa-circle-o:after,.fad.fa-circle-o:after{content:"\e119\e119"}.fa-duotone.fa-circle-p:after,.fad.fa-circle-p:after{content:"\e11a\e11a"}.fa-duotone.fa-circle-parking:after,.fa-duotone.fa-parking-circle:after,.fad.fa-circle-parking:after,.fad.fa-parking-circle:after{content:"\f615\f615"}.fa-duotone.fa-circle-pause:after,.fa-duotone.fa-pause-circle:after,.fad.fa-circle-pause:after,.fad.fa-pause-circle:after{content:"\f28b\f28b"}.fa-duotone.fa-circle-phone:after,.fa-duotone.fa-phone-circle:after,.fad.fa-circle-phone:after,.fad.fa-phone-circle:after{content:"\e11b\e11b"}.fa-duotone.fa-circle-phone-flip:after,.fa-duotone.fa-phone-circle-alt:after,.fad.fa-circle-phone-flip:after,.fad.fa-phone-circle-alt:after{content:"\e11c\e11c"}.fa-duotone.fa-circle-phone-hangup:after,.fa-duotone.fa-phone-circle-down:after,.fad.fa-circle-phone-hangup:after,.fad.fa-phone-circle-down:after{content:"\e11d\e11d"}.fa-duotone.fa-circle-play:after,.fa-duotone.fa-play-circle:after,.fad.fa-circle-play:after,.fad.fa-play-circle:after{content:"\f144\f144"}.fa-duotone.fa-circle-plus:after,.fa-duotone.fa-plus-circle:after,.fad.fa-circle-plus:after,.fad.fa-plus-circle:after{content:"\f055\f055"}.fa-duotone.fa-circle-q:after,.fad.fa-circle-q:after{content:"\e11e\e11e"}.fa-duotone.fa-circle-quarter:after,.fad.fa-circle-quarter:after{content:"\e11f\e11f"}.fa-duotone.fa-circle-quarters:after,.fad.fa-circle-quarters:after{content:"\e3f8\e3f8"}.fa-duotone.fa-circle-question:after,.fa-duotone.fa-question-circle:after,.fad.fa-circle-question:after,.fad.fa-question-circle:after{content:"\f059\f059"}.fa-duotone.fa-circle-r:after,.fad.fa-circle-r:after{content:"\e120\e120"}.fa-duotone.fa-circle-radiation:after,.fa-duotone.fa-radiation-alt:after,.fad.fa-circle-radiation:after,.fad.fa-radiation-alt:after{content:"\f7ba\f7ba"}.fa-duotone.fa-arrow-alt-circle-right:after,.fa-duotone.fa-circle-right:after,.fad.fa-arrow-alt-circle-right:after,.fad.fa-circle-right:after{content:"\f35a\f35a"}.fa-duotone.fa-circle-s:after,.fad.fa-circle-s:after{content:"\e121\e121"}.fa-duotone.fa-circle-small:after,.fad.fa-circle-small:after{content:"\e122\e122"}.fa-duotone.fa-circle-sort:after,.fa-duotone.fa-sort-circle:after,.fad.fa-circle-sort:after,.fad.fa-sort-circle:after{content:"\e030\e030"}.fa-duotone.fa-circle-sort-down:after,.fa-duotone.fa-sort-circle-down:after,.fad.fa-circle-sort-down:after,.fad.fa-sort-circle-down:after{content:"\e031\e031"}.fa-duotone.fa-circle-sort-up:after,.fa-duotone.fa-sort-circle-up:after,.fad.fa-circle-sort-up:after,.fad.fa-sort-circle-up:after{content:"\e032\e032"}.fa-duotone.fa-circle-star:after,.fa-duotone.fa-star-circle:after,.fad.fa-circle-star:after,.fad.fa-star-circle:after{content:"\e123\e123"}.fa-duotone.fa-circle-stop:after,.fa-duotone.fa-stop-circle:after,.fad.fa-circle-stop:after,.fad.fa-stop-circle:after{content:"\f28d\f28d"}.fa-duotone.fa-circle-t:after,.fad.fa-circle-t:after{content:"\e124\e124"}.fa-duotone.fa-circle-three-quarters:after,.fad.fa-circle-three-quarters:after{content:"\e125\e125"}.fa-duotone.fa-circle-trash:after,.fa-duotone.fa-trash-circle:after,.fad.fa-circle-trash:after,.fad.fa-trash-circle:after{content:"\e126\e126"}.fa-duotone.fa-circle-u:after,.fad.fa-circle-u:after{content:"\e127\e127"}.fa-duotone.fa-arrow-alt-circle-up:after,.fa-duotone.fa-circle-up:after,.fad.fa-arrow-alt-circle-up:after,.fad.fa-circle-up:after{content:"\f35b\f35b"}.fa-duotone.fa-circle-up-left:after,.fad.fa-circle-up-left:after{content:"\e128\e128"}.fa-duotone.fa-circle-up-right:after,.fad.fa-circle-up-right:after{content:"\e129\e129"}.fa-duotone.fa-circle-user:after,.fa-duotone.fa-user-circle:after,.fad.fa-circle-user:after,.fad.fa-user-circle:after{content:"\f2bd\f2bd"}.fa-duotone.fa-circle-v:after,.fad.fa-circle-v:after{content:"\e12a\e12a"}.fa-duotone.fa-circle-video:after,.fa-duotone.fa-video-circle:after,.fad.fa-circle-video:after,.fad.fa-video-circle:after{content:"\e12b\e12b"}.fa-duotone.fa-circle-w:after,.fad.fa-circle-w:after{content:"\e12c\e12c"}.fa-duotone.fa-circle-waveform-lines:after,.fa-duotone.fa-waveform-circle:after,.fad.fa-circle-waveform-lines:after,.fad.fa-waveform-circle:after{content:"\e12d\e12d"}.fa-duotone.fa-circle-x:after,.fad.fa-circle-x:after{content:"\e12e\e12e"}.fa-duotone.fa-circle-xmark:after,.fa-duotone.fa-times-circle:after,.fa-duotone.fa-xmark-circle:after,.fad.fa-circle-xmark:after,.fad.fa-times-circle:after,.fad.fa-xmark-circle:after{content:"\f057\f057"}.fa-duotone.fa-circle-y:after,.fad.fa-circle-y:after{content:"\e12f\e12f"}.fa-duotone.fa-circle-z:after,.fad.fa-circle-z:after{content:"\e130\e130"}.fa-duotone.fa-citrus:after,.fad.fa-citrus:after{content:"\e2f4\e2f4"}.fa-duotone.fa-citrus-slice:after,.fad.fa-citrus-slice:after{content:"\e2f5\e2f5"}.fa-duotone.fa-city:after,.fad.fa-city:after{content:"\f64f\f64f"}.fa-duotone.fa-clapperboard:after,.fad.fa-clapperboard:after{content:"\e131\e131"}.fa-duotone.fa-clapperboard-play:after,.fad.fa-clapperboard-play:after{content:"\e132\e132"}.fa-duotone.fa-clarinet:after,.fad.fa-clarinet:after{content:"\f8ad\f8ad"}.fa-duotone.fa-claw-marks:after,.fad.fa-claw-marks:after{content:"\f6c2\f6c2"}.fa-duotone.fa-clipboard:after,.fad.fa-clipboard:after{content:"\f328\f328"}.fa-duotone.fa-clipboard-check:after,.fad.fa-clipboard-check:after{content:"\f46c\f46c"}.fa-duotone.fa-clipboard-list:after,.fad.fa-clipboard-list:after{content:"\f46d\f46d"}.fa-duotone.fa-clipboard-list-check:after,.fad.fa-clipboard-list-check:after{content:"\f737\f737"}.fa-duotone.fa-clipboard-medical:after,.fad.fa-clipboard-medical:after{content:"\e133\e133"}.fa-duotone.fa-clipboard-prescription:after,.fad.fa-clipboard-prescription:after{content:"\f5e8\f5e8"}.fa-duotone.fa-clipboard-question:after,.fad.fa-clipboard-question:after{content:"\e4e3\e4e3"}.fa-duotone.fa-clipboard-user:after,.fad.fa-clipboard-user:after{content:"\f7f3\f7f3"}.fa-duotone.fa-clock-four:after,.fa-duotone.fa-clock:after,.fad.fa-clock-four:after,.fad.fa-clock:after{content:"\f017\f017"}.fa-duotone.fa-clock-desk:after,.fad.fa-clock-desk:after{content:"\e134\e134"}.fa-duotone.fa-clock-eight:after,.fad.fa-clock-eight:after{content:"\e345\e345"}.fa-duotone.fa-clock-eight-thirty:after,.fad.fa-clock-eight-thirty:after{content:"\e346\e346"}.fa-duotone.fa-clock-eleven:after,.fad.fa-clock-eleven:after{content:"\e347\e347"}.fa-duotone.fa-clock-eleven-thirty:after,.fad.fa-clock-eleven-thirty:after{content:"\e348\e348"}.fa-duotone.fa-clock-five:after,.fad.fa-clock-five:after{content:"\e349\e349"}.fa-duotone.fa-clock-five-thirty:after,.fad.fa-clock-five-thirty:after{content:"\e34a\e34a"}.fa-duotone.fa-clock-four-thirty:after,.fad.fa-clock-four-thirty:after{content:"\e34b\e34b"}.fa-duotone.fa-clock-nine:after,.fad.fa-clock-nine:after{content:"\e34c\e34c"}.fa-duotone.fa-clock-nine-thirty:after,.fad.fa-clock-nine-thirty:after{content:"\e34d\e34d"}.fa-duotone.fa-clock-one:after,.fad.fa-clock-one:after{content:"\e34e\e34e"}.fa-duotone.fa-clock-one-thirty:after,.fad.fa-clock-one-thirty:after{content:"\e34f\e34f"}.fa-duotone.fa-clock-rotate-left:after,.fa-duotone.fa-history:after,.fad.fa-clock-rotate-left:after,.fad.fa-history:after{content:"\f1da\f1da"}.fa-duotone.fa-clock-seven:after,.fad.fa-clock-seven:after{content:"\e350\e350"}.fa-duotone.fa-clock-seven-thirty:after,.fad.fa-clock-seven-thirty:after{content:"\e351\e351"}.fa-duotone.fa-clock-six:after,.fad.fa-clock-six:after{content:"\e352\e352"}.fa-duotone.fa-clock-six-thirty:after,.fad.fa-clock-six-thirty:after{content:"\e353\e353"}.fa-duotone.fa-clock-ten:after,.fad.fa-clock-ten:after{content:"\e354\e354"}.fa-duotone.fa-clock-ten-thirty:after,.fad.fa-clock-ten-thirty:after{content:"\e355\e355"}.fa-duotone.fa-clock-three:after,.fad.fa-clock-three:after{content:"\e356\e356"}.fa-duotone.fa-clock-three-thirty:after,.fad.fa-clock-three-thirty:after{content:"\e357\e357"}.fa-duotone.fa-clock-twelve:after,.fad.fa-clock-twelve:after{content:"\e358\e358"}.fa-duotone.fa-clock-twelve-thirty:after,.fad.fa-clock-twelve-thirty:after{content:"\e359\e359"}.fa-duotone.fa-clock-two:after,.fad.fa-clock-two:after{content:"\e35a\e35a"}.fa-duotone.fa-clock-two-thirty:after,.fad.fa-clock-two-thirty:after{content:"\e35b\e35b"}.fa-duotone.fa-clone:after,.fad.fa-clone:after{content:"\f24d\f24d"}.fa-duotone.fa-closed-captioning:after,.fad.fa-closed-captioning:after{content:"\f20a\f20a"}.fa-duotone.fa-closed-captioning-slash:after,.fad.fa-closed-captioning-slash:after{content:"\e135\e135"}.fa-duotone.fa-clothes-hanger:after,.fad.fa-clothes-hanger:after{content:"\e136\e136"}.fa-duotone.fa-cloud:after,.fad.fa-cloud:after{content:"\f0c2\f0c2"}.fa-duotone.fa-cloud-arrow-down:after,.fa-duotone.fa-cloud-download-alt:after,.fa-duotone.fa-cloud-download:after,.fad.fa-cloud-arrow-down:after,.fad.fa-cloud-download-alt:after,.fad.fa-cloud-download:after{content:"\f0ed\f0ed"}.fa-duotone.fa-cloud-arrow-up:after,.fa-duotone.fa-cloud-upload-alt:after,.fa-duotone.fa-cloud-upload:after,.fad.fa-cloud-arrow-up:after,.fad.fa-cloud-upload-alt:after,.fad.fa-cloud-upload:after{content:"\f0ee\f0ee"}.fa-duotone.fa-cloud-bolt:after,.fa-duotone.fa-thunderstorm:after,.fad.fa-cloud-bolt:after,.fad.fa-thunderstorm:after{content:"\f76c\f76c"}.fa-duotone.fa-cloud-bolt-moon:after,.fa-duotone.fa-thunderstorm-moon:after,.fad.fa-cloud-bolt-moon:after,.fad.fa-thunderstorm-moon:after{content:"\f76d\f76d"}.fa-duotone.fa-cloud-bolt-sun:after,.fa-duotone.fa-thunderstorm-sun:after,.fad.fa-cloud-bolt-sun:after,.fad.fa-thunderstorm-sun:after{content:"\f76e\f76e"}.fa-duotone.fa-cloud-check:after,.fad.fa-cloud-check:after{content:"\e35c\e35c"}.fa-duotone.fa-cloud-drizzle:after,.fad.fa-cloud-drizzle:after{content:"\f738\f738"}.fa-duotone.fa-cloud-exclamation:after,.fad.fa-cloud-exclamation:after{content:"\e491\e491"}.fa-duotone.fa-cloud-fog:after,.fa-duotone.fa-fog:after,.fad.fa-cloud-fog:after,.fad.fa-fog:after{content:"\f74e\f74e"}.fa-duotone.fa-cloud-hail:after,.fad.fa-cloud-hail:after{content:"\f739\f739"}.fa-duotone.fa-cloud-hail-mixed:after,.fad.fa-cloud-hail-mixed:after{content:"\f73a\f73a"}.fa-duotone.fa-cloud-meatball:after,.fad.fa-cloud-meatball:after{content:"\f73b\f73b"}.fa-duotone.fa-cloud-minus:after,.fad.fa-cloud-minus:after{content:"\e35d\e35d"}.fa-duotone.fa-cloud-moon:after,.fad.fa-cloud-moon:after{content:"\f6c3\f6c3"}.fa-duotone.fa-cloud-moon-rain:after,.fad.fa-cloud-moon-rain:after{content:"\f73c\f73c"}.fa-duotone.fa-cloud-music:after,.fad.fa-cloud-music:after{content:"\f8ae\f8ae"}.fa-duotone.fa-cloud-plus:after,.fad.fa-cloud-plus:after{content:"\e35e\e35e"}.fa-duotone.fa-cloud-question:after,.fad.fa-cloud-question:after{content:"\e492\e492"}.fa-duotone.fa-cloud-rain:after,.fad.fa-cloud-rain:after{content:"\f73d\f73d"}.fa-duotone.fa-cloud-rainbow:after,.fad.fa-cloud-rainbow:after{content:"\f73e\f73e"}.fa-duotone.fa-cloud-showers:after,.fad.fa-cloud-showers:after{content:"\f73f\f73f"}.fa-duotone.fa-cloud-showers-heavy:after,.fad.fa-cloud-showers-heavy:after{content:"\f740\f740"}.fa-duotone.fa-cloud-showers-water:after,.fad.fa-cloud-showers-water:after{content:"\e4e4\e4e4"}.fa-duotone.fa-cloud-slash:after,.fad.fa-cloud-slash:after{content:"\e137\e137"}.fa-duotone.fa-cloud-sleet:after,.fad.fa-cloud-sleet:after{content:"\f741\f741"}.fa-duotone.fa-cloud-snow:after,.fad.fa-cloud-snow:after{content:"\f742\f742"}.fa-duotone.fa-cloud-sun:after,.fad.fa-cloud-sun:after{content:"\f6c4\f6c4"}.fa-duotone.fa-cloud-sun-rain:after,.fad.fa-cloud-sun-rain:after{content:"\f743\f743"}.fa-duotone.fa-cloud-word:after,.fad.fa-cloud-word:after{content:"\e138\e138"}.fa-duotone.fa-cloud-xmark:after,.fad.fa-cloud-xmark:after{content:"\e35f\e35f"}.fa-duotone.fa-clouds:after,.fad.fa-clouds:after{content:"\f744\f744"}.fa-duotone.fa-clouds-moon:after,.fad.fa-clouds-moon:after{content:"\f745\f745"}.fa-duotone.fa-clouds-sun:after,.fad.fa-clouds-sun:after{content:"\f746\f746"}.fa-duotone.fa-clover:after,.fad.fa-clover:after{content:"\e139\e139"}.fa-duotone.fa-club:after,.fad.fa-club:after{content:"\f327\f327"}.fa-duotone.fa-coconut:after,.fad.fa-coconut:after{content:"\e2f6\e2f6"}.fa-duotone.fa-code:after,.fad.fa-code:after{content:"\f121\f121"}.fa-duotone.fa-code-branch:after,.fad.fa-code-branch:after{content:"\f126\f126"}.fa-duotone.fa-code-commit:after,.fad.fa-code-commit:after{content:"\f386\f386"}.fa-duotone.fa-code-compare:after,.fad.fa-code-compare:after{content:"\e13a\e13a"}.fa-duotone.fa-code-fork:after,.fad.fa-code-fork:after{content:"\e13b\e13b"}.fa-duotone.fa-code-merge:after,.fad.fa-code-merge:after{content:"\f387\f387"}.fa-duotone.fa-code-pull-request:after,.fad.fa-code-pull-request:after{content:"\e13c\e13c"}.fa-duotone.fa-code-pull-request-closed:after,.fad.fa-code-pull-request-closed:after{content:"\e3f9\e3f9"}.fa-duotone.fa-code-pull-request-draft:after,.fad.fa-code-pull-request-draft:after{content:"\e3fa\e3fa"}.fa-duotone.fa-code-simple:after,.fad.fa-code-simple:after{content:"\e13d\e13d"}.fa-duotone.fa-coffee-bean:after,.fad.fa-coffee-bean:after{content:"\e13e\e13e"}.fa-duotone.fa-coffee-beans:after,.fad.fa-coffee-beans:after{content:"\e13f\e13f"}.fa-duotone.fa-coffee-pot:after,.fad.fa-coffee-pot:after{content:"\e002\e002"}.fa-duotone.fa-coffin:after,.fad.fa-coffin:after{content:"\f6c6\f6c6"}.fa-duotone.fa-coffin-cross:after,.fad.fa-coffin-cross:after{content:"\e051\e051"}.fa-duotone.fa-coin:after,.fad.fa-coin:after{content:"\f85c\f85c"}.fa-duotone.fa-coin-blank:after,.fad.fa-coin-blank:after{content:"\e3fb\e3fb"}.fa-duotone.fa-coin-front:after,.fad.fa-coin-front:after{content:"\e3fc\e3fc"}.fa-duotone.fa-coin-vertical:after,.fad.fa-coin-vertical:after{content:"\e3fd\e3fd"}.fa-duotone.fa-coins:after,.fad.fa-coins:after{content:"\f51e\f51e"}.fa-duotone.fa-colon:after,.fad.fa-colon:after{content:"\3a\3a"}.fa-duotone.fa-colon-sign:after,.fad.fa-colon-sign:after{content:"\e140\e140"}.fa-duotone.fa-columns-3:after,.fad.fa-columns-3:after{content:"\e361\e361"}.fa-duotone.fa-comet:after,.fad.fa-comet:after{content:"\e003\e003"}.fa-duotone.fa-comma:after,.fad.fa-comma:after{content:"\2c\2c"}.fa-duotone.fa-command:after,.fad.fa-command:after{content:"\e142\e142"}.fa-duotone.fa-comment:after,.fad.fa-comment:after{content:"\f075\f075"}.fa-duotone.fa-comment-arrow-down:after,.fad.fa-comment-arrow-down:after{content:"\e143\e143"}.fa-duotone.fa-comment-arrow-up:after,.fad.fa-comment-arrow-up:after{content:"\e144\e144"}.fa-duotone.fa-comment-arrow-up-right:after,.fad.fa-comment-arrow-up-right:after{content:"\e145\e145"}.fa-duotone.fa-comment-captions:after,.fad.fa-comment-captions:after{content:"\e146\e146"}.fa-duotone.fa-comment-check:after,.fad.fa-comment-check:after{content:"\f4ac\f4ac"}.fa-duotone.fa-comment-code:after,.fad.fa-comment-code:after{content:"\e147\e147"}.fa-duotone.fa-comment-dollar:after,.fad.fa-comment-dollar:after{content:"\f651\f651"}.fa-duotone.fa-comment-dots:after,.fa-duotone.fa-commenting:after,.fad.fa-comment-dots:after,.fad.fa-commenting:after{content:"\f4ad\f4ad"}.fa-duotone.fa-comment-exclamation:after,.fad.fa-comment-exclamation:after{content:"\f4af\f4af"}.fa-duotone.fa-comment-image:after,.fad.fa-comment-image:after{content:"\e148\e148"}.fa-duotone.fa-comment-lines:after,.fad.fa-comment-lines:after{content:"\f4b0\f4b0"}.fa-duotone.fa-comment-medical:after,.fad.fa-comment-medical:after{content:"\f7f5\f7f5"}.fa-duotone.fa-comment-middle:after,.fad.fa-comment-middle:after{content:"\e149\e149"}.fa-duotone.fa-comment-middle-top:after,.fad.fa-comment-middle-top:after{content:"\e14a\e14a"}.fa-duotone.fa-comment-minus:after,.fad.fa-comment-minus:after{content:"\f4b1\f4b1"}.fa-duotone.fa-comment-music:after,.fad.fa-comment-music:after{content:"\f8b0\f8b0"}.fa-duotone.fa-comment-edit:after,.fa-duotone.fa-comment-pen:after,.fad.fa-comment-edit:after,.fad.fa-comment-pen:after{content:"\f4ae\f4ae"}.fa-duotone.fa-comment-plus:after,.fad.fa-comment-plus:after{content:"\f4b2\f4b2"}.fa-duotone.fa-comment-question:after,.fad.fa-comment-question:after{content:"\e14b\e14b"}.fa-duotone.fa-comment-quote:after,.fad.fa-comment-quote:after{content:"\e14c\e14c"}.fa-duotone.fa-comment-slash:after,.fad.fa-comment-slash:after{content:"\f4b3\f4b3"}.fa-duotone.fa-comment-smile:after,.fad.fa-comment-smile:after{content:"\f4b4\f4b4"}.fa-duotone.fa-comment-sms:after,.fa-duotone.fa-sms:after,.fad.fa-comment-sms:after,.fad.fa-sms:after{content:"\f7cd\f7cd"}.fa-duotone.fa-comment-text:after,.fad.fa-comment-text:after{content:"\e14d\e14d"}.fa-duotone.fa-comment-times:after,.fa-duotone.fa-comment-xmark:after,.fad.fa-comment-times:after,.fad.fa-comment-xmark:after{content:"\f4b5\f4b5"}.fa-duotone.fa-comments:after,.fad.fa-comments:after{content:"\f086\f086"}.fa-duotone.fa-comments-dollar:after,.fad.fa-comments-dollar:after{content:"\f653\f653"}.fa-duotone.fa-comments-question:after,.fad.fa-comments-question:after{content:"\e14e\e14e"}.fa-duotone.fa-comments-question-check:after,.fad.fa-comments-question-check:after{content:"\e14f\e14f"}.fa-duotone.fa-compact-disc:after,.fad.fa-compact-disc:after{content:"\f51f\f51f"}.fa-duotone.fa-compass:after,.fad.fa-compass:after{content:"\f14e\f14e"}.fa-duotone.fa-compass-drafting:after,.fa-duotone.fa-drafting-compass:after,.fad.fa-compass-drafting:after,.fad.fa-drafting-compass:after{content:"\f568\f568"}.fa-duotone.fa-compass-slash:after,.fad.fa-compass-slash:after{content:"\f5e9\f5e9"}.fa-duotone.fa-compress:after,.fad.fa-compress:after{content:"\f066\f066"}.fa-duotone.fa-compress-wide:after,.fad.fa-compress-wide:after{content:"\f326\f326"}.fa-duotone.fa-computer:after,.fad.fa-computer:after{content:"\e4e5\e4e5"}.fa-duotone.fa-computer-classic:after,.fad.fa-computer-classic:after{content:"\f8b1\f8b1"}.fa-duotone.fa-computer-mouse:after,.fa-duotone.fa-mouse:after,.fad.fa-computer-mouse:after,.fad.fa-mouse:after{content:"\f8cc\f8cc"}.fa-duotone.fa-computer-mouse-scrollwheel:after,.fa-duotone.fa-mouse-alt:after,.fad.fa-computer-mouse-scrollwheel:after,.fad.fa-mouse-alt:after{content:"\f8cd\f8cd"}.fa-duotone.fa-computer-speaker:after,.fad.fa-computer-speaker:after{content:"\f8b2\f8b2"}.fa-duotone.fa-container-storage:after,.fad.fa-container-storage:after{content:"\f4b7\f4b7"}.fa-duotone.fa-conveyor-belt:after,.fad.fa-conveyor-belt:after{content:"\f46e\f46e"}.fa-duotone.fa-conveyor-belt-alt:after,.fa-duotone.fa-conveyor-belt-boxes:after,.fad.fa-conveyor-belt-alt:after,.fad.fa-conveyor-belt-boxes:after{content:"\f46f\f46f"}.fa-duotone.fa-conveyor-belt-empty:after,.fad.fa-conveyor-belt-empty:after{content:"\e150\e150"}.fa-duotone.fa-cookie:after,.fad.fa-cookie:after{content:"\f563\f563"}.fa-duotone.fa-cookie-bite:after,.fad.fa-cookie-bite:after{content:"\f564\f564"}.fa-duotone.fa-copy:after,.fad.fa-copy:after{content:"\f0c5\f0c5"}.fa-duotone.fa-copyright:after,.fad.fa-copyright:after{content:"\f1f9\f1f9"}.fa-duotone.fa-corn:after,.fad.fa-corn:after{content:"\f6c7\f6c7"}.fa-duotone.fa-corner:after,.fad.fa-corner:after{content:"\e3fe\e3fe"}.fa-duotone.fa-couch:after,.fad.fa-couch:after{content:"\f4b8\f4b8"}.fa-duotone.fa-cow:after,.fad.fa-cow:after{content:"\f6c8\f6c8"}.fa-duotone.fa-cowbell:after,.fad.fa-cowbell:after{content:"\f8b3\f8b3"}.fa-duotone.fa-cowbell-circle-plus:after,.fa-duotone.fa-cowbell-more:after,.fad.fa-cowbell-circle-plus:after,.fad.fa-cowbell-more:after{content:"\f8b4\f8b4"}.fa-duotone.fa-crab:after,.fad.fa-crab:after{content:"\e3ff\e3ff"}.fa-duotone.fa-crate-apple:after,.fad.fa-crate-apple:after{content:"\f6b1\f6b1"}.fa-duotone.fa-apple-crate:after,.fad.fa-apple-crate:after{content:"\f6b1\f6b1"}.fa-duotone.fa-crate-empty:after,.fad.fa-crate-empty:after{content:"\e151\e151"}.fa-duotone.fa-credit-card-alt:after,.fa-duotone.fa-credit-card:after,.fad.fa-credit-card-alt:after,.fad.fa-credit-card:after{content:"\f09d\f09d"}.fa-duotone.fa-credit-card-blank:after,.fad.fa-credit-card-blank:after{content:"\f389\f389"}.fa-duotone.fa-credit-card-front:after,.fad.fa-credit-card-front:after{content:"\f38a\f38a"}.fa-duotone.fa-cricket-bat-ball:after,.fa-duotone.fa-cricket:after,.fad.fa-cricket-bat-ball:after,.fad.fa-cricket:after{content:"\f449\f449"}.fa-duotone.fa-croissant:after,.fad.fa-croissant:after{content:"\f7f6\f7f6"}.fa-duotone.fa-crop:after,.fad.fa-crop:after{content:"\f125\f125"}.fa-duotone.fa-crop-alt:after,.fa-duotone.fa-crop-simple:after,.fad.fa-crop-alt:after,.fad.fa-crop-simple:after{content:"\f565\f565"}.fa-duotone.fa-cross:after,.fad.fa-cross:after{content:"\f654\f654"}.fa-duotone.fa-crosshairs:after,.fad.fa-crosshairs:after{content:"\f05b\f05b"}.fa-duotone.fa-crosshairs-simple:after,.fad.fa-crosshairs-simple:after{content:"\e59f\e59f"}.fa-duotone.fa-crow:after,.fad.fa-crow:after{content:"\f520\f520"}.fa-duotone.fa-crown:after,.fad.fa-crown:after{content:"\f521\f521"}.fa-duotone.fa-crutch:after,.fad.fa-crutch:after{content:"\f7f7\f7f7"}.fa-duotone.fa-crutches:after,.fad.fa-crutches:after{content:"\f7f8\f7f8"}.fa-duotone.fa-cruzeiro-sign:after,.fad.fa-cruzeiro-sign:after{content:"\e152\e152"}.fa-duotone.fa-crystal-ball:after,.fad.fa-crystal-ball:after{content:"\e362\e362"}.fa-duotone.fa-cube:after,.fad.fa-cube:after{content:"\f1b2\f1b2"}.fa-duotone.fa-cubes:after,.fad.fa-cubes:after{content:"\f1b3\f1b3"}.fa-duotone.fa-cubes-stacked:after,.fad.fa-cubes-stacked:after{content:"\e4e6\e4e6"}.fa-duotone.fa-cucumber:after,.fad.fa-cucumber:after{content:"\e401\e401"}.fa-duotone.fa-cup-straw:after,.fad.fa-cup-straw:after{content:"\e363\e363"}.fa-duotone.fa-cup-straw-swoosh:after,.fad.fa-cup-straw-swoosh:after{content:"\e364\e364"}.fa-duotone.fa-coffee-togo:after,.fa-duotone.fa-cup-togo:after,.fad.fa-coffee-togo:after,.fad.fa-cup-togo:after{content:"\f6c5\f6c5"}.fa-duotone.fa-cupcake:after,.fad.fa-cupcake:after{content:"\e402\e402"}.fa-duotone.fa-curling-stone:after,.fa-duotone.fa-curling:after,.fad.fa-curling-stone:after,.fad.fa-curling:after{content:"\f44a\f44a"}.fa-duotone.fa-custard:after,.fad.fa-custard:after{content:"\e403\e403"}.fa-duotone.fa-d:after,.fad.fa-d:after{content:"\44\44"}.fa-duotone.fa-dagger:after,.fad.fa-dagger:after{content:"\f6cb\f6cb"}.fa-duotone.fa-dash:after,.fa-duotone.fa-minus-large:after,.fad.fa-dash:after,.fad.fa-minus-large:after{content:"\e404\e404"}.fa-duotone.fa-database:after,.fad.fa-database:after{content:"\f1c0\f1c0"}.fa-duotone.fa-deer:after,.fad.fa-deer:after{content:"\f78e\f78e"}.fa-duotone.fa-deer-rudolph:after,.fad.fa-deer-rudolph:after{content:"\f78f\f78f"}.fa-duotone.fa-backspace:after,.fa-duotone.fa-delete-left:after,.fad.fa-backspace:after,.fad.fa-delete-left:after{content:"\f55a\f55a"}.fa-duotone.fa-delete-right:after,.fad.fa-delete-right:after{content:"\e154\e154"}.fa-duotone.fa-democrat:after,.fad.fa-democrat:after{content:"\f747\f747"}.fa-duotone.fa-desktop-alt:after,.fa-duotone.fa-desktop:after,.fad.fa-desktop-alt:after,.fad.fa-desktop:after{content:"\f390\f390"}.fa-duotone.fa-desktop-arrow-down:after,.fad.fa-desktop-arrow-down:after{content:"\e155\e155"}.fa-duotone.fa-dharmachakra:after,.fad.fa-dharmachakra:after{content:"\f655\f655"}.fa-duotone.fa-diagram-cells:after,.fad.fa-diagram-cells:after{content:"\e475\e475"}.fa-duotone.fa-diagram-lean-canvas:after,.fad.fa-diagram-lean-canvas:after{content:"\e156\e156"}.fa-duotone.fa-diagram-nested:after,.fad.fa-diagram-nested:after{content:"\e157\e157"}.fa-duotone.fa-diagram-next:after,.fad.fa-diagram-next:after{content:"\e476\e476"}.fa-duotone.fa-diagram-predecessor:after,.fad.fa-diagram-predecessor:after{content:"\e477\e477"}.fa-duotone.fa-diagram-previous:after,.fad.fa-diagram-previous:after{content:"\e478\e478"}.fa-duotone.fa-diagram-project:after,.fa-duotone.fa-project-diagram:after,.fad.fa-diagram-project:after,.fad.fa-project-diagram:after{content:"\f542\f542"}.fa-duotone.fa-diagram-sankey:after,.fad.fa-diagram-sankey:after{content:"\e158\e158"}.fa-duotone.fa-diagram-subtask:after,.fad.fa-diagram-subtask:after{content:"\e479\e479"}.fa-duotone.fa-diagram-successor:after,.fad.fa-diagram-successor:after{content:"\e47a\e47a"}.fa-duotone.fa-diagram-venn:after,.fad.fa-diagram-venn:after{content:"\e15a\e15a"}.fa-duotone.fa-dial-med-high:after,.fa-duotone.fa-dial:after,.fad.fa-dial-med-high:after,.fad.fa-dial:after{content:"\e15b\e15b"}.fa-duotone.fa-dial-high:after,.fad.fa-dial-high:after{content:"\e15c\e15c"}.fa-duotone.fa-dial-low:after,.fad.fa-dial-low:after{content:"\e15d\e15d"}.fa-duotone.fa-dial-max:after,.fad.fa-dial-max:after{content:"\e15e\e15e"}.fa-duotone.fa-dial-med:after,.fad.fa-dial-med:after{content:"\e15f\e15f"}.fa-duotone.fa-dial-med-low:after,.fad.fa-dial-med-low:after{content:"\e160\e160"}.fa-duotone.fa-dial-min:after,.fad.fa-dial-min:after{content:"\e161\e161"}.fa-duotone.fa-dial-off:after,.fad.fa-dial-off:after{content:"\e162\e162"}.fa-duotone.fa-diamond:after,.fad.fa-diamond:after{content:"\f219\f219"}.fa-duotone.fa-diamond-exclamation:after,.fad.fa-diamond-exclamation:after{content:"\e405\e405"}.fa-duotone.fa-diamond-turn-right:after,.fa-duotone.fa-directions:after,.fad.fa-diamond-turn-right:after,.fad.fa-directions:after{content:"\f5eb\f5eb"}.fa-duotone.fa-dice:after,.fad.fa-dice:after{content:"\f522\f522"}.fa-duotone.fa-dice-d10:after,.fad.fa-dice-d10:after{content:"\f6cd\f6cd"}.fa-duotone.fa-dice-d12:after,.fad.fa-dice-d12:after{content:"\f6ce\f6ce"}.fa-duotone.fa-dice-d20:after,.fad.fa-dice-d20:after{content:"\f6cf\f6cf"}.fa-duotone.fa-dice-d4:after,.fad.fa-dice-d4:after{content:"\f6d0\f6d0"}.fa-duotone.fa-dice-d6:after,.fad.fa-dice-d6:after{content:"\f6d1\f6d1"}.fa-duotone.fa-dice-d8:after,.fad.fa-dice-d8:after{content:"\f6d2\f6d2"}.fa-duotone.fa-dice-five:after,.fad.fa-dice-five:after{content:"\f523\f523"}.fa-duotone.fa-dice-four:after,.fad.fa-dice-four:after{content:"\f524\f524"}.fa-duotone.fa-dice-one:after,.fad.fa-dice-one:after{content:"\f525\f525"}.fa-duotone.fa-dice-six:after,.fad.fa-dice-six:after{content:"\f526\f526"}.fa-duotone.fa-dice-three:after,.fad.fa-dice-three:after{content:"\f527\f527"}.fa-duotone.fa-dice-two:after,.fad.fa-dice-two:after{content:"\f528\f528"}.fa-duotone.fa-diploma:after,.fa-duotone.fa-scroll-ribbon:after,.fad.fa-diploma:after,.fad.fa-scroll-ribbon:after{content:"\f5ea\f5ea"}.fa-duotone.fa-disc-drive:after,.fad.fa-disc-drive:after{content:"\f8b5\f8b5"}.fa-duotone.fa-disease:after,.fad.fa-disease:after{content:"\f7fa\f7fa"}.fa-duotone.fa-display:after,.fad.fa-display:after{content:"\e163\e163"}.fa-duotone.fa-display-arrow-down:after,.fad.fa-display-arrow-down:after{content:"\e164\e164"}.fa-duotone.fa-desktop-code:after,.fa-duotone.fa-display-code:after,.fad.fa-desktop-code:after,.fad.fa-display-code:after{content:"\e165\e165"}.fa-duotone.fa-desktop-medical:after,.fa-duotone.fa-display-medical:after,.fad.fa-desktop-medical:after,.fad.fa-display-medical:after{content:"\e166\e166"}.fa-duotone.fa-desktop-slash:after,.fa-duotone.fa-display-slash:after,.fad.fa-desktop-slash:after,.fad.fa-display-slash:after{content:"\e2fa\e2fa"}.fa-duotone.fa-distribute-spacing-horizontal:after,.fad.fa-distribute-spacing-horizontal:after{content:"\e365\e365"}.fa-duotone.fa-distribute-spacing-vertical:after,.fad.fa-distribute-spacing-vertical:after{content:"\e366\e366"}.fa-duotone.fa-ditto:after,.fad.fa-ditto:after{content:"\22\22"}.fa-duotone.fa-divide:after,.fad.fa-divide:after{content:"\f529\f529"}.fa-duotone.fa-dna:after,.fad.fa-dna:after{content:"\f471\f471"}.fa-duotone.fa-do-not-enter:after,.fad.fa-do-not-enter:after{content:"\f5ec\f5ec"}.fa-duotone.fa-dog:after,.fad.fa-dog:after{content:"\f6d3\f6d3"}.fa-duotone.fa-dog-leashed:after,.fad.fa-dog-leashed:after{content:"\f6d4\f6d4"}.fa-duotone.fa-dollar-sign:after,.fa-duotone.fa-dollar:after,.fa-duotone.fa-usd:after,.fad.fa-dollar-sign:after,.fad.fa-dollar:after,.fad.fa-usd:after{content:"\24\24"}.fa-duotone.fa-dolly-box:after,.fa-duotone.fa-dolly:after,.fad.fa-dolly-box:after,.fad.fa-dolly:after{content:"\f472\f472"}.fa-duotone.fa-dolly-empty:after,.fad.fa-dolly-empty:after{content:"\f473\f473"}.fa-duotone.fa-dolphin:after,.fad.fa-dolphin:after{content:"\e168\e168"}.fa-duotone.fa-dong-sign:after,.fad.fa-dong-sign:after{content:"\e169\e169"}.fa-duotone.fa-donut:after,.fa-duotone.fa-doughnut:after,.fad.fa-donut:after,.fad.fa-doughnut:after{content:"\e406\e406"}.fa-duotone.fa-door-closed:after,.fad.fa-door-closed:after{content:"\f52a\f52a"}.fa-duotone.fa-door-open:after,.fad.fa-door-open:after{content:"\f52b\f52b"}.fa-duotone.fa-dove:after,.fad.fa-dove:after{content:"\f4ba\f4ba"}.fa-duotone.fa-arrow-alt-down:after,.fa-duotone.fa-down:after,.fad.fa-arrow-alt-down:after,.fad.fa-down:after{content:"\f354\f354"}.fa-duotone.fa-down-from-dotted-line:after,.fad.fa-down-from-dotted-line:after{content:"\e407\e407"}.fa-duotone.fa-arrow-alt-from-top:after,.fa-duotone.fa-down-from-line:after,.fad.fa-arrow-alt-from-top:after,.fad.fa-down-from-line:after{content:"\f349\f349"}.fa-duotone.fa-down-left:after,.fad.fa-down-left:after{content:"\e16a\e16a"}.fa-duotone.fa-compress-alt:after,.fa-duotone.fa-down-left-and-up-right-to-center:after,.fad.fa-compress-alt:after,.fad.fa-down-left-and-up-right-to-center:after{content:"\f422\f422"}.fa-duotone.fa-down-long:after,.fa-duotone.fa-long-arrow-alt-down:after,.fad.fa-down-long:after,.fad.fa-long-arrow-alt-down:after{content:"\f309\f309"}.fa-duotone.fa-down-right:after,.fad.fa-down-right:after{content:"\e16b\e16b"}.fa-duotone.fa-down-to-bracket:after,.fad.fa-down-to-bracket:after{content:"\e4e7\e4e7"}.fa-duotone.fa-down-to-dotted-line:after,.fad.fa-down-to-dotted-line:after{content:"\e408\e408"}.fa-duotone.fa-arrow-alt-to-bottom:after,.fa-duotone.fa-down-to-line:after,.fad.fa-arrow-alt-to-bottom:after,.fad.fa-down-to-line:after{content:"\f34a\f34a"}.fa-duotone.fa-download:after,.fad.fa-download:after{content:"\f019\f019"}.fa-duotone.fa-dragon:after,.fad.fa-dragon:after{content:"\f6d5\f6d5"}.fa-duotone.fa-draw-circle:after,.fad.fa-draw-circle:after{content:"\f5ed\f5ed"}.fa-duotone.fa-draw-polygon:after,.fad.fa-draw-polygon:after{content:"\f5ee\f5ee"}.fa-duotone.fa-draw-square:after,.fad.fa-draw-square:after{content:"\f5ef\f5ef"}.fa-duotone.fa-dreidel:after,.fad.fa-dreidel:after{content:"\f792\f792"}.fa-duotone.fa-drone:after,.fad.fa-drone:after{content:"\f85f\f85f"}.fa-duotone.fa-drone-alt:after,.fa-duotone.fa-drone-front:after,.fad.fa-drone-alt:after,.fad.fa-drone-front:after{content:"\f860\f860"}.fa-duotone.fa-droplet:after,.fa-duotone.fa-tint:after,.fad.fa-droplet:after,.fad.fa-tint:after{content:"\f043\f043"}.fa-duotone.fa-dewpoint:after,.fa-duotone.fa-droplet-degree:after,.fad.fa-dewpoint:after,.fad.fa-droplet-degree:after{content:"\f748\f748"}.fa-duotone.fa-droplet-percent:after,.fa-duotone.fa-humidity:after,.fad.fa-droplet-percent:after,.fad.fa-humidity:after{content:"\f750\f750"}.fa-duotone.fa-droplet-slash:after,.fa-duotone.fa-tint-slash:after,.fad.fa-droplet-slash:after,.fad.fa-tint-slash:after{content:"\f5c7\f5c7"}.fa-duotone.fa-drum:after,.fad.fa-drum:after{content:"\f569\f569"}.fa-duotone.fa-drum-steelpan:after,.fad.fa-drum-steelpan:after{content:"\f56a\f56a"}.fa-duotone.fa-drumstick:after,.fad.fa-drumstick:after{content:"\f6d6\f6d6"}.fa-duotone.fa-drumstick-bite:after,.fad.fa-drumstick-bite:after{content:"\f6d7\f6d7"}.fa-duotone.fa-dryer:after,.fad.fa-dryer:after{content:"\f861\f861"}.fa-duotone.fa-dryer-alt:after,.fa-duotone.fa-dryer-heat:after,.fad.fa-dryer-alt:after,.fad.fa-dryer-heat:after{content:"\f862\f862"}.fa-duotone.fa-duck:after,.fad.fa-duck:after{content:"\f6d8\f6d8"}.fa-duotone.fa-dumbbell:after,.fad.fa-dumbbell:after{content:"\f44b\f44b"}.fa-duotone.fa-dumpster:after,.fad.fa-dumpster:after{content:"\f793\f793"}.fa-duotone.fa-dumpster-fire:after,.fad.fa-dumpster-fire:after{content:"\f794\f794"}.fa-duotone.fa-dungeon:after,.fad.fa-dungeon:after{content:"\f6d9\f6d9"}.fa-duotone.fa-e:after,.fad.fa-e:after{content:"\45\45"}.fa-duotone.fa-ear:after,.fad.fa-ear:after{content:"\f5f0\f5f0"}.fa-duotone.fa-deaf:after,.fa-duotone.fa-deafness:after,.fa-duotone.fa-ear-deaf:after,.fa-duotone.fa-hard-of-hearing:after,.fad.fa-deaf:after,.fad.fa-deafness:after,.fad.fa-ear-deaf:after,.fad.fa-hard-of-hearing:after{content:"\f2a4\f2a4"}.fa-duotone.fa-assistive-listening-systems:after,.fa-duotone.fa-ear-listen:after,.fad.fa-assistive-listening-systems:after,.fad.fa-ear-listen:after{content:"\f2a2\f2a2"}.fa-duotone.fa-ear-muffs:after,.fad.fa-ear-muffs:after{content:"\f795\f795"}.fa-duotone.fa-earth-africa:after,.fa-duotone.fa-globe-africa:after,.fad.fa-earth-africa:after,.fad.fa-globe-africa:after{content:"\f57c\f57c"}.fa-duotone.fa-earth-america:after,.fa-duotone.fa-earth-americas:after,.fa-duotone.fa-earth:after,.fa-duotone.fa-globe-americas:after,.fad.fa-earth-america:after,.fad.fa-earth-americas:after,.fad.fa-earth:after,.fad.fa-globe-americas:after{content:"\f57d\f57d"}.fa-duotone.fa-earth-asia:after,.fa-duotone.fa-globe-asia:after,.fad.fa-earth-asia:after,.fad.fa-globe-asia:after{content:"\f57e\f57e"}.fa-duotone.fa-earth-europe:after,.fa-duotone.fa-globe-europe:after,.fad.fa-earth-europe:after,.fad.fa-globe-europe:after{content:"\f7a2\f7a2"}.fa-duotone.fa-earth-oceania:after,.fa-duotone.fa-globe-oceania:after,.fad.fa-earth-oceania:after,.fad.fa-globe-oceania:after{content:"\e47b\e47b"}.fa-duotone.fa-eclipse:after,.fad.fa-eclipse:after{content:"\f749\f749"}.fa-duotone.fa-egg:after,.fad.fa-egg:after{content:"\f7fb\f7fb"}.fa-duotone.fa-egg-fried:after,.fad.fa-egg-fried:after{content:"\f7fc\f7fc"}.fa-duotone.fa-eggplant:after,.fad.fa-eggplant:after{content:"\e16c\e16c"}.fa-duotone.fa-eject:after,.fad.fa-eject:after{content:"\f052\f052"}.fa-duotone.fa-elephant:after,.fad.fa-elephant:after{content:"\f6da\f6da"}.fa-duotone.fa-elevator:after,.fad.fa-elevator:after{content:"\e16d\e16d"}.fa-duotone.fa-ellipsis-h:after,.fa-duotone.fa-ellipsis:after,.fad.fa-ellipsis-h:after,.fad.fa-ellipsis:after{content:"\f141\f141"}.fa-duotone.fa-ellipsis-h-alt:after,.fa-duotone.fa-ellipsis-stroke:after,.fad.fa-ellipsis-h-alt:after,.fad.fa-ellipsis-stroke:after{content:"\f39b\f39b"}.fa-duotone.fa-ellipsis-stroke-vertical:after,.fa-duotone.fa-ellipsis-v-alt:after,.fad.fa-ellipsis-stroke-vertical:after,.fad.fa-ellipsis-v-alt:after{content:"\f39c\f39c"}.fa-duotone.fa-ellipsis-v:after,.fa-duotone.fa-ellipsis-vertical:after,.fad.fa-ellipsis-v:after,.fad.fa-ellipsis-vertical:after{content:"\f142\f142"}.fa-duotone.fa-empty-set:after,.fad.fa-empty-set:after{content:"\f656\f656"}.fa-duotone.fa-engine:after,.fad.fa-engine:after{content:"\e16e\e16e"}.fa-duotone.fa-engine-exclamation:after,.fa-duotone.fa-engine-warning:after,.fad.fa-engine-exclamation:after,.fad.fa-engine-warning:after{content:"\f5f2\f5f2"}.fa-duotone.fa-envelope:after,.fad.fa-envelope:after{content:"\f0e0\f0e0"}.fa-duotone.fa-envelope-circle-check:after,.fad.fa-envelope-circle-check:after{content:"\e4e8\e4e8"}.fa-duotone.fa-envelope-badge:after,.fa-duotone.fa-envelope-dot:after,.fad.fa-envelope-badge:after,.fad.fa-envelope-dot:after{content:"\e16f\e16f"}.fa-duotone.fa-envelope-open:after,.fad.fa-envelope-open:after{content:"\f2b6\f2b6"}.fa-duotone.fa-envelope-open-dollar:after,.fad.fa-envelope-open-dollar:after{content:"\f657\f657"}.fa-duotone.fa-envelope-open-text:after,.fad.fa-envelope-open-text:after{content:"\f658\f658"}.fa-duotone.fa-envelopes:after,.fad.fa-envelopes:after{content:"\e170\e170"}.fa-duotone.fa-envelopes-bulk:after,.fa-duotone.fa-mail-bulk:after,.fad.fa-envelopes-bulk:after,.fad.fa-mail-bulk:after{content:"\f674\f674"}.fa-duotone.fa-equals:after,.fad.fa-equals:after{content:"\3d\3d"}.fa-duotone.fa-eraser:after,.fad.fa-eraser:after{content:"\f12d\f12d"}.fa-duotone.fa-escalator:after,.fad.fa-escalator:after{content:"\e171\e171"}.fa-duotone.fa-ethernet:after,.fad.fa-ethernet:after{content:"\f796\f796"}.fa-duotone.fa-eur:after,.fa-duotone.fa-euro-sign:after,.fa-duotone.fa-euro:after,.fad.fa-eur:after,.fad.fa-euro-sign:after,.fad.fa-euro:after{content:"\f153\f153"}.fa-duotone.fa-exclamation:after,.fad.fa-exclamation:after{content:"\21\21"}.fa-duotone.fa-expand:after,.fad.fa-expand:after{content:"\f065\f065"}.fa-duotone.fa-expand-wide:after,.fad.fa-expand-wide:after{content:"\f320\f320"}.fa-duotone.fa-explosion:after,.fad.fa-explosion:after{content:"\e4e9\e4e9"}.fa-duotone.fa-eye:after,.fad.fa-eye:after{content:"\f06e\f06e"}.fa-duotone.fa-eye-dropper-empty:after,.fa-duotone.fa-eye-dropper:after,.fa-duotone.fa-eyedropper:after,.fad.fa-eye-dropper-empty:after,.fad.fa-eye-dropper:after,.fad.fa-eyedropper:after{content:"\f1fb\f1fb"}.fa-duotone.fa-eye-dropper-full:after,.fad.fa-eye-dropper-full:after{content:"\e172\e172"}.fa-duotone.fa-eye-dropper-half:after,.fad.fa-eye-dropper-half:after{content:"\e173\e173"}.fa-duotone.fa-eye-evil:after,.fad.fa-eye-evil:after{content:"\f6db\f6db"}.fa-duotone.fa-eye-low-vision:after,.fa-duotone.fa-low-vision:after,.fad.fa-eye-low-vision:after,.fad.fa-low-vision:after{content:"\f2a8\f2a8"}.fa-duotone.fa-eye-slash:after,.fad.fa-eye-slash:after{content:"\f070\f070"}.fa-duotone.fa-eyes:after,.fad.fa-eyes:after{content:"\e367\e367"}.fa-duotone.fa-f:after,.fad.fa-f:after{content:"\46\46"}.fa-duotone.fa-angry:after,.fa-duotone.fa-face-angry:after,.fad.fa-angry:after,.fad.fa-face-angry:after{content:"\f556\f556"}.fa-duotone.fa-face-angry-horns:after,.fad.fa-face-angry-horns:after{content:"\e368\e368"}.fa-duotone.fa-face-anguished:after,.fad.fa-face-anguished:after{content:"\e369\e369"}.fa-duotone.fa-face-anxious-sweat:after,.fad.fa-face-anxious-sweat:after{content:"\e36a\e36a"}.fa-duotone.fa-face-astonished:after,.fad.fa-face-astonished:after{content:"\e36b\e36b"}.fa-duotone.fa-face-awesome:after,.fa-duotone.fa-gave-dandy:after,.fad.fa-face-awesome:after,.fad.fa-gave-dandy:after{content:"\e409\e409"}.fa-duotone.fa-face-beam-hand-over-mouth:after,.fad.fa-face-beam-hand-over-mouth:after{content:"\e47c\e47c"}.fa-duotone.fa-face-clouds:after,.fad.fa-face-clouds:after{content:"\e47d\e47d"}.fa-duotone.fa-face-confounded:after,.fad.fa-face-confounded:after{content:"\e36c\e36c"}.fa-duotone.fa-face-confused:after,.fad.fa-face-confused:after{content:"\e36d\e36d"}.fa-duotone.fa-face-cowboy-hat:after,.fad.fa-face-cowboy-hat:after{content:"\e36e\e36e"}.fa-duotone.fa-face-diagonal-mouth:after,.fad.fa-face-diagonal-mouth:after{content:"\e47e\e47e"}.fa-duotone.fa-face-disappointed:after,.fad.fa-face-disappointed:after{content:"\e36f\e36f"}.fa-duotone.fa-face-disguise:after,.fad.fa-face-disguise:after{content:"\e370\e370"}.fa-duotone.fa-dizzy:after,.fa-duotone.fa-face-dizzy:after,.fad.fa-dizzy:after,.fad.fa-face-dizzy:after{content:"\f567\f567"}.fa-duotone.fa-face-dotted:after,.fad.fa-face-dotted:after{content:"\e47f\e47f"}.fa-duotone.fa-face-downcast-sweat:after,.fad.fa-face-downcast-sweat:after{content:"\e371\e371"}.fa-duotone.fa-face-drooling:after,.fad.fa-face-drooling:after{content:"\e372\e372"}.fa-duotone.fa-face-exhaling:after,.fad.fa-face-exhaling:after{content:"\e480\e480"}.fa-duotone.fa-exploding-head:after,.fa-duotone.fa-face-explode:after,.fad.fa-exploding-head:after,.fad.fa-face-explode:after{content:"\e2fe\e2fe"}.fa-duotone.fa-face-expressionless:after,.fad.fa-face-expressionless:after{content:"\e373\e373"}.fa-duotone.fa-face-eyes-xmarks:after,.fad.fa-face-eyes-xmarks:after{content:"\e374\e374"}.fa-duotone.fa-face-fearful:after,.fad.fa-face-fearful:after{content:"\e375\e375"}.fa-duotone.fa-face-flushed:after,.fa-duotone.fa-flushed:after,.fad.fa-face-flushed:after,.fad.fa-flushed:after{content:"\f579\f579"}.fa-duotone.fa-face-frown:after,.fa-duotone.fa-frown:after,.fad.fa-face-frown:after,.fad.fa-frown:after{content:"\f119\f119"}.fa-duotone.fa-face-frown-open:after,.fa-duotone.fa-frown-open:after,.fad.fa-face-frown-open:after,.fad.fa-frown-open:after{content:"\f57a\f57a"}.fa-duotone.fa-face-frown-slight:after,.fad.fa-face-frown-slight:after{content:"\e376\e376"}.fa-duotone.fa-face-glasses:after,.fad.fa-face-glasses:after{content:"\e377\e377"}.fa-duotone.fa-face-grimace:after,.fa-duotone.fa-grimace:after,.fad.fa-face-grimace:after,.fad.fa-grimace:after{content:"\f57f\f57f"}.fa-duotone.fa-face-grin:after,.fa-duotone.fa-grin:after,.fad.fa-face-grin:after,.fad.fa-grin:after{content:"\f580\f580"}.fa-duotone.fa-face-grin-beam:after,.fa-duotone.fa-grin-beam:after,.fad.fa-face-grin-beam:after,.fad.fa-grin-beam:after{content:"\f582\f582"}.fa-duotone.fa-face-grin-beam-sweat:after,.fa-duotone.fa-grin-beam-sweat:after,.fad.fa-face-grin-beam-sweat:after,.fad.fa-grin-beam-sweat:after{content:"\f583\f583"}.fa-duotone.fa-face-grin-hearts:after,.fa-duotone.fa-grin-hearts:after,.fad.fa-face-grin-hearts:after,.fad.fa-grin-hearts:after{content:"\f584\f584"}.fa-duotone.fa-face-grin-squint:after,.fa-duotone.fa-grin-squint:after,.fad.fa-face-grin-squint:after,.fad.fa-grin-squint:after{content:"\f585\f585"}.fa-duotone.fa-face-grin-squint-tears:after,.fa-duotone.fa-grin-squint-tears:after,.fad.fa-face-grin-squint-tears:after,.fad.fa-grin-squint-tears:after{content:"\f586\f586"}.fa-duotone.fa-face-grin-stars:after,.fa-duotone.fa-grin-stars:after,.fad.fa-face-grin-stars:after,.fad.fa-grin-stars:after{content:"\f587\f587"}.fa-duotone.fa-face-grin-tears:after,.fa-duotone.fa-grin-tears:after,.fad.fa-face-grin-tears:after,.fad.fa-grin-tears:after{content:"\f588\f588"}.fa-duotone.fa-face-grin-tongue:after,.fa-duotone.fa-grin-tongue:after,.fad.fa-face-grin-tongue:after,.fad.fa-grin-tongue:after{content:"\f589\f589"}.fa-duotone.fa-face-grin-tongue-squint:after,.fa-duotone.fa-grin-tongue-squint:after,.fad.fa-face-grin-tongue-squint:after,.fad.fa-grin-tongue-squint:after{content:"\f58a\f58a"}.fa-duotone.fa-face-grin-tongue-wink:after,.fa-duotone.fa-grin-tongue-wink:after,.fad.fa-face-grin-tongue-wink:after,.fad.fa-grin-tongue-wink:after{content:"\f58b\f58b"}.fa-duotone.fa-face-grin-wide:after,.fa-duotone.fa-grin-alt:after,.fad.fa-face-grin-wide:after,.fad.fa-grin-alt:after{content:"\f581\f581"}.fa-duotone.fa-face-grin-wink:after,.fa-duotone.fa-grin-wink:after,.fad.fa-face-grin-wink:after,.fad.fa-grin-wink:after{content:"\f58c\f58c"}.fa-duotone.fa-face-hand-over-mouth:after,.fad.fa-face-hand-over-mouth:after{content:"\e378\e378"}.fa-duotone.fa-face-hand-peeking:after,.fad.fa-face-hand-peeking:after{content:"\e481\e481"}.fa-duotone.fa-face-hand-yawn:after,.fad.fa-face-hand-yawn:after{content:"\e379\e379"}.fa-duotone.fa-face-head-bandage:after,.fad.fa-face-head-bandage:after{content:"\e37a\e37a"}.fa-duotone.fa-face-holding-back-tears:after,.fad.fa-face-holding-back-tears:after{content:"\e482\e482"}.fa-duotone.fa-face-hushed:after,.fad.fa-face-hushed:after{content:"\e37b\e37b"}.fa-duotone.fa-face-icicles:after,.fad.fa-face-icicles:after{content:"\e37c\e37c"}.fa-duotone.fa-face-kiss:after,.fa-duotone.fa-kiss:after,.fad.fa-face-kiss:after,.fad.fa-kiss:after{content:"\f596\f596"}.fa-duotone.fa-face-kiss-beam:after,.fa-duotone.fa-kiss-beam:after,.fad.fa-face-kiss-beam:after,.fad.fa-kiss-beam:after{content:"\f597\f597"}.fa-duotone.fa-face-kiss-closed-eyes:after,.fad.fa-face-kiss-closed-eyes:after{content:"\e37d\e37d"}.fa-duotone.fa-face-kiss-wink-heart:after,.fa-duotone.fa-kiss-wink-heart:after,.fad.fa-face-kiss-wink-heart:after,.fad.fa-kiss-wink-heart:after{content:"\f598\f598"}.fa-duotone.fa-face-laugh:after,.fa-duotone.fa-laugh:after,.fad.fa-face-laugh:after,.fad.fa-laugh:after{content:"\f599\f599"}.fa-duotone.fa-face-laugh-beam:after,.fa-duotone.fa-laugh-beam:after,.fad.fa-face-laugh-beam:after,.fad.fa-laugh-beam:after{content:"\f59a\f59a"}.fa-duotone.fa-face-laugh-squint:after,.fa-duotone.fa-laugh-squint:after,.fad.fa-face-laugh-squint:after,.fad.fa-laugh-squint:after{content:"\f59b\f59b"}.fa-duotone.fa-face-laugh-wink:after,.fa-duotone.fa-laugh-wink:after,.fad.fa-face-laugh-wink:after,.fad.fa-laugh-wink:after{content:"\f59c\f59c"}.fa-duotone.fa-face-lying:after,.fad.fa-face-lying:after{content:"\e37e\e37e"}.fa-duotone.fa-face-mask:after,.fad.fa-face-mask:after{content:"\e37f\e37f"}.fa-duotone.fa-face-meh:after,.fa-duotone.fa-meh:after,.fad.fa-face-meh:after,.fad.fa-meh:after{content:"\f11a\f11a"}.fa-duotone.fa-face-meh-blank:after,.fa-duotone.fa-meh-blank:after,.fad.fa-face-meh-blank:after,.fad.fa-meh-blank:after{content:"\f5a4\f5a4"}.fa-duotone.fa-face-melting:after,.fad.fa-face-melting:after{content:"\e483\e483"}.fa-duotone.fa-face-monocle:after,.fad.fa-face-monocle:after{content:"\e380\e380"}.fa-duotone.fa-face-nauseated:after,.fad.fa-face-nauseated:after{content:"\e381\e381"}.fa-duotone.fa-face-nose-steam:after,.fad.fa-face-nose-steam:after{content:"\e382\e382"}.fa-duotone.fa-face-party:after,.fad.fa-face-party:after{content:"\e383\e383"}.fa-duotone.fa-face-pensive:after,.fad.fa-face-pensive:after{content:"\e384\e384"}.fa-duotone.fa-face-persevering:after,.fad.fa-face-persevering:after{content:"\e385\e385"}.fa-duotone.fa-face-pleading:after,.fad.fa-face-pleading:after{content:"\e386\e386"}.fa-duotone.fa-face-pouting:after,.fad.fa-face-pouting:after{content:"\e387\e387"}.fa-duotone.fa-face-raised-eyebrow:after,.fad.fa-face-raised-eyebrow:after{content:"\e388\e388"}.fa-duotone.fa-face-relieved:after,.fad.fa-face-relieved:after{content:"\e389\e389"}.fa-duotone.fa-face-rolling-eyes:after,.fa-duotone.fa-meh-rolling-eyes:after,.fad.fa-face-rolling-eyes:after,.fad.fa-meh-rolling-eyes:after{content:"\f5a5\f5a5"}.fa-duotone.fa-face-sad-cry:after,.fa-duotone.fa-sad-cry:after,.fad.fa-face-sad-cry:after,.fad.fa-sad-cry:after{content:"\f5b3\f5b3"}.fa-duotone.fa-face-sad-sweat:after,.fad.fa-face-sad-sweat:after{content:"\e38a\e38a"}.fa-duotone.fa-face-sad-tear:after,.fa-duotone.fa-sad-tear:after,.fad.fa-face-sad-tear:after,.fad.fa-sad-tear:after{content:"\f5b4\f5b4"}.fa-duotone.fa-face-saluting:after,.fad.fa-face-saluting:after{content:"\e484\e484"}.fa-duotone.fa-face-scream:after,.fad.fa-face-scream:after{content:"\e38b\e38b"}.fa-duotone.fa-face-shush:after,.fad.fa-face-shush:after{content:"\e38c\e38c"}.fa-duotone.fa-face-sleeping:after,.fad.fa-face-sleeping:after{content:"\e38d\e38d"}.fa-duotone.fa-face-sleepy:after,.fad.fa-face-sleepy:after{content:"\e38e\e38e"}.fa-duotone.fa-face-smile:after,.fa-duotone.fa-smile:after,.fad.fa-face-smile:after,.fad.fa-smile:after{content:"\f118\f118"}.fa-duotone.fa-face-smile-beam:after,.fa-duotone.fa-smile-beam:after,.fad.fa-face-smile-beam:after,.fad.fa-smile-beam:after{content:"\f5b8\f5b8"}.fa-duotone.fa-face-smile-halo:after,.fad.fa-face-smile-halo:after{content:"\e38f\e38f"}.fa-duotone.fa-face-smile-hearts:after,.fad.fa-face-smile-hearts:after{content:"\e390\e390"}.fa-duotone.fa-face-smile-horns:after,.fad.fa-face-smile-horns:after{content:"\e391\e391"}.fa-duotone.fa-face-smile-plus:after,.fa-duotone.fa-smile-plus:after,.fad.fa-face-smile-plus:after,.fad.fa-smile-plus:after{content:"\f5b9\f5b9"}.fa-duotone.fa-face-smile-relaxed:after,.fad.fa-face-smile-relaxed:after{content:"\e392\e392"}.fa-duotone.fa-face-smile-tear:after,.fad.fa-face-smile-tear:after{content:"\e393\e393"}.fa-duotone.fa-face-smile-tongue:after,.fad.fa-face-smile-tongue:after{content:"\e394\e394"}.fa-duotone.fa-face-smile-upside-down:after,.fad.fa-face-smile-upside-down:after{content:"\e395\e395"}.fa-duotone.fa-face-smile-wink:after,.fa-duotone.fa-smile-wink:after,.fad.fa-face-smile-wink:after,.fad.fa-smile-wink:after{content:"\f4da\f4da"}.fa-duotone.fa-face-smiling-hands:after,.fad.fa-face-smiling-hands:after{content:"\e396\e396"}.fa-duotone.fa-face-smirking:after,.fad.fa-face-smirking:after{content:"\e397\e397"}.fa-duotone.fa-face-spiral-eyes:after,.fad.fa-face-spiral-eyes:after{content:"\e485\e485"}.fa-duotone.fa-face-sunglasses:after,.fad.fa-face-sunglasses:after{content:"\e398\e398"}.fa-duotone.fa-face-surprise:after,.fa-duotone.fa-surprise:after,.fad.fa-face-surprise:after,.fad.fa-surprise:after{content:"\f5c2\f5c2"}.fa-duotone.fa-face-swear:after,.fad.fa-face-swear:after{content:"\e399\e399"}.fa-duotone.fa-face-thermometer:after,.fad.fa-face-thermometer:after{content:"\e39a\e39a"}.fa-duotone.fa-face-thinking:after,.fad.fa-face-thinking:after{content:"\e39b\e39b"}.fa-duotone.fa-face-tired:after,.fa-duotone.fa-tired:after,.fad.fa-face-tired:after,.fad.fa-tired:after{content:"\f5c8\f5c8"}.fa-duotone.fa-face-tissue:after,.fad.fa-face-tissue:after{content:"\e39c\e39c"}.fa-duotone.fa-face-tongue-money:after,.fad.fa-face-tongue-money:after{content:"\e39d\e39d"}.fa-duotone.fa-face-tongue-sweat:after,.fad.fa-face-tongue-sweat:after{content:"\e39e\e39e"}.fa-duotone.fa-face-unamused:after,.fad.fa-face-unamused:after{content:"\e39f\e39f"}.fa-duotone.fa-face-viewfinder:after,.fad.fa-face-viewfinder:after{content:"\e2ff\e2ff"}.fa-duotone.fa-face-vomit:after,.fad.fa-face-vomit:after{content:"\e3a0\e3a0"}.fa-duotone.fa-face-weary:after,.fad.fa-face-weary:after{content:"\e3a1\e3a1"}.fa-duotone.fa-face-woozy:after,.fad.fa-face-woozy:after{content:"\e3a2\e3a2"}.fa-duotone.fa-face-worried:after,.fad.fa-face-worried:after{content:"\e3a3\e3a3"}.fa-duotone.fa-face-zany:after,.fad.fa-face-zany:after{content:"\e3a4\e3a4"}.fa-duotone.fa-face-zipper:after,.fad.fa-face-zipper:after{content:"\e3a5\e3a5"}.fa-duotone.fa-falafel:after,.fad.fa-falafel:after{content:"\e40a\e40a"}.fa-duotone.fa-family:after,.fad.fa-family:after{content:"\e300\e300"}.fa-duotone.fa-family-dress:after,.fad.fa-family-dress:after{content:"\e301\e301"}.fa-duotone.fa-family-pants:after,.fad.fa-family-pants:after{content:"\e302\e302"}.fa-duotone.fa-fan:after,.fad.fa-fan:after{content:"\f863\f863"}.fa-duotone.fa-fan-table:after,.fad.fa-fan-table:after{content:"\e004\e004"}.fa-duotone.fa-barn-silo:after,.fa-duotone.fa-farm:after,.fad.fa-barn-silo:after,.fad.fa-farm:after{content:"\f864\f864"}.fa-duotone.fa-faucet:after,.fad.fa-faucet:after{content:"\e005\e005"}.fa-duotone.fa-faucet-drip:after,.fad.fa-faucet-drip:after{content:"\e006\e006"}.fa-duotone.fa-fax:after,.fad.fa-fax:after{content:"\f1ac\f1ac"}.fa-duotone.fa-feather:after,.fad.fa-feather:after{content:"\f52d\f52d"}.fa-duotone.fa-feather-alt:after,.fa-duotone.fa-feather-pointed:after,.fad.fa-feather-alt:after,.fad.fa-feather-pointed:after{content:"\f56b\f56b"}.fa-duotone.fa-fence:after,.fad.fa-fence:after{content:"\e303\e303"}.fa-duotone.fa-ferris-wheel:after,.fad.fa-ferris-wheel:after{content:"\e174\e174"}.fa-duotone.fa-ferry:after,.fad.fa-ferry:after{content:"\e4ea\e4ea"}.fa-duotone.fa-field-hockey-stick-ball:after,.fa-duotone.fa-field-hockey:after,.fad.fa-field-hockey-stick-ball:after,.fad.fa-field-hockey:after{content:"\f44c\f44c"}.fa-duotone.fa-file:after,.fad.fa-file:after{content:"\f15b\f15b"}.fa-duotone.fa-file-arrow-down:after,.fa-duotone.fa-file-download:after,.fad.fa-file-arrow-down:after,.fad.fa-file-download:after{content:"\f56d\f56d"}.fa-duotone.fa-file-arrow-up:after,.fa-duotone.fa-file-upload:after,.fad.fa-file-arrow-up:after,.fad.fa-file-upload:after{content:"\f574\f574"}.fa-duotone.fa-file-audio:after,.fad.fa-file-audio:after{content:"\f1c7\f1c7"}.fa-duotone.fa-file-binary:after,.fad.fa-file-binary:after{content:"\e175\e175"}.fa-duotone.fa-file-award:after,.fa-duotone.fa-file-certificate:after,.fad.fa-file-award:after,.fad.fa-file-certificate:after{content:"\f5f3\f5f3"}.fa-duotone.fa-file-chart-column:after,.fa-duotone.fa-file-chart-line:after,.fad.fa-file-chart-column:after,.fad.fa-file-chart-line:after{content:"\f659\f659"}.fa-duotone.fa-file-chart-pie:after,.fad.fa-file-chart-pie:after{content:"\f65a\f65a"}.fa-duotone.fa-file-check:after,.fad.fa-file-check:after{content:"\f316\f316"}.fa-duotone.fa-file-circle-check:after,.fad.fa-file-circle-check:after{content:"\e5a0\e5a0"}.fa-duotone.fa-file-circle-exclamation:after,.fad.fa-file-circle-exclamation:after{content:"\e4eb\e4eb"}.fa-duotone.fa-file-circle-info:after,.fad.fa-file-circle-info:after{content:"\e493\e493"}.fa-duotone.fa-file-circle-minus:after,.fad.fa-file-circle-minus:after{content:"\e4ed\e4ed"}.fa-duotone.fa-file-circle-plus:after,.fad.fa-file-circle-plus:after{content:"\e494\e494"}.fa-duotone.fa-file-circle-question:after,.fad.fa-file-circle-question:after{content:"\e4ef\e4ef"}.fa-duotone.fa-file-circle-xmark:after,.fad.fa-file-circle-xmark:after{content:"\e5a1\e5a1"}.fa-duotone.fa-file-code:after,.fad.fa-file-code:after{content:"\f1c9\f1c9"}.fa-duotone.fa-file-contract:after,.fad.fa-file-contract:after{content:"\f56c\f56c"}.fa-duotone.fa-file-csv:after,.fad.fa-file-csv:after{content:"\f6dd\f6dd"}.fa-duotone.fa-file-dashed-line:after,.fa-duotone.fa-page-break:after,.fad.fa-file-dashed-line:after,.fad.fa-page-break:after{content:"\f877\f877"}.fa-duotone.fa-file-excel:after,.fad.fa-file-excel:after{content:"\f1c3\f1c3"}.fa-duotone.fa-file-exclamation:after,.fad.fa-file-exclamation:after{content:"\f31a\f31a"}.fa-duotone.fa-arrow-right-from-file:after,.fa-duotone.fa-file-export:after,.fad.fa-arrow-right-from-file:after,.fad.fa-file-export:after{content:"\f56e\f56e"}.fa-duotone.fa-file-heart:after,.fad.fa-file-heart:after{content:"\e176\e176"}.fa-duotone.fa-file-image:after,.fad.fa-file-image:after{content:"\f1c5\f1c5"}.fa-duotone.fa-arrow-right-to-file:after,.fa-duotone.fa-file-import:after,.fad.fa-arrow-right-to-file:after,.fad.fa-file-import:after{content:"\f56f\f56f"}.fa-duotone.fa-file-invoice:after,.fad.fa-file-invoice:after{content:"\f570\f570"}.fa-duotone.fa-file-invoice-dollar:after,.fad.fa-file-invoice-dollar:after{content:"\f571\f571"}.fa-duotone.fa-file-alt:after,.fa-duotone.fa-file-lines:after,.fa-duotone.fa-file-text:after,.fad.fa-file-alt:after,.fad.fa-file-lines:after,.fad.fa-file-text:after{content:"\f15c\f15c"}.fa-duotone.fa-file-lock:after,.fad.fa-file-lock:after{content:"\e3a6\e3a6"}.fa-duotone.fa-file-magnifying-glass:after,.fa-duotone.fa-file-search:after,.fad.fa-file-magnifying-glass:after,.fad.fa-file-search:after{content:"\f865\f865"}.fa-duotone.fa-file-medical:after,.fad.fa-file-medical:after{content:"\f477\f477"}.fa-duotone.fa-file-minus:after,.fad.fa-file-minus:after{content:"\f318\f318"}.fa-duotone.fa-file-music:after,.fad.fa-file-music:after{content:"\f8b6\f8b6"}.fa-duotone.fa-file-pdf:after,.fad.fa-file-pdf:after{content:"\f1c1\f1c1"}.fa-duotone.fa-file-edit:after,.fa-duotone.fa-file-pen:after,.fad.fa-file-edit:after,.fad.fa-file-pen:after{content:"\f31c\f31c"}.fa-duotone.fa-file-plus:after,.fad.fa-file-plus:after{content:"\f319\f319"}.fa-duotone.fa-file-plus-minus:after,.fad.fa-file-plus-minus:after{content:"\e177\e177"}.fa-duotone.fa-file-powerpoint:after,.fad.fa-file-powerpoint:after{content:"\f1c4\f1c4"}.fa-duotone.fa-file-prescription:after,.fad.fa-file-prescription:after{content:"\f572\f572"}.fa-duotone.fa-file-shield:after,.fad.fa-file-shield:after{content:"\e4f0\e4f0"}.fa-duotone.fa-file-signature:after,.fad.fa-file-signature:after{content:"\f573\f573"}.fa-duotone.fa-file-slash:after,.fad.fa-file-slash:after{content:"\e3a7\e3a7"}.fa-duotone.fa-file-spreadsheet:after,.fad.fa-file-spreadsheet:after{content:"\f65b\f65b"}.fa-duotone.fa-file-user:after,.fad.fa-file-user:after{content:"\f65c\f65c"}.fa-duotone.fa-file-video:after,.fad.fa-file-video:after{content:"\f1c8\f1c8"}.fa-duotone.fa-file-medical-alt:after,.fa-duotone.fa-file-waveform:after,.fad.fa-file-medical-alt:after,.fad.fa-file-waveform:after{content:"\f478\f478"}.fa-duotone.fa-file-word:after,.fad.fa-file-word:after{content:"\f1c2\f1c2"}.fa-duotone.fa-file-times:after,.fa-duotone.fa-file-xmark:after,.fad.fa-file-times:after,.fad.fa-file-xmark:after{content:"\f317\f317"}.fa-duotone.fa-file-archive:after,.fa-duotone.fa-file-zipper:after,.fad.fa-file-archive:after,.fad.fa-file-zipper:after{content:"\f1c6\f1c6"}.fa-duotone.fa-files:after,.fad.fa-files:after{content:"\e178\e178"}.fa-duotone.fa-files-medical:after,.fad.fa-files-medical:after{content:"\f7fd\f7fd"}.fa-duotone.fa-fill:after,.fad.fa-fill:after{content:"\f575\f575"}.fa-duotone.fa-fill-drip:after,.fad.fa-fill-drip:after{content:"\f576\f576"}.fa-duotone.fa-film:after,.fad.fa-film:after{content:"\f008\f008"}.fa-duotone.fa-film-canister:after,.fa-duotone.fa-film-cannister:after,.fad.fa-film-canister:after,.fad.fa-film-cannister:after{content:"\f8b7\f8b7"}.fa-duotone.fa-film-alt:after,.fa-duotone.fa-film-simple:after,.fad.fa-film-alt:after,.fad.fa-film-simple:after{content:"\f3a0\f3a0"}.fa-duotone.fa-film-slash:after,.fad.fa-film-slash:after{content:"\e179\e179"}.fa-duotone.fa-films:after,.fad.fa-films:after{content:"\e17a\e17a"}.fa-duotone.fa-filter:after,.fad.fa-filter:after{content:"\f0b0\f0b0"}.fa-duotone.fa-filter-circle-dollar:after,.fa-duotone.fa-funnel-dollar:after,.fad.fa-filter-circle-dollar:after,.fad.fa-funnel-dollar:after{content:"\f662\f662"}.fa-duotone.fa-filter-circle-xmark:after,.fad.fa-filter-circle-xmark:after{content:"\e17b\e17b"}.fa-duotone.fa-filter-list:after,.fad.fa-filter-list:after{content:"\e17c\e17c"}.fa-duotone.fa-filter-slash:after,.fad.fa-filter-slash:after{content:"\e17d\e17d"}.fa-duotone.fa-filters:after,.fad.fa-filters:after{content:"\e17e\e17e"}.fa-duotone.fa-fingerprint:after,.fad.fa-fingerprint:after{content:"\f577\f577"}.fa-duotone.fa-fire:after,.fad.fa-fire:after{content:"\f06d\f06d"}.fa-duotone.fa-fire-burner:after,.fad.fa-fire-burner:after{content:"\e4f1\e4f1"}.fa-duotone.fa-fire-extinguisher:after,.fad.fa-fire-extinguisher:after{content:"\f134\f134"}.fa-duotone.fa-fire-flame:after,.fa-duotone.fa-flame:after,.fad.fa-fire-flame:after,.fad.fa-flame:after{content:"\f6df\f6df"}.fa-duotone.fa-fire-alt:after,.fa-duotone.fa-fire-flame-curved:after,.fad.fa-fire-alt:after,.fad.fa-fire-flame-curved:after{content:"\f7e4\f7e4"}.fa-duotone.fa-burn:after,.fa-duotone.fa-fire-flame-simple:after,.fad.fa-burn:after,.fad.fa-fire-flame-simple:after{content:"\f46a\f46a"}.fa-duotone.fa-fire-hydrant:after,.fad.fa-fire-hydrant:after{content:"\e17f\e17f"}.fa-duotone.fa-fire-smoke:after,.fad.fa-fire-smoke:after{content:"\f74b\f74b"}.fa-duotone.fa-fireplace:after,.fad.fa-fireplace:after{content:"\f79a\f79a"}.fa-duotone.fa-fish:after,.fad.fa-fish:after{content:"\f578\f578"}.fa-duotone.fa-fish-bones:after,.fad.fa-fish-bones:after{content:"\e304\e304"}.fa-duotone.fa-fish-cooked:after,.fad.fa-fish-cooked:after{content:"\f7fe\f7fe"}.fa-duotone.fa-fish-fins:after,.fad.fa-fish-fins:after{content:"\e4f2\e4f2"}.fa-duotone.fa-fishing-rod:after,.fad.fa-fishing-rod:after{content:"\e3a8\e3a8"}.fa-duotone.fa-flag:after,.fad.fa-flag:after{content:"\f024\f024"}.fa-duotone.fa-flag-checkered:after,.fad.fa-flag-checkered:after{content:"\f11e\f11e"}.fa-duotone.fa-flag-pennant:after,.fa-duotone.fa-pennant:after,.fad.fa-flag-pennant:after,.fad.fa-pennant:after{content:"\f456\f456"}.fa-duotone.fa-flag-alt:after,.fa-duotone.fa-flag-swallowtail:after,.fad.fa-flag-alt:after,.fad.fa-flag-swallowtail:after{content:"\f74c\f74c"}.fa-duotone.fa-flag-usa:after,.fad.fa-flag-usa:after{content:"\f74d\f74d"}.fa-duotone.fa-flashlight:after,.fad.fa-flashlight:after{content:"\f8b8\f8b8"}.fa-duotone.fa-flask:after,.fad.fa-flask:after{content:"\f0c3\f0c3"}.fa-duotone.fa-flask-poison:after,.fa-duotone.fa-flask-round-poison:after,.fad.fa-flask-poison:after,.fad.fa-flask-round-poison:after{content:"\f6e0\f6e0"}.fa-duotone.fa-flask-potion:after,.fa-duotone.fa-flask-round-potion:after,.fad.fa-flask-potion:after,.fad.fa-flask-round-potion:after{content:"\f6e1\f6e1"}.fa-duotone.fa-flask-vial:after,.fad.fa-flask-vial:after{content:"\e4f3\e4f3"}.fa-duotone.fa-flatbread:after,.fad.fa-flatbread:after{content:"\e40b\e40b"}.fa-duotone.fa-flatbread-stuffed:after,.fad.fa-flatbread-stuffed:after{content:"\e40c\e40c"}.fa-duotone.fa-floppy-disk:after,.fa-duotone.fa-save:after,.fad.fa-floppy-disk:after,.fad.fa-save:after{content:"\f0c7\f0c7"}.fa-duotone.fa-floppy-disk-circle-arrow-right:after,.fa-duotone.fa-save-circle-arrow-right:after,.fad.fa-floppy-disk-circle-arrow-right:after,.fad.fa-save-circle-arrow-right:after{content:"\e180\e180"}.fa-duotone.fa-floppy-disk-circle-xmark:after,.fa-duotone.fa-floppy-disk-times:after,.fa-duotone.fa-save-circle-xmark:after,.fa-duotone.fa-save-times:after,.fad.fa-floppy-disk-circle-xmark:after,.fad.fa-floppy-disk-times:after,.fad.fa-save-circle-xmark:after,.fad.fa-save-times:after{content:"\e181\e181"}.fa-duotone.fa-floppy-disk-pen:after,.fad.fa-floppy-disk-pen:after{content:"\e182\e182"}.fa-duotone.fa-floppy-disks:after,.fad.fa-floppy-disks:after{content:"\e183\e183"}.fa-duotone.fa-florin-sign:after,.fad.fa-florin-sign:after{content:"\e184\e184"}.fa-duotone.fa-flower:after,.fad.fa-flower:after{content:"\f7ff\f7ff"}.fa-duotone.fa-flower-daffodil:after,.fad.fa-flower-daffodil:after{content:"\f800\f800"}.fa-duotone.fa-flower-tulip:after,.fad.fa-flower-tulip:after{content:"\f801\f801"}.fa-duotone.fa-flute:after,.fad.fa-flute:after{content:"\f8b9\f8b9"}.fa-duotone.fa-flux-capacitor:after,.fad.fa-flux-capacitor:after{content:"\f8ba\f8ba"}.fa-duotone.fa-flying-disc:after,.fad.fa-flying-disc:after{content:"\e3a9\e3a9"}.fa-duotone.fa-folder-blank:after,.fa-duotone.fa-folder:after,.fad.fa-folder-blank:after,.fad.fa-folder:after{content:"\f07b\f07b"}.fa-duotone.fa-folder-arrow-down:after,.fa-duotone.fa-folder-download:after,.fad.fa-folder-arrow-down:after,.fad.fa-folder-download:after{content:"\e053\e053"}.fa-duotone.fa-folder-arrow-up:after,.fa-duotone.fa-folder-upload:after,.fad.fa-folder-arrow-up:after,.fad.fa-folder-upload:after{content:"\e054\e054"}.fa-duotone.fa-folder-bookmark:after,.fad.fa-folder-bookmark:after{content:"\e186\e186"}.fa-duotone.fa-folder-closed:after,.fad.fa-folder-closed:after{content:"\e185\e185"}.fa-duotone.fa-folder-cog:after,.fa-duotone.fa-folder-gear:after,.fad.fa-folder-cog:after,.fad.fa-folder-gear:after{content:"\e187\e187"}.fa-duotone.fa-folder-grid:after,.fad.fa-folder-grid:after{content:"\e188\e188"}.fa-duotone.fa-folder-heart:after,.fad.fa-folder-heart:after{content:"\e189\e189"}.fa-duotone.fa-folder-image:after,.fad.fa-folder-image:after{content:"\e18a\e18a"}.fa-duotone.fa-folder-magnifying-glass:after,.fa-duotone.fa-folder-search:after,.fad.fa-folder-magnifying-glass:after,.fad.fa-folder-search:after{content:"\e18b\e18b"}.fa-duotone.fa-folder-medical:after,.fad.fa-folder-medical:after{content:"\e18c\e18c"}.fa-duotone.fa-folder-minus:after,.fad.fa-folder-minus:after{content:"\f65d\f65d"}.fa-duotone.fa-folder-music:after,.fad.fa-folder-music:after{content:"\e18d\e18d"}.fa-duotone.fa-folder-open:after,.fad.fa-folder-open:after{content:"\f07c\f07c"}.fa-duotone.fa-folder-plus:after,.fad.fa-folder-plus:after{content:"\f65e\f65e"}.fa-duotone.fa-folder-tree:after,.fad.fa-folder-tree:after{content:"\f802\f802"}.fa-duotone.fa-folder-user:after,.fad.fa-folder-user:after{content:"\e18e\e18e"}.fa-duotone.fa-folder-times:after,.fa-duotone.fa-folder-xmark:after,.fad.fa-folder-times:after,.fad.fa-folder-xmark:after{content:"\f65f\f65f"}.fa-duotone.fa-folders:after,.fad.fa-folders:after{content:"\f660\f660"}.fa-duotone.fa-fondue-pot:after,.fad.fa-fondue-pot:after{content:"\e40d\e40d"}.fa-duotone.fa-font:after,.fad.fa-font:after{content:"\f031\f031"}.fa-duotone.fa-font-case:after,.fad.fa-font-case:after{content:"\f866\f866"}.fa-duotone.fa-football-ball:after,.fa-duotone.fa-football:after,.fad.fa-football-ball:after,.fad.fa-football:after{content:"\f44e\f44e"}.fa-duotone.fa-football-helmet:after,.fad.fa-football-helmet:after{content:"\f44f\f44f"}.fa-duotone.fa-fork:after,.fa-duotone.fa-utensil-fork:after,.fad.fa-fork:after,.fad.fa-utensil-fork:after{content:"\f2e3\f2e3"}.fa-duotone.fa-fork-knife:after,.fa-duotone.fa-utensils-alt:after,.fad.fa-fork-knife:after,.fad.fa-utensils-alt:after{content:"\f2e6\f2e6"}.fa-duotone.fa-forklift:after,.fad.fa-forklift:after{content:"\f47a\f47a"}.fa-duotone.fa-fort:after,.fad.fa-fort:after{content:"\e486\e486"}.fa-duotone.fa-forward:after,.fad.fa-forward:after{content:"\f04e\f04e"}.fa-duotone.fa-fast-forward:after,.fa-duotone.fa-forward-fast:after,.fad.fa-fast-forward:after,.fad.fa-forward-fast:after{content:"\f050\f050"}.fa-duotone.fa-forward-step:after,.fa-duotone.fa-step-forward:after,.fad.fa-forward-step:after,.fad.fa-step-forward:after{content:"\f051\f051"}.fa-duotone.fa-frame:after,.fad.fa-frame:after{content:"\e495\e495"}.fa-duotone.fa-franc-sign:after,.fad.fa-franc-sign:after{content:"\e18f\e18f"}.fa-duotone.fa-french-fries:after,.fad.fa-french-fries:after{content:"\f803\f803"}.fa-duotone.fa-frog:after,.fad.fa-frog:after{content:"\f52e\f52e"}.fa-duotone.fa-function:after,.fad.fa-function:after{content:"\f661\f661"}.fa-duotone.fa-futbol-ball:after,.fa-duotone.fa-futbol:after,.fa-duotone.fa-soccer-ball:after,.fad.fa-futbol-ball:after,.fad.fa-futbol:after,.fad.fa-soccer-ball:after{content:"\f1e3\f1e3"}.fa-duotone.fa-g:after,.fad.fa-g:after{content:"\47\47"}.fa-duotone.fa-galaxy:after,.fad.fa-galaxy:after{content:"\e008\e008"}.fa-duotone.fa-gallery-thumbnails:after,.fad.fa-gallery-thumbnails:after{content:"\e3aa\e3aa"}.fa-duotone.fa-game-board:after,.fad.fa-game-board:after{content:"\f867\f867"}.fa-duotone.fa-game-board-alt:after,.fa-duotone.fa-game-board-simple:after,.fad.fa-game-board-alt:after,.fad.fa-game-board-simple:after{content:"\f868\f868"}.fa-duotone.fa-game-console-handheld:after,.fad.fa-game-console-handheld:after{content:"\f8bb\f8bb"}.fa-duotone.fa-gamepad:after,.fad.fa-gamepad:after{content:"\f11b\f11b"}.fa-duotone.fa-gamepad-alt:after,.fa-duotone.fa-gamepad-modern:after,.fad.fa-gamepad-alt:after,.fad.fa-gamepad-modern:after{content:"\e5a2\e5a2"}.fa-duotone.fa-garage:after,.fad.fa-garage:after{content:"\e009\e009"}.fa-duotone.fa-garage-car:after,.fad.fa-garage-car:after{content:"\e00a\e00a"}.fa-duotone.fa-garage-open:after,.fad.fa-garage-open:after{content:"\e00b\e00b"}.fa-duotone.fa-garlic:after,.fad.fa-garlic:after{content:"\e40e\e40e"}.fa-duotone.fa-gas-pump:after,.fad.fa-gas-pump:after{content:"\f52f\f52f"}.fa-duotone.fa-gas-pump-slash:after,.fad.fa-gas-pump-slash:after{content:"\f5f4\f5f4"}.fa-duotone.fa-dashboard:after,.fa-duotone.fa-gauge-med:after,.fa-duotone.fa-gauge:after,.fa-duotone.fa-tachometer-alt-average:after,.fad.fa-dashboard:after,.fad.fa-gauge-med:after,.fad.fa-gauge:after,.fad.fa-tachometer-alt-average:after{content:"\f624\f624"}.fa-duotone.fa-gauge-circle-bolt:after,.fad.fa-gauge-circle-bolt:after{content:"\e496\e496"}.fa-duotone.fa-gauge-circle-minus:after,.fad.fa-gauge-circle-minus:after{content:"\e497\e497"}.fa-duotone.fa-gauge-circle-plus:after,.fad.fa-gauge-circle-plus:after{content:"\e498\e498"}.fa-duotone.fa-gauge-high:after,.fa-duotone.fa-tachometer-alt-fast:after,.fa-duotone.fa-tachometer-alt:after,.fad.fa-gauge-high:after,.fad.fa-tachometer-alt-fast:after,.fad.fa-tachometer-alt:after{content:"\f625\f625"}.fa-duotone.fa-gauge-low:after,.fa-duotone.fa-tachometer-alt-slow:after,.fad.fa-gauge-low:after,.fad.fa-tachometer-alt-slow:after{content:"\f627\f627"}.fa-duotone.fa-gauge-max:after,.fa-duotone.fa-tachometer-alt-fastest:after,.fad.fa-gauge-max:after,.fad.fa-tachometer-alt-fastest:after{content:"\f626\f626"}.fa-duotone.fa-gauge-min:after,.fa-duotone.fa-tachometer-alt-slowest:after,.fad.fa-gauge-min:after,.fad.fa-tachometer-alt-slowest:after{content:"\f628\f628"}.fa-duotone.fa-gauge-simple-med:after,.fa-duotone.fa-gauge-simple:after,.fa-duotone.fa-tachometer-average:after,.fad.fa-gauge-simple-med:after,.fad.fa-gauge-simple:after,.fad.fa-tachometer-average:after{content:"\f629\f629"}.fa-duotone.fa-gauge-simple-high:after,.fa-duotone.fa-tachometer-fast:after,.fa-duotone.fa-tachometer:after,.fad.fa-gauge-simple-high:after,.fad.fa-tachometer-fast:after,.fad.fa-tachometer:after{content:"\f62a\f62a"}.fa-duotone.fa-gauge-simple-low:after,.fa-duotone.fa-tachometer-slow:after,.fad.fa-gauge-simple-low:after,.fad.fa-tachometer-slow:after{content:"\f62c\f62c"}.fa-duotone.fa-gauge-simple-max:after,.fa-duotone.fa-tachometer-fastest:after,.fad.fa-gauge-simple-max:after,.fad.fa-tachometer-fastest:after{content:"\f62b\f62b"}.fa-duotone.fa-gauge-simple-min:after,.fa-duotone.fa-tachometer-slowest:after,.fad.fa-gauge-simple-min:after,.fad.fa-tachometer-slowest:after{content:"\f62d\f62d"}.fa-duotone.fa-gavel:after,.fa-duotone.fa-legal:after,.fad.fa-gavel:after,.fad.fa-legal:after{content:"\f0e3\f0e3"}.fa-duotone.fa-cog:after,.fa-duotone.fa-gear:after,.fad.fa-cog:after,.fad.fa-gear:after{content:"\f013\f013"}.fa-duotone.fa-cogs:after,.fa-duotone.fa-gears:after,.fad.fa-cogs:after,.fad.fa-gears:after{content:"\f085\f085"}.fa-duotone.fa-gem:after,.fad.fa-gem:after{content:"\f3a5\f3a5"}.fa-duotone.fa-genderless:after,.fad.fa-genderless:after{content:"\f22d\f22d"}.fa-duotone.fa-ghost:after,.fad.fa-ghost:after{content:"\f6e2\f6e2"}.fa-duotone.fa-gif:after,.fad.fa-gif:after{content:"\e190\e190"}.fa-duotone.fa-gift:after,.fad.fa-gift:after{content:"\f06b\f06b"}.fa-duotone.fa-gift-card:after,.fad.fa-gift-card:after{content:"\f663\f663"}.fa-duotone.fa-gifts:after,.fad.fa-gifts:after{content:"\f79c\f79c"}.fa-duotone.fa-gingerbread-man:after,.fad.fa-gingerbread-man:after{content:"\f79d\f79d"}.fa-duotone.fa-glass:after,.fad.fa-glass:after{content:"\f804\f804"}.fa-duotone.fa-glass-citrus:after,.fad.fa-glass-citrus:after{content:"\f869\f869"}.fa-duotone.fa-glass-empty:after,.fad.fa-glass-empty:after{content:"\e191\e191"}.fa-duotone.fa-glass-half-empty:after,.fa-duotone.fa-glass-half-full:after,.fa-duotone.fa-glass-half:after,.fad.fa-glass-half-empty:after,.fad.fa-glass-half-full:after,.fad.fa-glass-half:after{content:"\e192\e192"}.fa-duotone.fa-glass-water:after,.fad.fa-glass-water:after{content:"\e4f4\e4f4"}.fa-duotone.fa-glass-water-droplet:after,.fad.fa-glass-water-droplet:after{content:"\e4f5\e4f5"}.fa-duotone.fa-glasses:after,.fad.fa-glasses:after{content:"\f530\f530"}.fa-duotone.fa-glasses-alt:after,.fa-duotone.fa-glasses-round:after,.fad.fa-glasses-alt:after,.fad.fa-glasses-round:after{content:"\f5f5\f5f5"}.fa-duotone.fa-globe:after,.fad.fa-globe:after{content:"\f0ac\f0ac"}.fa-duotone.fa-globe-snow:after,.fad.fa-globe-snow:after{content:"\f7a3\f7a3"}.fa-duotone.fa-globe-stand:after,.fad.fa-globe-stand:after{content:"\f5f6\f5f6"}.fa-duotone.fa-goal-net:after,.fad.fa-goal-net:after{content:"\e3ab\e3ab"}.fa-duotone.fa-golf-ball-tee:after,.fa-duotone.fa-golf-ball:after,.fad.fa-golf-ball-tee:after,.fad.fa-golf-ball:after{content:"\f450\f450"}.fa-duotone.fa-golf-club:after,.fad.fa-golf-club:after{content:"\f451\f451"}.fa-duotone.fa-golf-flag-hole:after,.fad.fa-golf-flag-hole:after{content:"\e3ac\e3ac"}.fa-duotone.fa-gopuram:after,.fad.fa-gopuram:after{content:"\f664\f664"}.fa-duotone.fa-graduation-cap:after,.fa-duotone.fa-mortar-board:after,.fad.fa-graduation-cap:after,.fad.fa-mortar-board:after{content:"\f19d\f19d"}.fa-duotone.fa-gramophone:after,.fad.fa-gramophone:after{content:"\f8bd\f8bd"}.fa-duotone.fa-grapes:after,.fad.fa-grapes:after{content:"\e306\e306"}.fa-duotone.fa-grate:after,.fad.fa-grate:after{content:"\e193\e193"}.fa-duotone.fa-grate-droplet:after,.fad.fa-grate-droplet:after{content:"\e194\e194"}.fa-duotone.fa-greater-than:after,.fad.fa-greater-than:after{content:"\3e\3e"}.fa-duotone.fa-greater-than-equal:after,.fad.fa-greater-than-equal:after{content:"\f532\f532"}.fa-duotone.fa-grid-3:after,.fa-duotone.fa-grid:after,.fad.fa-grid-3:after,.fad.fa-grid:after{content:"\e195\e195"}.fa-duotone.fa-grid-2:after,.fad.fa-grid-2:after{content:"\e196\e196"}.fa-duotone.fa-grid-2-plus:after,.fad.fa-grid-2-plus:after{content:"\e197\e197"}.fa-duotone.fa-grid-4:after,.fad.fa-grid-4:after{content:"\e198\e198"}.fa-duotone.fa-grid-5:after,.fad.fa-grid-5:after{content:"\e199\e199"}.fa-duotone.fa-grid-dividers:after,.fad.fa-grid-dividers:after{content:"\e3ad\e3ad"}.fa-duotone.fa-grid-horizontal:after,.fad.fa-grid-horizontal:after{content:"\e307\e307"}.fa-duotone.fa-grill:after,.fad.fa-grill:after{content:"\e5a3\e5a3"}.fa-duotone.fa-grill-fire:after,.fad.fa-grill-fire:after{content:"\e5a4\e5a4"}.fa-duotone.fa-grill-hot:after,.fad.fa-grill-hot:after{content:"\e5a5\e5a5"}.fa-duotone.fa-grip-horizontal:after,.fa-duotone.fa-grip:after,.fad.fa-grip-horizontal:after,.fad.fa-grip:after{content:"\f58d\f58d"}.fa-duotone.fa-grip-dots:after,.fad.fa-grip-dots:after{content:"\e410\e410"}.fa-duotone.fa-grip-dots-vertical:after,.fad.fa-grip-dots-vertical:after{content:"\e411\e411"}.fa-duotone.fa-grip-lines:after,.fad.fa-grip-lines:after{content:"\f7a4\f7a4"}.fa-duotone.fa-grip-lines-vertical:after,.fad.fa-grip-lines-vertical:after{content:"\f7a5\f7a5"}.fa-duotone.fa-grip-vertical:after,.fad.fa-grip-vertical:after{content:"\f58e\f58e"}.fa-duotone.fa-group-arrows-rotate:after,.fad.fa-group-arrows-rotate:after{content:"\e4f6\e4f6"}.fa-duotone.fa-guarani-sign:after,.fad.fa-guarani-sign:after{content:"\e19a\e19a"}.fa-duotone.fa-guitar:after,.fad.fa-guitar:after{content:"\f7a6\f7a6"}.fa-duotone.fa-guitar-electric:after,.fad.fa-guitar-electric:after{content:"\f8be\f8be"}.fa-duotone.fa-guitars:after,.fad.fa-guitars:after{content:"\f8bf\f8bf"}.fa-duotone.fa-gun:after,.fad.fa-gun:after{content:"\e19b\e19b"}.fa-duotone.fa-gun-slash:after,.fad.fa-gun-slash:after{content:"\e19c\e19c"}.fa-duotone.fa-gun-squirt:after,.fad.fa-gun-squirt:after{content:"\e19d\e19d"}.fa-duotone.fa-h:after,.fad.fa-h:after{content:"\48\48"}.fa-duotone.fa-h1:after,.fad.fa-h1:after{content:"\f313\f313"}.fa-duotone.fa-h2:after,.fad.fa-h2:after{content:"\f314\f314"}.fa-duotone.fa-h3:after,.fad.fa-h3:after{content:"\f315\f315"}.fa-duotone.fa-h4:after,.fad.fa-h4:after{content:"\f86a\f86a"}.fa-duotone.fa-h5:after,.fad.fa-h5:after{content:"\e412\e412"}.fa-duotone.fa-h6:after,.fad.fa-h6:after{content:"\e413\e413"}.fa-duotone.fa-hammer:after,.fad.fa-hammer:after{content:"\f6e3\f6e3"}.fa-duotone.fa-hammer-crash:after,.fad.fa-hammer-crash:after{content:"\e414\e414"}.fa-duotone.fa-hammer-war:after,.fad.fa-hammer-war:after{content:"\f6e4\f6e4"}.fa-duotone.fa-hamsa:after,.fad.fa-hamsa:after{content:"\f665\f665"}.fa-duotone.fa-hand-paper:after,.fa-duotone.fa-hand:after,.fad.fa-hand-paper:after,.fad.fa-hand:after{content:"\f256\f256"}.fa-duotone.fa-hand-back-fist:after,.fa-duotone.fa-hand-rock:after,.fad.fa-hand-back-fist:after,.fad.fa-hand-rock:after{content:"\f255\f255"}.fa-duotone.fa-hand-back-point-down:after,.fad.fa-hand-back-point-down:after{content:"\e19e\e19e"}.fa-duotone.fa-hand-back-point-left:after,.fad.fa-hand-back-point-left:after{content:"\e19f\e19f"}.fa-duotone.fa-hand-back-point-ribbon:after,.fad.fa-hand-back-point-ribbon:after{content:"\e1a0\e1a0"}.fa-duotone.fa-hand-back-point-right:after,.fad.fa-hand-back-point-right:after{content:"\e1a1\e1a1"}.fa-duotone.fa-hand-back-point-up:after,.fad.fa-hand-back-point-up:after{content:"\e1a2\e1a2"}.fa-duotone.fa-allergies:after,.fa-duotone.fa-hand-dots:after,.fad.fa-allergies:after,.fad.fa-hand-dots:after{content:"\f461\f461"}.fa-duotone.fa-hand-fingers-crossed:after,.fad.fa-hand-fingers-crossed:after{content:"\e1a3\e1a3"}.fa-duotone.fa-fist-raised:after,.fa-duotone.fa-hand-fist:after,.fad.fa-fist-raised:after,.fad.fa-hand-fist:after{content:"\f6de\f6de"}.fa-duotone.fa-hand-heart:after,.fad.fa-hand-heart:after{content:"\f4bc\f4bc"}.fa-duotone.fa-hand-holding:after,.fad.fa-hand-holding:after{content:"\f4bd\f4bd"}.fa-duotone.fa-hand-holding-box:after,.fad.fa-hand-holding-box:after{content:"\f47b\f47b"}.fa-duotone.fa-hand-holding-dollar:after,.fa-duotone.fa-hand-holding-usd:after,.fad.fa-hand-holding-dollar:after,.fad.fa-hand-holding-usd:after{content:"\f4c0\f4c0"}.fa-duotone.fa-hand-holding-droplet:after,.fa-duotone.fa-hand-holding-water:after,.fad.fa-hand-holding-droplet:after,.fad.fa-hand-holding-water:after{content:"\f4c1\f4c1"}.fa-duotone.fa-hand-holding-hand:after,.fad.fa-hand-holding-hand:after{content:"\e4f7\e4f7"}.fa-duotone.fa-hand-holding-heart:after,.fad.fa-hand-holding-heart:after{content:"\f4be\f4be"}.fa-duotone.fa-hand-holding-magic:after,.fad.fa-hand-holding-magic:after{content:"\f6e5\f6e5"}.fa-duotone.fa-hand-holding-medical:after,.fad.fa-hand-holding-medical:after{content:"\e05c\e05c"}.fa-duotone.fa-hand-holding-seedling:after,.fad.fa-hand-holding-seedling:after{content:"\f4bf\f4bf"}.fa-duotone.fa-hand-holding-skull:after,.fad.fa-hand-holding-skull:after{content:"\e1a4\e1a4"}.fa-duotone.fa-hand-horns:after,.fad.fa-hand-horns:after{content:"\e1a9\e1a9"}.fa-duotone.fa-hand-lizard:after,.fad.fa-hand-lizard:after{content:"\f258\f258"}.fa-duotone.fa-hand-love:after,.fad.fa-hand-love:after{content:"\e1a5\e1a5"}.fa-duotone.fa-hand-middle-finger:after,.fad.fa-hand-middle-finger:after{content:"\f806\f806"}.fa-duotone.fa-hand-peace:after,.fad.fa-hand-peace:after{content:"\f25b\f25b"}.fa-duotone.fa-hand-point-down:after,.fad.fa-hand-point-down:after{content:"\f0a7\f0a7"}.fa-duotone.fa-hand-point-left:after,.fad.fa-hand-point-left:after{content:"\f0a5\f0a5"}.fa-duotone.fa-hand-point-ribbon:after,.fad.fa-hand-point-ribbon:after{content:"\e1a6\e1a6"}.fa-duotone.fa-hand-point-right:after,.fad.fa-hand-point-right:after{content:"\f0a4\f0a4"}.fa-duotone.fa-hand-point-up:after,.fad.fa-hand-point-up:after{content:"\f0a6\f0a6"}.fa-duotone.fa-hand-pointer:after,.fad.fa-hand-pointer:after{content:"\f25a\f25a"}.fa-duotone.fa-hand-scissors:after,.fad.fa-hand-scissors:after{content:"\f257\f257"}.fa-duotone.fa-hand-sparkles:after,.fad.fa-hand-sparkles:after{content:"\e05d\e05d"}.fa-duotone.fa-hand-spock:after,.fad.fa-hand-spock:after{content:"\f259\f259"}.fa-duotone.fa-hand-wave:after,.fad.fa-hand-wave:after{content:"\e1a7\e1a7"}.fa-duotone.fa-handcuffs:after,.fad.fa-handcuffs:after{content:"\e4f8\e4f8"}.fa-duotone.fa-hands:after,.fa-duotone.fa-sign-language:after,.fa-duotone.fa-signing:after,.fad.fa-hands:after,.fad.fa-sign-language:after,.fad.fa-signing:after{content:"\f2a7\f2a7"}.fa-duotone.fa-american-sign-language-interpreting:after,.fa-duotone.fa-asl-interpreting:after,.fa-duotone.fa-hands-american-sign-language-interpreting:after,.fa-duotone.fa-hands-asl-interpreting:after,.fad.fa-american-sign-language-interpreting:after,.fad.fa-asl-interpreting:after,.fad.fa-hands-american-sign-language-interpreting:after,.fad.fa-hands-asl-interpreting:after{content:"\f2a3\f2a3"}.fa-duotone.fa-hands-bound:after,.fad.fa-hands-bound:after{content:"\e4f9\e4f9"}.fa-duotone.fa-hands-bubbles:after,.fa-duotone.fa-hands-wash:after,.fad.fa-hands-bubbles:after,.fad.fa-hands-wash:after{content:"\e05e\e05e"}.fa-duotone.fa-hands-clapping:after,.fad.fa-hands-clapping:after{content:"\e1a8\e1a8"}.fa-duotone.fa-hands-holding:after,.fad.fa-hands-holding:after{content:"\f4c2\f4c2"}.fa-duotone.fa-hands-holding-child:after,.fad.fa-hands-holding-child:after{content:"\e4fa\e4fa"}.fa-duotone.fa-hands-holding-circle:after,.fad.fa-hands-holding-circle:after{content:"\e4fb\e4fb"}.fa-duotone.fa-hand-receiving:after,.fa-duotone.fa-hands-holding-diamond:after,.fad.fa-hand-receiving:after,.fad.fa-hands-holding-diamond:after{content:"\f47c\f47c"}.fa-duotone.fa-hands-holding-dollar:after,.fa-duotone.fa-hands-usd:after,.fad.fa-hands-holding-dollar:after,.fad.fa-hands-usd:after{content:"\f4c5\f4c5"}.fa-duotone.fa-hands-heart:after,.fa-duotone.fa-hands-holding-heart:after,.fad.fa-hands-heart:after,.fad.fa-hands-holding-heart:after{content:"\f4c3\f4c3"}.fa-duotone.fa-hands-praying:after,.fa-duotone.fa-praying-hands:after,.fad.fa-hands-praying:after,.fad.fa-praying-hands:after{content:"\f684\f684"}.fa-duotone.fa-handshake:after,.fad.fa-handshake:after{content:"\f2b5\f2b5"}.fa-duotone.fa-hands-helping:after,.fa-duotone.fa-handshake-angle:after,.fad.fa-hands-helping:after,.fad.fa-handshake-angle:after{content:"\f4c4\f4c4"}.fa-duotone.fa-handshake-alt:after,.fa-duotone.fa-handshake-simple:after,.fad.fa-handshake-alt:after,.fad.fa-handshake-simple:after{content:"\f4c6\f4c6"}.fa-duotone.fa-handshake-alt-slash:after,.fa-duotone.fa-handshake-simple-slash:after,.fad.fa-handshake-alt-slash:after,.fad.fa-handshake-simple-slash:after{content:"\e05f\e05f"}.fa-duotone.fa-handshake-slash:after,.fad.fa-handshake-slash:after{content:"\e060\e060"}.fa-duotone.fa-hanukiah:after,.fad.fa-hanukiah:after{content:"\f6e6\f6e6"}.fa-duotone.fa-hard-drive:after,.fa-duotone.fa-hdd:after,.fad.fa-hard-drive:after,.fad.fa-hdd:after{content:"\f0a0\f0a0"}.fa-duotone.fa-hashtag:after,.fad.fa-hashtag:after{content:"\23\23"}.fa-duotone.fa-hashtag-lock:after,.fad.fa-hashtag-lock:after{content:"\e415\e415"}.fa-duotone.fa-hat-chef:after,.fad.fa-hat-chef:after{content:"\f86b\f86b"}.fa-duotone.fa-hat-cowboy:after,.fad.fa-hat-cowboy:after{content:"\f8c0\f8c0"}.fa-duotone.fa-hat-cowboy-side:after,.fad.fa-hat-cowboy-side:after{content:"\f8c1\f8c1"}.fa-duotone.fa-hat-santa:after,.fad.fa-hat-santa:after{content:"\f7a7\f7a7"}.fa-duotone.fa-hat-winter:after,.fad.fa-hat-winter:after{content:"\f7a8\f7a8"}.fa-duotone.fa-hat-witch:after,.fad.fa-hat-witch:after{content:"\f6e7\f6e7"}.fa-duotone.fa-hat-wizard:after,.fad.fa-hat-wizard:after{content:"\f6e8\f6e8"}.fa-duotone.fa-head-side:after,.fad.fa-head-side:after{content:"\f6e9\f6e9"}.fa-duotone.fa-head-side-brain:after,.fad.fa-head-side-brain:after{content:"\f808\f808"}.fa-duotone.fa-head-side-cough:after,.fad.fa-head-side-cough:after{content:"\e061\e061"}.fa-duotone.fa-head-side-cough-slash:after,.fad.fa-head-side-cough-slash:after{content:"\e062\e062"}.fa-duotone.fa-head-side-goggles:after,.fa-duotone.fa-head-vr:after,.fad.fa-head-side-goggles:after,.fad.fa-head-vr:after{content:"\f6ea\f6ea"}.fa-duotone.fa-head-side-headphones:after,.fad.fa-head-side-headphones:after{content:"\f8c2\f8c2"}.fa-duotone.fa-head-side-heart:after,.fad.fa-head-side-heart:after{content:"\e1aa\e1aa"}.fa-duotone.fa-head-side-mask:after,.fad.fa-head-side-mask:after{content:"\e063\e063"}.fa-duotone.fa-head-side-medical:after,.fad.fa-head-side-medical:after{content:"\f809\f809"}.fa-duotone.fa-head-side-virus:after,.fad.fa-head-side-virus:after{content:"\e064\e064"}.fa-duotone.fa-header:after,.fa-duotone.fa-heading:after,.fad.fa-header:after,.fad.fa-heading:after{content:"\f1dc\f1dc"}.fa-duotone.fa-headphones:after,.fad.fa-headphones:after{content:"\f025\f025"}.fa-duotone.fa-headphones-alt:after,.fa-duotone.fa-headphones-simple:after,.fad.fa-headphones-alt:after,.fad.fa-headphones-simple:after{content:"\f58f\f58f"}.fa-duotone.fa-headset:after,.fad.fa-headset:after{content:"\f590\f590"}.fa-duotone.fa-heart:after,.fad.fa-heart:after{content:"\f004\f004"}.fa-duotone.fa-heart-circle-bolt:after,.fad.fa-heart-circle-bolt:after{content:"\e4fc\e4fc"}.fa-duotone.fa-heart-circle-check:after,.fad.fa-heart-circle-check:after{content:"\e4fd\e4fd"}.fa-duotone.fa-heart-circle-exclamation:after,.fad.fa-heart-circle-exclamation:after{content:"\e4fe\e4fe"}.fa-duotone.fa-heart-circle-minus:after,.fad.fa-heart-circle-minus:after{content:"\e4ff\e4ff"}.fa-duotone.fa-heart-circle-plus:after,.fad.fa-heart-circle-plus:after{content:"\e500\e500"}.fa-duotone.fa-heart-circle-xmark:after,.fad.fa-heart-circle-xmark:after{content:"\e501\e501"}.fa-duotone.fa-heart-broken:after,.fa-duotone.fa-heart-crack:after,.fad.fa-heart-broken:after,.fad.fa-heart-crack:after{content:"\f7a9\f7a9"}.fa-duotone.fa-heart-half:after,.fad.fa-heart-half:after{content:"\e1ab\e1ab"}.fa-duotone.fa-heart-half-alt:after,.fa-duotone.fa-heart-half-stroke:after,.fad.fa-heart-half-alt:after,.fad.fa-heart-half-stroke:after{content:"\e1ac\e1ac"}.fa-duotone.fa-heart-pulse:after,.fa-duotone.fa-heartbeat:after,.fad.fa-heart-pulse:after,.fad.fa-heartbeat:after{content:"\f21e\f21e"}.fa-duotone.fa-heat:after,.fad.fa-heat:after{content:"\e00c\e00c"}.fa-duotone.fa-helicopter:after,.fad.fa-helicopter:after{content:"\f533\f533"}.fa-duotone.fa-helicopter-symbol:after,.fad.fa-helicopter-symbol:after{content:"\e502\e502"}.fa-duotone.fa-helmet-battle:after,.fad.fa-helmet-battle:after{content:"\f6eb\f6eb"}.fa-duotone.fa-hard-hat:after,.fa-duotone.fa-hat-hard:after,.fa-duotone.fa-helmet-safety:after,.fad.fa-hard-hat:after,.fad.fa-hat-hard:after,.fad.fa-helmet-safety:after{content:"\f807\f807"}.fa-duotone.fa-helmet-un:after,.fad.fa-helmet-un:after{content:"\e503\e503"}.fa-duotone.fa-hexagon:after,.fad.fa-hexagon:after{content:"\f312\f312"}.fa-duotone.fa-hexagon-check:after,.fad.fa-hexagon-check:after{content:"\e416\e416"}.fa-duotone.fa-hexagon-divide:after,.fad.fa-hexagon-divide:after{content:"\e1ad\e1ad"}.fa-duotone.fa-hexagon-exclamation:after,.fad.fa-hexagon-exclamation:after{content:"\e417\e417"}.fa-duotone.fa-hexagon-image:after,.fad.fa-hexagon-image:after{content:"\e504\e504"}.fa-duotone.fa-hexagon-minus:after,.fa-duotone.fa-minus-hexagon:after,.fad.fa-hexagon-minus:after,.fad.fa-minus-hexagon:after{content:"\f307\f307"}.fa-duotone.fa-hexagon-plus:after,.fa-duotone.fa-plus-hexagon:after,.fad.fa-hexagon-plus:after,.fad.fa-plus-hexagon:after{content:"\f300\f300"}.fa-duotone.fa-hexagon-vertical-nft:after,.fad.fa-hexagon-vertical-nft:after{content:"\e505\e505"}.fa-duotone.fa-hexagon-vertical-nft-slanted:after,.fad.fa-hexagon-vertical-nft-slanted:after{content:"\e506\e506"}.fa-duotone.fa-hexagon-xmark:after,.fa-duotone.fa-times-hexagon:after,.fa-duotone.fa-xmark-hexagon:after,.fad.fa-hexagon-xmark:after,.fad.fa-times-hexagon:after,.fad.fa-xmark-hexagon:after{content:"\f2ee\f2ee"}.fa-duotone.fa-high-definition:after,.fa-duotone.fa-rectangle-hd:after,.fad.fa-high-definition:after,.fad.fa-rectangle-hd:after{content:"\e1ae\e1ae"}.fa-duotone.fa-highlighter:after,.fad.fa-highlighter:after{content:"\f591\f591"}.fa-duotone.fa-highlighter-line:after,.fad.fa-highlighter-line:after{content:"\e1af\e1af"}.fa-duotone.fa-hill-avalanche:after,.fad.fa-hill-avalanche:after{content:"\e507\e507"}.fa-duotone.fa-hill-rockslide:after,.fad.fa-hill-rockslide:after{content:"\e508\e508"}.fa-duotone.fa-hippo:after,.fad.fa-hippo:after{content:"\f6ed\f6ed"}.fa-duotone.fa-hockey-mask:after,.fad.fa-hockey-mask:after{content:"\f6ee\f6ee"}.fa-duotone.fa-hockey-puck:after,.fad.fa-hockey-puck:after{content:"\f453\f453"}.fa-duotone.fa-hockey-stick-puck:after,.fad.fa-hockey-stick-puck:after{content:"\e3ae\e3ae"}.fa-duotone.fa-hockey-sticks:after,.fad.fa-hockey-sticks:after{content:"\f454\f454"}.fa-duotone.fa-holly-berry:after,.fad.fa-holly-berry:after{content:"\f7aa\f7aa"}.fa-duotone.fa-honey-pot:after,.fad.fa-honey-pot:after{content:"\e418\e418"}.fa-duotone.fa-hood-cloak:after,.fad.fa-hood-cloak:after{content:"\f6ef\f6ef"}.fa-duotone.fa-horizontal-rule:after,.fad.fa-horizontal-rule:after{content:"\f86c\f86c"}.fa-duotone.fa-horse:after,.fad.fa-horse:after{content:"\f6f0\f6f0"}.fa-duotone.fa-horse-head:after,.fad.fa-horse-head:after{content:"\f7ab\f7ab"}.fa-duotone.fa-horse-saddle:after,.fad.fa-horse-saddle:after{content:"\f8c3\f8c3"}.fa-duotone.fa-hose:after,.fad.fa-hose:after{content:"\e419\e419"}.fa-duotone.fa-hose-reel:after,.fad.fa-hose-reel:after{content:"\e41a\e41a"}.fa-duotone.fa-hospital-alt:after,.fa-duotone.fa-hospital-wide:after,.fa-duotone.fa-hospital:after,.fad.fa-hospital-alt:after,.fad.fa-hospital-wide:after,.fad.fa-hospital:after{content:"\f0f8\f0f8"}.fa-duotone.fa-hospital-user:after,.fad.fa-hospital-user:after{content:"\f80d\f80d"}.fa-duotone.fa-hospitals:after,.fad.fa-hospitals:after{content:"\f80e\f80e"}.fa-duotone.fa-hot-tub-person:after,.fa-duotone.fa-hot-tub:after,.fad.fa-hot-tub-person:after,.fad.fa-hot-tub:after{content:"\f593\f593"}.fa-duotone.fa-hotdog:after,.fad.fa-hotdog:after{content:"\f80f\f80f"}.fa-duotone.fa-hotel:after,.fad.fa-hotel:after{content:"\f594\f594"}.fa-duotone.fa-hourglass-empty:after,.fa-duotone.fa-hourglass:after,.fad.fa-hourglass-empty:after,.fad.fa-hourglass:after{content:"\f254\f254"}.fa-duotone.fa-hourglass-clock:after,.fad.fa-hourglass-clock:after{content:"\e41b\e41b"}.fa-duotone.fa-hourglass-3:after,.fa-duotone.fa-hourglass-end:after,.fad.fa-hourglass-3:after,.fad.fa-hourglass-end:after{content:"\f253\f253"}.fa-duotone.fa-hourglass-2:after,.fa-duotone.fa-hourglass-half:after,.fad.fa-hourglass-2:after,.fad.fa-hourglass-half:after{content:"\f252\f252"}.fa-duotone.fa-hourglass-1:after,.fa-duotone.fa-hourglass-start:after,.fad.fa-hourglass-1:after,.fad.fa-hourglass-start:after{content:"\f251\f251"}.fa-duotone.fa-home-alt:after,.fa-duotone.fa-home-lg-alt:after,.fa-duotone.fa-home:after,.fa-duotone.fa-house:after,.fad.fa-home-alt:after,.fad.fa-home-lg-alt:after,.fad.fa-home:after,.fad.fa-house:after{content:"\f015\f015"}.fa-duotone.fa-home-blank:after,.fa-duotone.fa-house-blank:after,.fad.fa-home-blank:after,.fad.fa-house-blank:after{content:"\e487\e487"}.fa-duotone.fa-house-building:after,.fad.fa-house-building:after{content:"\e1b1\e1b1"}.fa-duotone.fa-home-lg:after,.fa-duotone.fa-house-chimney:after,.fad.fa-home-lg:after,.fad.fa-house-chimney:after{content:"\e3af\e3af"}.fa-duotone.fa-house-chimney-blank:after,.fad.fa-house-chimney-blank:after{content:"\e3b0\e3b0"}.fa-duotone.fa-house-chimney-crack:after,.fa-duotone.fa-house-damage:after,.fad.fa-house-chimney-crack:after,.fad.fa-house-damage:after{content:"\f6f1\f6f1"}.fa-duotone.fa-house-chimney-heart:after,.fad.fa-house-chimney-heart:after{content:"\e1b2\e1b2"}.fa-duotone.fa-clinic-medical:after,.fa-duotone.fa-house-chimney-medical:after,.fad.fa-clinic-medical:after,.fad.fa-house-chimney-medical:after{content:"\f7f2\f7f2"}.fa-duotone.fa-house-chimney-user:after,.fad.fa-house-chimney-user:after{content:"\e065\e065"}.fa-duotone.fa-house-chimney-window:after,.fad.fa-house-chimney-window:after{content:"\e00d\e00d"}.fa-duotone.fa-house-circle-check:after,.fad.fa-house-circle-check:after{content:"\e509\e509"}.fa-duotone.fa-house-circle-exclamation:after,.fad.fa-house-circle-exclamation:after{content:"\e50a\e50a"}.fa-duotone.fa-house-circle-xmark:after,.fad.fa-house-circle-xmark:after{content:"\e50b\e50b"}.fa-duotone.fa-house-crack:after,.fad.fa-house-crack:after{content:"\e3b1\e3b1"}.fa-duotone.fa-house-day:after,.fad.fa-house-day:after{content:"\e00e\e00e"}.fa-duotone.fa-house-fire:after,.fad.fa-house-fire:after{content:"\e50c\e50c"}.fa-duotone.fa-house-flag:after,.fad.fa-house-flag:after{content:"\e50d\e50d"}.fa-duotone.fa-house-flood-water:after,.fad.fa-house-flood-water:after{content:"\e50e\e50e"}.fa-duotone.fa-house-flood-water-circle-arrow-right:after,.fad.fa-house-flood-water-circle-arrow-right:after{content:"\e50f\e50f"}.fa-duotone.fa-home-heart:after,.fa-duotone.fa-house-heart:after,.fad.fa-home-heart:after,.fad.fa-house-heart:after{content:"\f4c9\f4c9"}.fa-duotone.fa-house-laptop:after,.fa-duotone.fa-laptop-house:after,.fad.fa-house-laptop:after,.fad.fa-laptop-house:after{content:"\e066\e066"}.fa-duotone.fa-house-lock:after,.fad.fa-house-lock:after{content:"\e510\e510"}.fa-duotone.fa-house-medical:after,.fad.fa-house-medical:after{content:"\e3b2\e3b2"}.fa-duotone.fa-house-medical-circle-check:after,.fad.fa-house-medical-circle-check:after{content:"\e511\e511"}.fa-duotone.fa-house-medical-circle-exclamation:after,.fad.fa-house-medical-circle-exclamation:after{content:"\e512\e512"}.fa-duotone.fa-house-medical-circle-xmark:after,.fad.fa-house-medical-circle-xmark:after{content:"\e513\e513"}.fa-duotone.fa-house-medical-flag:after,.fad.fa-house-medical-flag:after{content:"\e514\e514"}.fa-duotone.fa-house-night:after,.fad.fa-house-night:after{content:"\e010\e010"}.fa-duotone.fa-house-leave:after,.fa-duotone.fa-house-person-depart:after,.fa-duotone.fa-house-person-leave:after,.fad.fa-house-leave:after,.fad.fa-house-person-depart:after,.fad.fa-house-person-leave:after{content:"\e00f\e00f"}.fa-duotone.fa-house-person-arrive:after,.fa-duotone.fa-house-person-return:after,.fa-duotone.fa-house-return:after,.fad.fa-house-person-arrive:after,.fad.fa-house-person-return:after,.fad.fa-house-return:after{content:"\e011\e011"}.fa-duotone.fa-house-signal:after,.fad.fa-house-signal:after{content:"\e012\e012"}.fa-duotone.fa-house-tree:after,.fad.fa-house-tree:after{content:"\e1b3\e1b3"}.fa-duotone.fa-house-tsunami:after,.fad.fa-house-tsunami:after{content:"\e515\e515"}.fa-duotone.fa-house-turret:after,.fad.fa-house-turret:after{content:"\e1b4\e1b4"}.fa-duotone.fa-home-user:after,.fa-duotone.fa-house-user:after,.fad.fa-home-user:after,.fad.fa-house-user:after{content:"\e1b0\e1b0"}.fa-duotone.fa-house-flood:after,.fa-duotone.fa-house-water:after,.fad.fa-house-flood:after,.fad.fa-house-water:after{content:"\f74f\f74f"}.fa-duotone.fa-house-window:after,.fad.fa-house-window:after{content:"\e3b3\e3b3"}.fa-duotone.fa-hryvnia-sign:after,.fa-duotone.fa-hryvnia:after,.fad.fa-hryvnia-sign:after,.fad.fa-hryvnia:after{content:"\f6f2\f6f2"}.fa-duotone.fa-100:after,.fa-duotone.fa-hundred-points:after,.fad.fa-100:after,.fad.fa-hundred-points:after{content:"\e41c\e41c"}.fa-duotone.fa-hurricane:after,.fad.fa-hurricane:after{content:"\f751\f751"}.fa-duotone.fa-hyphen:after,.fad.fa-hyphen:after{content:"\2d\2d"}.fa-duotone.fa-i:after,.fad.fa-i:after{content:"\49\49"}.fa-duotone.fa-i-cursor:after,.fad.fa-i-cursor:after{content:"\f246\f246"}.fa-duotone.fa-ice-cream:after,.fad.fa-ice-cream:after{content:"\f810\f810"}.fa-duotone.fa-ice-skate:after,.fad.fa-ice-skate:after{content:"\f7ac\f7ac"}.fa-duotone.fa-icicles:after,.fad.fa-icicles:after{content:"\f7ad\f7ad"}.fa-duotone.fa-heart-music-camera-bolt:after,.fa-duotone.fa-icons:after,.fad.fa-heart-music-camera-bolt:after,.fad.fa-icons:after{content:"\f86d\f86d"}.fa-duotone.fa-id-badge:after,.fad.fa-id-badge:after{content:"\f2c1\f2c1"}.fa-duotone.fa-drivers-license:after,.fa-duotone.fa-id-card:after,.fad.fa-drivers-license:after,.fad.fa-id-card:after{content:"\f2c2\f2c2"}.fa-duotone.fa-id-card-alt:after,.fa-duotone.fa-id-card-clip:after,.fad.fa-id-card-alt:after,.fad.fa-id-card-clip:after{content:"\f47f\f47f"}.fa-duotone.fa-igloo:after,.fad.fa-igloo:after{content:"\f7ae\f7ae"}.fa-duotone.fa-image:after,.fad.fa-image:after{content:"\f03e\f03e"}.fa-duotone.fa-image-landscape:after,.fa-duotone.fa-landscape:after,.fad.fa-image-landscape:after,.fad.fa-landscape:after{content:"\e1b5\e1b5"}.fa-duotone.fa-image-polaroid:after,.fad.fa-image-polaroid:after{content:"\f8c4\f8c4"}.fa-duotone.fa-image-polaroid-user:after,.fad.fa-image-polaroid-user:after{content:"\e1b6\e1b6"}.fa-duotone.fa-image-portrait:after,.fa-duotone.fa-portrait:after,.fad.fa-image-portrait:after,.fad.fa-portrait:after{content:"\f3e0\f3e0"}.fa-duotone.fa-image-slash:after,.fad.fa-image-slash:after{content:"\e1b7\e1b7"}.fa-duotone.fa-image-user:after,.fad.fa-image-user:after{content:"\e1b8\e1b8"}.fa-duotone.fa-images:after,.fad.fa-images:after{content:"\f302\f302"}.fa-duotone.fa-images-user:after,.fad.fa-images-user:after{content:"\e1b9\e1b9"}.fa-duotone.fa-inbox:after,.fad.fa-inbox:after{content:"\f01c\f01c"}.fa-duotone.fa-inbox-full:after,.fad.fa-inbox-full:after{content:"\e1ba\e1ba"}.fa-duotone.fa-inbox-arrow-down:after,.fa-duotone.fa-inbox-in:after,.fad.fa-inbox-arrow-down:after,.fad.fa-inbox-in:after{content:"\f310\f310"}.fa-duotone.fa-inbox-arrow-up:after,.fa-duotone.fa-inbox-out:after,.fad.fa-inbox-arrow-up:after,.fad.fa-inbox-out:after{content:"\f311\f311"}.fa-duotone.fa-inboxes:after,.fad.fa-inboxes:after{content:"\e1bb\e1bb"}.fa-duotone.fa-indent:after,.fad.fa-indent:after{content:"\f03c\f03c"}.fa-duotone.fa-indian-rupee-sign:after,.fa-duotone.fa-indian-rupee:after,.fa-duotone.fa-inr:after,.fad.fa-indian-rupee-sign:after,.fad.fa-indian-rupee:after,.fad.fa-inr:after{content:"\e1bc\e1bc"}.fa-duotone.fa-industry:after,.fad.fa-industry:after{content:"\f275\f275"}.fa-duotone.fa-industry-alt:after,.fa-duotone.fa-industry-windows:after,.fad.fa-industry-alt:after,.fad.fa-industry-windows:after{content:"\f3b3\f3b3"}.fa-duotone.fa-infinity:after,.fad.fa-infinity:after{content:"\f534\f534"}.fa-duotone.fa-info:after,.fad.fa-info:after{content:"\f129\f129"}.fa-duotone.fa-inhaler:after,.fad.fa-inhaler:after{content:"\f5f9\f5f9"}.fa-duotone.fa-input-numeric:after,.fad.fa-input-numeric:after{content:"\e1bd\e1bd"}.fa-duotone.fa-input-pipe:after,.fad.fa-input-pipe:after{content:"\e1be\e1be"}.fa-duotone.fa-input-text:after,.fad.fa-input-text:after{content:"\e1bf\e1bf"}.fa-duotone.fa-integral:after,.fad.fa-integral:after{content:"\f667\f667"}.fa-duotone.fa-intersection:after,.fad.fa-intersection:after{content:"\f668\f668"}.fa-duotone.fa-island-tree-palm:after,.fa-duotone.fa-island-tropical:after,.fad.fa-island-tree-palm:after,.fad.fa-island-tropical:after{content:"\f811\f811"}.fa-duotone.fa-italic:after,.fad.fa-italic:after{content:"\f033\f033"}.fa-duotone.fa-j:after,.fad.fa-j:after{content:"\4a\4a"}.fa-duotone.fa-jack-o-lantern:after,.fad.fa-jack-o-lantern:after{content:"\f30e\f30e"}.fa-duotone.fa-jar:after,.fad.fa-jar:after{content:"\e516\e516"}.fa-duotone.fa-jar-wheat:after,.fad.fa-jar-wheat:after{content:"\e517\e517"}.fa-duotone.fa-jedi:after,.fad.fa-jedi:after{content:"\f669\f669"}.fa-duotone.fa-fighter-jet:after,.fa-duotone.fa-jet-fighter:after,.fad.fa-fighter-jet:after,.fad.fa-jet-fighter:after{content:"\f0fb\f0fb"}.fa-duotone.fa-jet-fighter-up:after,.fad.fa-jet-fighter-up:after{content:"\e518\e518"}.fa-duotone.fa-joint:after,.fad.fa-joint:after{content:"\f595\f595"}.fa-duotone.fa-joystick:after,.fad.fa-joystick:after{content:"\f8c5\f8c5"}.fa-duotone.fa-jug:after,.fad.fa-jug:after{content:"\f8c6\f8c6"}.fa-duotone.fa-jug-detergent:after,.fad.fa-jug-detergent:after{content:"\e519\e519"}.fa-duotone.fa-k:after,.fad.fa-k:after{content:"\4b\4b"}.fa-duotone.fa-kaaba:after,.fad.fa-kaaba:after{content:"\f66b\f66b"}.fa-duotone.fa-kazoo:after,.fad.fa-kazoo:after{content:"\f8c7\f8c7"}.fa-duotone.fa-kerning:after,.fad.fa-kerning:after{content:"\f86f\f86f"}.fa-duotone.fa-key:after,.fad.fa-key:after{content:"\f084\f084"}.fa-duotone.fa-key-skeleton:after,.fad.fa-key-skeleton:after{content:"\f6f3\f6f3"}.fa-duotone.fa-key-skeleton-left-right:after,.fad.fa-key-skeleton-left-right:after{content:"\e3b4\e3b4"}.fa-duotone.fa-keyboard:after,.fad.fa-keyboard:after{content:"\f11c\f11c"}.fa-duotone.fa-keyboard-brightness:after,.fad.fa-keyboard-brightness:after{content:"\e1c0\e1c0"}.fa-duotone.fa-keyboard-brightness-low:after,.fad.fa-keyboard-brightness-low:after{content:"\e1c1\e1c1"}.fa-duotone.fa-keyboard-down:after,.fad.fa-keyboard-down:after{content:"\e1c2\e1c2"}.fa-duotone.fa-keyboard-left:after,.fad.fa-keyboard-left:after{content:"\e1c3\e1c3"}.fa-duotone.fa-keynote:after,.fad.fa-keynote:after{content:"\f66c\f66c"}.fa-duotone.fa-khanda:after,.fad.fa-khanda:after{content:"\f66d\f66d"}.fa-duotone.fa-kidneys:after,.fad.fa-kidneys:after{content:"\f5fb\f5fb"}.fa-duotone.fa-kip-sign:after,.fad.fa-kip-sign:after{content:"\e1c4\e1c4"}.fa-duotone.fa-first-aid:after,.fa-duotone.fa-kit-medical:after,.fad.fa-first-aid:after,.fad.fa-kit-medical:after{content:"\f479\f479"}.fa-duotone.fa-kitchen-set:after,.fad.fa-kitchen-set:after{content:"\e51a\e51a"}.fa-duotone.fa-kite:after,.fad.fa-kite:after{content:"\f6f4\f6f4"}.fa-duotone.fa-kiwi-bird:after,.fad.fa-kiwi-bird:after{content:"\f535\f535"}.fa-duotone.fa-kiwi-fruit:after,.fad.fa-kiwi-fruit:after{content:"\e30c\e30c"}.fa-duotone.fa-knife:after,.fa-duotone.fa-utensil-knife:after,.fad.fa-knife:after,.fad.fa-utensil-knife:after{content:"\f2e4\f2e4"}.fa-duotone.fa-knife-kitchen:after,.fad.fa-knife-kitchen:after{content:"\f6f5\f6f5"}.fa-duotone.fa-l:after,.fad.fa-l:after{content:"\4c\4c"}.fa-duotone.fa-lacrosse-stick:after,.fad.fa-lacrosse-stick:after{content:"\e3b5\e3b5"}.fa-duotone.fa-lacrosse-stick-ball:after,.fad.fa-lacrosse-stick-ball:after{content:"\e3b6\e3b6"}.fa-duotone.fa-lambda:after,.fad.fa-lambda:after{content:"\f66e\f66e"}.fa-duotone.fa-lamp:after,.fad.fa-lamp:after{content:"\f4ca\f4ca"}.fa-duotone.fa-lamp-desk:after,.fad.fa-lamp-desk:after{content:"\e014\e014"}.fa-duotone.fa-lamp-floor:after,.fad.fa-lamp-floor:after{content:"\e015\e015"}.fa-duotone.fa-lamp-street:after,.fad.fa-lamp-street:after{content:"\e1c5\e1c5"}.fa-duotone.fa-land-mine-on:after,.fad.fa-land-mine-on:after{content:"\e51b\e51b"}.fa-duotone.fa-landmark:after,.fad.fa-landmark:after{content:"\f66f\f66f"}.fa-duotone.fa-landmark-alt:after,.fa-duotone.fa-landmark-dome:after,.fad.fa-landmark-alt:after,.fad.fa-landmark-dome:after{content:"\f752\f752"}.fa-duotone.fa-landmark-flag:after,.fad.fa-landmark-flag:after{content:"\e51c\e51c"}.fa-duotone.fa-language:after,.fad.fa-language:after{content:"\f1ab\f1ab"}.fa-duotone.fa-laptop:after,.fad.fa-laptop:after{content:"\f109\f109"}.fa-duotone.fa-laptop-arrow-down:after,.fad.fa-laptop-arrow-down:after{content:"\e1c6\e1c6"}.fa-duotone.fa-laptop-code:after,.fad.fa-laptop-code:after{content:"\f5fc\f5fc"}.fa-duotone.fa-laptop-file:after,.fad.fa-laptop-file:after{content:"\e51d\e51d"}.fa-duotone.fa-laptop-medical:after,.fad.fa-laptop-medical:after{content:"\f812\f812"}.fa-duotone.fa-laptop-mobile:after,.fa-duotone.fa-phone-laptop:after,.fad.fa-laptop-mobile:after,.fad.fa-phone-laptop:after{content:"\f87a\f87a"}.fa-duotone.fa-laptop-slash:after,.fad.fa-laptop-slash:after{content:"\e1c7\e1c7"}.fa-duotone.fa-lari-sign:after,.fad.fa-lari-sign:after{content:"\e1c8\e1c8"}.fa-duotone.fa-lasso:after,.fad.fa-lasso:after{content:"\f8c8\f8c8"}.fa-duotone.fa-lasso-sparkles:after,.fad.fa-lasso-sparkles:after{content:"\e1c9\e1c9"}.fa-duotone.fa-layer-group:after,.fad.fa-layer-group:after{content:"\f5fd\f5fd"}.fa-duotone.fa-layer-group-minus:after,.fa-duotone.fa-layer-minus:after,.fad.fa-layer-group-minus:after,.fad.fa-layer-minus:after{content:"\f5fe\f5fe"}.fa-duotone.fa-layer-group-plus:after,.fa-duotone.fa-layer-plus:after,.fad.fa-layer-group-plus:after,.fad.fa-layer-plus:after{content:"\f5ff\f5ff"}.fa-duotone.fa-leaf:after,.fad.fa-leaf:after{content:"\f06c\f06c"}.fa-duotone.fa-leaf-heart:after,.fad.fa-leaf-heart:after{content:"\f4cb\f4cb"}.fa-duotone.fa-leaf-maple:after,.fad.fa-leaf-maple:after{content:"\f6f6\f6f6"}.fa-duotone.fa-leaf-oak:after,.fad.fa-leaf-oak:after{content:"\f6f7\f6f7"}.fa-duotone.fa-leafy-green:after,.fad.fa-leafy-green:after{content:"\e41d\e41d"}.fa-duotone.fa-arrow-alt-left:after,.fa-duotone.fa-left:after,.fad.fa-arrow-alt-left:after,.fad.fa-left:after{content:"\f355\f355"}.fa-duotone.fa-arrow-alt-from-right:after,.fa-duotone.fa-left-from-line:after,.fad.fa-arrow-alt-from-right:after,.fad.fa-left-from-line:after{content:"\f348\f348"}.fa-duotone.fa-left-long:after,.fa-duotone.fa-long-arrow-alt-left:after,.fad.fa-left-long:after,.fad.fa-long-arrow-alt-left:after{content:"\f30a\f30a"}.fa-duotone.fa-left-long-to-line:after,.fad.fa-left-long-to-line:after{content:"\e41e\e41e"}.fa-duotone.fa-arrows-alt-h:after,.fa-duotone.fa-left-right:after,.fad.fa-arrows-alt-h:after,.fad.fa-left-right:after{content:"\f337\f337"}.fa-duotone.fa-arrow-alt-to-left:after,.fa-duotone.fa-left-to-line:after,.fad.fa-arrow-alt-to-left:after,.fad.fa-left-to-line:after{content:"\f34b\f34b"}.fa-duotone.fa-lemon:after,.fad.fa-lemon:after{content:"\f094\f094"}.fa-duotone.fa-less-than:after,.fad.fa-less-than:after{content:"\3c\3c"}.fa-duotone.fa-less-than-equal:after,.fad.fa-less-than-equal:after{content:"\f537\f537"}.fa-duotone.fa-life-ring:after,.fad.fa-life-ring:after{content:"\f1cd\f1cd"}.fa-duotone.fa-light-ceiling:after,.fad.fa-light-ceiling:after{content:"\e016\e016"}.fa-duotone.fa-light-emergency:after,.fad.fa-light-emergency:after{content:"\e41f\e41f"}.fa-duotone.fa-light-emergency-on:after,.fad.fa-light-emergency-on:after{content:"\e420\e420"}.fa-duotone.fa-light-switch:after,.fad.fa-light-switch:after{content:"\e017\e017"}.fa-duotone.fa-light-switch-off:after,.fad.fa-light-switch-off:after{content:"\e018\e018"}.fa-duotone.fa-light-switch-on:after,.fad.fa-light-switch-on:after{content:"\e019\e019"}.fa-duotone.fa-lightbulb:after,.fad.fa-lightbulb:after{content:"\f0eb\f0eb"}.fa-duotone.fa-lightbulb-cfl:after,.fad.fa-lightbulb-cfl:after{content:"\e5a6\e5a6"}.fa-duotone.fa-lightbulb-cfl-on:after,.fad.fa-lightbulb-cfl-on:after{content:"\e5a7\e5a7"}.fa-duotone.fa-lightbulb-dollar:after,.fad.fa-lightbulb-dollar:after{content:"\f670\f670"}.fa-duotone.fa-lightbulb-exclamation:after,.fad.fa-lightbulb-exclamation:after{content:"\f671\f671"}.fa-duotone.fa-lightbulb-exclamation-on:after,.fad.fa-lightbulb-exclamation-on:after{content:"\e1ca\e1ca"}.fa-duotone.fa-lightbulb-on:after,.fad.fa-lightbulb-on:after{content:"\f672\f672"}.fa-duotone.fa-lightbulb-slash:after,.fad.fa-lightbulb-slash:after{content:"\f673\f673"}.fa-duotone.fa-lights-holiday:after,.fad.fa-lights-holiday:after{content:"\f7b2\f7b2"}.fa-duotone.fa-line-columns:after,.fad.fa-line-columns:after{content:"\f870\f870"}.fa-duotone.fa-line-height:after,.fad.fa-line-height:after{content:"\f871\f871"}.fa-duotone.fa-lines-leaning:after,.fad.fa-lines-leaning:after{content:"\e51e\e51e"}.fa-duotone.fa-chain:after,.fa-duotone.fa-link:after,.fad.fa-chain:after,.fad.fa-link:after{content:"\f0c1\f0c1"}.fa-duotone.fa-chain-horizontal:after,.fa-duotone.fa-link-horizontal:after,.fad.fa-chain-horizontal:after,.fad.fa-link-horizontal:after{content:"\e1cb\e1cb"}.fa-duotone.fa-chain-horizontal-slash:after,.fa-duotone.fa-link-horizontal-slash:after,.fad.fa-chain-horizontal-slash:after,.fad.fa-link-horizontal-slash:after{content:"\e1cc\e1cc"}.fa-duotone.fa-link-simple:after,.fad.fa-link-simple:after{content:"\e1cd\e1cd"}.fa-duotone.fa-link-simple-slash:after,.fad.fa-link-simple-slash:after{content:"\e1ce\e1ce"}.fa-duotone.fa-chain-broken:after,.fa-duotone.fa-chain-slash:after,.fa-duotone.fa-link-slash:after,.fa-duotone.fa-unlink:after,.fad.fa-chain-broken:after,.fad.fa-chain-slash:after,.fad.fa-link-slash:after,.fad.fa-unlink:after{content:"\f127\f127"}.fa-duotone.fa-lips:after,.fad.fa-lips:after{content:"\f600\f600"}.fa-duotone.fa-lira-sign:after,.fad.fa-lira-sign:after{content:"\f195\f195"}.fa-duotone.fa-list-squares:after,.fa-duotone.fa-list:after,.fad.fa-list-squares:after,.fad.fa-list:after{content:"\f03a\f03a"}.fa-duotone.fa-list-check:after,.fa-duotone.fa-tasks:after,.fad.fa-list-check:after,.fad.fa-tasks:after{content:"\f0ae\f0ae"}.fa-duotone.fa-list-dropdown:after,.fad.fa-list-dropdown:after{content:"\e1cf\e1cf"}.fa-duotone.fa-list-music:after,.fad.fa-list-music:after{content:"\f8c9\f8c9"}.fa-duotone.fa-list-1-2:after,.fa-duotone.fa-list-numeric:after,.fa-duotone.fa-list-ol:after,.fad.fa-list-1-2:after,.fad.fa-list-numeric:after,.fad.fa-list-ol:after{content:"\f0cb\f0cb"}.fa-duotone.fa-list-radio:after,.fad.fa-list-radio:after{content:"\e1d0\e1d0"}.fa-duotone.fa-list-timeline:after,.fad.fa-list-timeline:after{content:"\e1d1\e1d1"}.fa-duotone.fa-list-tree:after,.fad.fa-list-tree:after{content:"\e1d2\e1d2"}.fa-duotone.fa-list-dots:after,.fa-duotone.fa-list-ul:after,.fad.fa-list-dots:after,.fad.fa-list-ul:after{content:"\f0ca\f0ca"}.fa-duotone.fa-litecoin-sign:after,.fad.fa-litecoin-sign:after{content:"\e1d3\e1d3"}.fa-duotone.fa-loader:after,.fad.fa-loader:after{content:"\e1d4\e1d4"}.fa-duotone.fa-lobster:after,.fad.fa-lobster:after{content:"\e421\e421"}.fa-duotone.fa-location-arrow:after,.fad.fa-location-arrow:after{content:"\f124\f124"}.fa-duotone.fa-location-check:after,.fa-duotone.fa-map-marker-check:after,.fad.fa-location-check:after,.fad.fa-map-marker-check:after{content:"\f606\f606"}.fa-duotone.fa-location-crosshairs:after,.fa-duotone.fa-location:after,.fad.fa-location-crosshairs:after,.fad.fa-location:after{content:"\f601\f601"}.fa-duotone.fa-location-crosshairs-slash:after,.fa-duotone.fa-location-slash:after,.fad.fa-location-crosshairs-slash:after,.fad.fa-location-slash:after{content:"\f603\f603"}.fa-duotone.fa-location-dot:after,.fa-duotone.fa-map-marker-alt:after,.fad.fa-location-dot:after,.fad.fa-map-marker-alt:after{content:"\f3c5\f3c5"}.fa-duotone.fa-location-dot-slash:after,.fa-duotone.fa-map-marker-alt-slash:after,.fad.fa-location-dot-slash:after,.fad.fa-map-marker-alt-slash:after{content:"\f605\f605"}.fa-duotone.fa-location-exclamation:after,.fa-duotone.fa-map-marker-exclamation:after,.fad.fa-location-exclamation:after,.fad.fa-map-marker-exclamation:after{content:"\f608\f608"}.fa-duotone.fa-location-minus:after,.fa-duotone.fa-map-marker-minus:after,.fad.fa-location-minus:after,.fad.fa-map-marker-minus:after{content:"\f609\f609"}.fa-duotone.fa-location-pen:after,.fa-duotone.fa-map-marker-edit:after,.fad.fa-location-pen:after,.fad.fa-map-marker-edit:after{content:"\f607\f607"}.fa-duotone.fa-location-pin:after,.fa-duotone.fa-map-marker:after,.fad.fa-location-pin:after,.fad.fa-map-marker:after{content:"\f041\f041"}.fa-duotone.fa-location-pin-lock:after,.fad.fa-location-pin-lock:after{content:"\e51f\e51f"}.fa-duotone.fa-location-pin-slash:after,.fa-duotone.fa-map-marker-slash:after,.fad.fa-location-pin-slash:after,.fad.fa-map-marker-slash:after{content:"\f60c\f60c"}.fa-duotone.fa-location-plus:after,.fa-duotone.fa-map-marker-plus:after,.fad.fa-location-plus:after,.fad.fa-map-marker-plus:after{content:"\f60a\f60a"}.fa-duotone.fa-location-question:after,.fa-duotone.fa-map-marker-question:after,.fad.fa-location-question:after,.fad.fa-map-marker-question:after{content:"\f60b\f60b"}.fa-duotone.fa-location-smile:after,.fa-duotone.fa-map-marker-smile:after,.fad.fa-location-smile:after,.fad.fa-map-marker-smile:after{content:"\f60d\f60d"}.fa-duotone.fa-location-xmark:after,.fa-duotone.fa-map-marker-times:after,.fa-duotone.fa-map-marker-xmark:after,.fad.fa-location-xmark:after,.fad.fa-map-marker-times:after,.fad.fa-map-marker-xmark:after{content:"\f60e\f60e"}.fa-duotone.fa-lock:after,.fad.fa-lock:after{content:"\f023\f023"}.fa-duotone.fa-lock-a:after,.fad.fa-lock-a:after{content:"\e422\e422"}.fa-duotone.fa-lock-hashtag:after,.fad.fa-lock-hashtag:after{content:"\e423\e423"}.fa-duotone.fa-lock-alt:after,.fa-duotone.fa-lock-keyhole:after,.fad.fa-lock-alt:after,.fad.fa-lock-keyhole:after{content:"\f30d\f30d"}.fa-duotone.fa-lock-keyhole-open:after,.fa-duotone.fa-lock-open-alt:after,.fad.fa-lock-keyhole-open:after,.fad.fa-lock-open-alt:after{content:"\f3c2\f3c2"}.fa-duotone.fa-lock-open:after,.fad.fa-lock-open:after{content:"\f3c1\f3c1"}.fa-duotone.fa-locust:after,.fad.fa-locust:after{content:"\e520\e520"}.fa-duotone.fa-lollipop:after,.fa-duotone.fa-lollypop:after,.fad.fa-lollipop:after,.fad.fa-lollypop:after{content:"\e424\e424"}.fa-duotone.fa-couch-small:after,.fa-duotone.fa-loveseat:after,.fad.fa-couch-small:after,.fad.fa-loveseat:after{content:"\f4cc\f4cc"}.fa-duotone.fa-luchador-mask:after,.fa-duotone.fa-luchador:after,.fa-duotone.fa-mask-luchador:after,.fad.fa-luchador-mask:after,.fad.fa-luchador:after,.fad.fa-mask-luchador:after{content:"\f455\f455"}.fa-duotone.fa-lungs:after,.fad.fa-lungs:after{content:"\f604\f604"}.fa-duotone.fa-lungs-virus:after,.fad.fa-lungs-virus:after{content:"\e067\e067"}.fa-duotone.fa-m:after,.fad.fa-m:after{content:"\4d\4d"}.fa-duotone.fa-mace:after,.fad.fa-mace:after{content:"\f6f8\f6f8"}.fa-duotone.fa-magnet:after,.fad.fa-magnet:after{content:"\f076\f076"}.fa-duotone.fa-magnifying-glass:after,.fa-duotone.fa-search:after,.fad.fa-magnifying-glass:after,.fad.fa-search:after{content:"\f002\f002"}.fa-duotone.fa-magnifying-glass-arrow-right:after,.fad.fa-magnifying-glass-arrow-right:after{content:"\e521\e521"}.fa-duotone.fa-magnifying-glass-chart:after,.fad.fa-magnifying-glass-chart:after{content:"\e522\e522"}.fa-duotone.fa-magnifying-glass-dollar:after,.fa-duotone.fa-search-dollar:after,.fad.fa-magnifying-glass-dollar:after,.fad.fa-search-dollar:after{content:"\f688\f688"}.fa-duotone.fa-magnifying-glass-location:after,.fa-duotone.fa-search-location:after,.fad.fa-magnifying-glass-location:after,.fad.fa-search-location:after{content:"\f689\f689"}.fa-duotone.fa-magnifying-glass-minus:after,.fa-duotone.fa-search-minus:after,.fad.fa-magnifying-glass-minus:after,.fad.fa-search-minus:after{content:"\f010\f010"}.fa-duotone.fa-magnifying-glass-plus:after,.fa-duotone.fa-search-plus:after,.fad.fa-magnifying-glass-plus:after,.fad.fa-search-plus:after{content:"\f00e\f00e"}.fa-duotone.fa-mailbox:after,.fad.fa-mailbox:after{content:"\f813\f813"}.fa-duotone.fa-manat-sign:after,.fad.fa-manat-sign:after{content:"\e1d5\e1d5"}.fa-duotone.fa-mandolin:after,.fad.fa-mandolin:after{content:"\f6f9\f6f9"}.fa-duotone.fa-mango:after,.fad.fa-mango:after{content:"\e30f\e30f"}.fa-duotone.fa-manhole:after,.fad.fa-manhole:after{content:"\e1d6\e1d6"}.fa-duotone.fa-map:after,.fad.fa-map:after{content:"\f279\f279"}.fa-duotone.fa-map-location:after,.fa-duotone.fa-map-marked:after,.fad.fa-map-location:after,.fad.fa-map-marked:after{content:"\f59f\f59f"}.fa-duotone.fa-map-location-dot:after,.fa-duotone.fa-map-marked-alt:after,.fad.fa-map-location-dot:after,.fad.fa-map-marked-alt:after{content:"\f5a0\f5a0"}.fa-duotone.fa-map-pin:after,.fad.fa-map-pin:after{content:"\f276\f276"}.fa-duotone.fa-marker:after,.fad.fa-marker:after{content:"\f5a1\f5a1"}.fa-duotone.fa-mars:after,.fad.fa-mars:after{content:"\f222\f222"}.fa-duotone.fa-mars-and-venus:after,.fad.fa-mars-and-venus:after{content:"\f224\f224"}.fa-duotone.fa-mars-and-venus-burst:after,.fad.fa-mars-and-venus-burst:after{content:"\e523\e523"}.fa-duotone.fa-mars-double:after,.fad.fa-mars-double:after{content:"\f227\f227"}.fa-duotone.fa-mars-stroke:after,.fad.fa-mars-stroke:after{content:"\f229\f229"}.fa-duotone.fa-mars-stroke-h:after,.fa-duotone.fa-mars-stroke-right:after,.fad.fa-mars-stroke-h:after,.fad.fa-mars-stroke-right:after{content:"\f22b\f22b"}.fa-duotone.fa-mars-stroke-up:after,.fa-duotone.fa-mars-stroke-v:after,.fad.fa-mars-stroke-up:after,.fad.fa-mars-stroke-v:after{content:"\f22a\f22a"}.fa-duotone.fa-glass-martini-alt:after,.fa-duotone.fa-martini-glass:after,.fad.fa-glass-martini-alt:after,.fad.fa-martini-glass:after{content:"\f57b\f57b"}.fa-duotone.fa-cocktail:after,.fa-duotone.fa-martini-glass-citrus:after,.fad.fa-cocktail:after,.fad.fa-martini-glass-citrus:after{content:"\f561\f561"}.fa-duotone.fa-glass-martini:after,.fa-duotone.fa-martini-glass-empty:after,.fad.fa-glass-martini:after,.fad.fa-martini-glass-empty:after{content:"\f000\f000"}.fa-duotone.fa-mask:after,.fad.fa-mask:after{content:"\f6fa\f6fa"}.fa-duotone.fa-mask-face:after,.fad.fa-mask-face:after{content:"\e1d7\e1d7"}.fa-duotone.fa-mask-snorkel:after,.fad.fa-mask-snorkel:after{content:"\e3b7\e3b7"}.fa-duotone.fa-mask-ventilator:after,.fad.fa-mask-ventilator:after{content:"\e524\e524"}.fa-duotone.fa-masks-theater:after,.fa-duotone.fa-theater-masks:after,.fad.fa-masks-theater:after,.fad.fa-theater-masks:after{content:"\f630\f630"}.fa-duotone.fa-mattress-pillow:after,.fad.fa-mattress-pillow:after{content:"\e525\e525"}.fa-duotone.fa-expand-arrows-alt:after,.fa-duotone.fa-maximize:after,.fad.fa-expand-arrows-alt:after,.fad.fa-maximize:after{content:"\f31e\f31e"}.fa-duotone.fa-meat:after,.fad.fa-meat:after{content:"\f814\f814"}.fa-duotone.fa-medal:after,.fad.fa-medal:after{content:"\f5a2\f5a2"}.fa-duotone.fa-megaphone:after,.fad.fa-megaphone:after{content:"\f675\f675"}.fa-duotone.fa-melon:after,.fad.fa-melon:after{content:"\e310\e310"}.fa-duotone.fa-melon-slice:after,.fad.fa-melon-slice:after{content:"\e311\e311"}.fa-duotone.fa-memo:after,.fad.fa-memo:after{content:"\e1d8\e1d8"}.fa-duotone.fa-memo-circle-check:after,.fad.fa-memo-circle-check:after{content:"\e1d9\e1d9"}.fa-duotone.fa-memo-circle-info:after,.fad.fa-memo-circle-info:after{content:"\e49a\e49a"}.fa-duotone.fa-memo-pad:after,.fad.fa-memo-pad:after{content:"\e1da\e1da"}.fa-duotone.fa-memory:after,.fad.fa-memory:after{content:"\f538\f538"}.fa-duotone.fa-menorah:after,.fad.fa-menorah:after{content:"\f676\f676"}.fa-duotone.fa-mercury:after,.fad.fa-mercury:after{content:"\f223\f223"}.fa-duotone.fa-merge:after,.fad.fa-merge:after{content:"\e526\e526"}.fa-duotone.fa-comment-alt:after,.fa-duotone.fa-message:after,.fad.fa-comment-alt:after,.fad.fa-message:after{content:"\f27a\f27a"}.fa-duotone.fa-comment-alt-arrow-down:after,.fa-duotone.fa-message-arrow-down:after,.fad.fa-comment-alt-arrow-down:after,.fad.fa-message-arrow-down:after{content:"\e1db\e1db"}.fa-duotone.fa-comment-alt-arrow-up:after,.fa-duotone.fa-message-arrow-up:after,.fad.fa-comment-alt-arrow-up:after,.fad.fa-message-arrow-up:after{content:"\e1dc\e1dc"}.fa-duotone.fa-message-arrow-up-right:after,.fad.fa-message-arrow-up-right:after{content:"\e1dd\e1dd"}.fa-duotone.fa-message-bot:after,.fad.fa-message-bot:after{content:"\e3b8\e3b8"}.fa-duotone.fa-comment-alt-captions:after,.fa-duotone.fa-message-captions:after,.fad.fa-comment-alt-captions:after,.fad.fa-message-captions:after{content:"\e1de\e1de"}.fa-duotone.fa-comment-alt-check:after,.fa-duotone.fa-message-check:after,.fad.fa-comment-alt-check:after,.fad.fa-message-check:after{content:"\f4a2\f4a2"}.fa-duotone.fa-message-code:after,.fad.fa-message-code:after{content:"\e1df\e1df"}.fa-duotone.fa-comment-alt-dollar:after,.fa-duotone.fa-message-dollar:after,.fad.fa-comment-alt-dollar:after,.fad.fa-message-dollar:after{content:"\f650\f650"}.fa-duotone.fa-comment-alt-dots:after,.fa-duotone.fa-message-dots:after,.fa-duotone.fa-messaging:after,.fad.fa-comment-alt-dots:after,.fad.fa-message-dots:after,.fad.fa-messaging:after{content:"\f4a3\f4a3"}.fa-duotone.fa-comment-alt-exclamation:after,.fa-duotone.fa-message-exclamation:after,.fad.fa-comment-alt-exclamation:after,.fad.fa-message-exclamation:after{content:"\f4a5\f4a5"}.fa-duotone.fa-comment-alt-image:after,.fa-duotone.fa-message-image:after,.fad.fa-comment-alt-image:after,.fad.fa-message-image:after{content:"\e1e0\e1e0"}.fa-duotone.fa-comment-alt-lines:after,.fa-duotone.fa-message-lines:after,.fad.fa-comment-alt-lines:after,.fad.fa-message-lines:after{content:"\f4a6\f4a6"}.fa-duotone.fa-comment-alt-medical:after,.fa-duotone.fa-message-medical:after,.fad.fa-comment-alt-medical:after,.fad.fa-message-medical:after{content:"\f7f4\f7f4"}.fa-duotone.fa-comment-middle-alt:after,.fa-duotone.fa-message-middle:after,.fad.fa-comment-middle-alt:after,.fad.fa-message-middle:after{content:"\e1e1\e1e1"}.fa-duotone.fa-comment-middle-top-alt:after,.fa-duotone.fa-message-middle-top:after,.fad.fa-comment-middle-top-alt:after,.fad.fa-message-middle-top:after{content:"\e1e2\e1e2"}.fa-duotone.fa-comment-alt-minus:after,.fa-duotone.fa-message-minus:after,.fad.fa-comment-alt-minus:after,.fad.fa-message-minus:after{content:"\f4a7\f4a7"}.fa-duotone.fa-comment-alt-music:after,.fa-duotone.fa-message-music:after,.fad.fa-comment-alt-music:after,.fad.fa-message-music:after{content:"\f8af\f8af"}.fa-duotone.fa-comment-alt-edit:after,.fa-duotone.fa-message-edit:after,.fa-duotone.fa-message-pen:after,.fad.fa-comment-alt-edit:after,.fad.fa-message-edit:after,.fad.fa-message-pen:after{content:"\f4a4\f4a4"}.fa-duotone.fa-comment-alt-plus:after,.fa-duotone.fa-message-plus:after,.fad.fa-comment-alt-plus:after,.fad.fa-message-plus:after{content:"\f4a8\f4a8"}.fa-duotone.fa-message-question:after,.fad.fa-message-question:after{content:"\e1e3\e1e3"}.fa-duotone.fa-comment-alt-quote:after,.fa-duotone.fa-message-quote:after,.fad.fa-comment-alt-quote:after,.fad.fa-message-quote:after{content:"\e1e4\e1e4"}.fa-duotone.fa-comment-alt-slash:after,.fa-duotone.fa-message-slash:after,.fad.fa-comment-alt-slash:after,.fad.fa-message-slash:after{content:"\f4a9\f4a9"}.fa-duotone.fa-comment-alt-smile:after,.fa-duotone.fa-message-smile:after,.fad.fa-comment-alt-smile:after,.fad.fa-message-smile:after{content:"\f4aa\f4aa"}.fa-duotone.fa-message-sms:after,.fad.fa-message-sms:after{content:"\e1e5\e1e5"}.fa-duotone.fa-comment-alt-text:after,.fa-duotone.fa-message-text:after,.fad.fa-comment-alt-text:after,.fad.fa-message-text:after{content:"\e1e6\e1e6"}.fa-duotone.fa-comment-alt-times:after,.fa-duotone.fa-message-times:after,.fa-duotone.fa-message-xmark:after,.fad.fa-comment-alt-times:after,.fad.fa-message-times:after,.fad.fa-message-xmark:after{content:"\f4ab\f4ab"}.fa-duotone.fa-comments-alt:after,.fa-duotone.fa-messages:after,.fad.fa-comments-alt:after,.fad.fa-messages:after{content:"\f4b6\f4b6"}.fa-duotone.fa-comments-alt-dollar:after,.fa-duotone.fa-messages-dollar:after,.fad.fa-comments-alt-dollar:after,.fad.fa-messages-dollar:after{content:"\f652\f652"}.fa-duotone.fa-messages-question:after,.fad.fa-messages-question:after{content:"\e1e7\e1e7"}.fa-duotone.fa-meteor:after,.fad.fa-meteor:after{content:"\f753\f753"}.fa-duotone.fa-meter:after,.fad.fa-meter:after{content:"\e1e8\e1e8"}.fa-duotone.fa-meter-bolt:after,.fad.fa-meter-bolt:after{content:"\e1e9\e1e9"}.fa-duotone.fa-meter-droplet:after,.fad.fa-meter-droplet:after{content:"\e1ea\e1ea"}.fa-duotone.fa-meter-fire:after,.fad.fa-meter-fire:after{content:"\e1eb\e1eb"}.fa-duotone.fa-microchip:after,.fad.fa-microchip:after{content:"\f2db\f2db"}.fa-duotone.fa-microchip-ai:after,.fad.fa-microchip-ai:after{content:"\e1ec\e1ec"}.fa-duotone.fa-microphone:after,.fad.fa-microphone:after{content:"\f130\f130"}.fa-duotone.fa-microphone-alt:after,.fa-duotone.fa-microphone-lines:after,.fad.fa-microphone-alt:after,.fad.fa-microphone-lines:after{content:"\f3c9\f3c9"}.fa-duotone.fa-microphone-alt-slash:after,.fa-duotone.fa-microphone-lines-slash:after,.fad.fa-microphone-alt-slash:after,.fad.fa-microphone-lines-slash:after{content:"\f539\f539"}.fa-duotone.fa-microphone-slash:after,.fad.fa-microphone-slash:after{content:"\f131\f131"}.fa-duotone.fa-microphone-stand:after,.fad.fa-microphone-stand:after{content:"\f8cb\f8cb"}.fa-duotone.fa-microscope:after,.fad.fa-microscope:after{content:"\f610\f610"}.fa-duotone.fa-microwave:after,.fad.fa-microwave:after{content:"\e01b\e01b"}.fa-duotone.fa-mill-sign:after,.fad.fa-mill-sign:after{content:"\e1ed\e1ed"}.fa-duotone.fa-compress-arrows-alt:after,.fa-duotone.fa-minimize:after,.fad.fa-compress-arrows-alt:after,.fad.fa-minimize:after{content:"\f78c\f78c"}.fa-duotone.fa-minus:after,.fa-duotone.fa-subtract:after,.fad.fa-minus:after,.fad.fa-subtract:after{content:"\f068\f068"}.fa-duotone.fa-mistletoe:after,.fad.fa-mistletoe:after{content:"\f7b4\f7b4"}.fa-duotone.fa-mitten:after,.fad.fa-mitten:after{content:"\f7b5\f7b5"}.fa-duotone.fa-mobile-android:after,.fa-duotone.fa-mobile-phone:after,.fa-duotone.fa-mobile:after,.fad.fa-mobile-android:after,.fad.fa-mobile-phone:after,.fad.fa-mobile:after{content:"\f3ce\f3ce"}.fa-duotone.fa-mobile-button:after,.fad.fa-mobile-button:after{content:"\f10b\f10b"}.fa-duotone.fa-mobile-iphone:after,.fa-duotone.fa-mobile-notch:after,.fad.fa-mobile-iphone:after,.fad.fa-mobile-notch:after{content:"\e1ee\e1ee"}.fa-duotone.fa-mobile-retro:after,.fad.fa-mobile-retro:after{content:"\e527\e527"}.fa-duotone.fa-mobile-android-alt:after,.fa-duotone.fa-mobile-screen:after,.fad.fa-mobile-android-alt:after,.fad.fa-mobile-screen:after{content:"\f3cf\f3cf"}.fa-duotone.fa-mobile-alt:after,.fa-duotone.fa-mobile-screen-button:after,.fad.fa-mobile-alt:after,.fad.fa-mobile-screen-button:after{content:"\f3cd\f3cd"}.fa-duotone.fa-mobile-signal:after,.fad.fa-mobile-signal:after{content:"\e1ef\e1ef"}.fa-duotone.fa-mobile-signal-out:after,.fad.fa-mobile-signal-out:after{content:"\e1f0\e1f0"}.fa-duotone.fa-money-bill:after,.fad.fa-money-bill:after{content:"\f0d6\f0d6"}.fa-duotone.fa-money-bill-1:after,.fa-duotone.fa-money-bill-alt:after,.fad.fa-money-bill-1:after,.fad.fa-money-bill-alt:after{content:"\f3d1\f3d1"}.fa-duotone.fa-money-bill-1-wave:after,.fa-duotone.fa-money-bill-wave-alt:after,.fad.fa-money-bill-1-wave:after,.fad.fa-money-bill-wave-alt:after{content:"\f53b\f53b"}.fa-duotone.fa-money-bill-simple:after,.fad.fa-money-bill-simple:after{content:"\e1f1\e1f1"}.fa-duotone.fa-money-bill-simple-wave:after,.fad.fa-money-bill-simple-wave:after{content:"\e1f2\e1f2"}.fa-duotone.fa-money-bill-transfer:after,.fad.fa-money-bill-transfer:after{content:"\e528\e528"}.fa-duotone.fa-money-bill-trend-up:after,.fad.fa-money-bill-trend-up:after{content:"\e529\e529"}.fa-duotone.fa-money-bill-wave:after,.fad.fa-money-bill-wave:after{content:"\f53a\f53a"}.fa-duotone.fa-money-bill-wheat:after,.fad.fa-money-bill-wheat:after{content:"\e52a\e52a"}.fa-duotone.fa-money-bills:after,.fad.fa-money-bills:after{content:"\e1f3\e1f3"}.fa-duotone.fa-money-bills-alt:after,.fa-duotone.fa-money-bills-simple:after,.fad.fa-money-bills-alt:after,.fad.fa-money-bills-simple:after{content:"\e1f4\e1f4"}.fa-duotone.fa-money-check:after,.fad.fa-money-check:after{content:"\f53c\f53c"}.fa-duotone.fa-money-check-alt:after,.fa-duotone.fa-money-check-dollar:after,.fad.fa-money-check-alt:after,.fad.fa-money-check-dollar:after{content:"\f53d\f53d"}.fa-duotone.fa-money-check-dollar-pen:after,.fa-duotone.fa-money-check-edit-alt:after,.fad.fa-money-check-dollar-pen:after,.fad.fa-money-check-edit-alt:after{content:"\f873\f873"}.fa-duotone.fa-money-check-edit:after,.fa-duotone.fa-money-check-pen:after,.fad.fa-money-check-edit:after,.fad.fa-money-check-pen:after{content:"\f872\f872"}.fa-duotone.fa-money-from-bracket:after,.fad.fa-money-from-bracket:after{content:"\e312\e312"}.fa-duotone.fa-money-simple-from-bracket:after,.fad.fa-money-simple-from-bracket:after{content:"\e313\e313"}.fa-duotone.fa-monitor-heart-rate:after,.fa-duotone.fa-monitor-waveform:after,.fad.fa-monitor-heart-rate:after,.fad.fa-monitor-waveform:after{content:"\f611\f611"}.fa-duotone.fa-monkey:after,.fad.fa-monkey:after{content:"\f6fb\f6fb"}.fa-duotone.fa-monument:after,.fad.fa-monument:after{content:"\f5a6\f5a6"}.fa-duotone.fa-moon:after,.fad.fa-moon:after{content:"\f186\f186"}.fa-duotone.fa-moon-cloud:after,.fad.fa-moon-cloud:after{content:"\f754\f754"}.fa-duotone.fa-eclipse-alt:after,.fa-duotone.fa-moon-over-sun:after,.fad.fa-eclipse-alt:after,.fad.fa-moon-over-sun:after{content:"\f74a\f74a"}.fa-duotone.fa-moon-stars:after,.fad.fa-moon-stars:after{content:"\f755\f755"}.fa-duotone.fa-moped:after,.fad.fa-moped:after{content:"\e3b9\e3b9"}.fa-duotone.fa-mortar-pestle:after,.fad.fa-mortar-pestle:after{content:"\f5a7\f5a7"}.fa-duotone.fa-mosque:after,.fad.fa-mosque:after{content:"\f678\f678"}.fa-duotone.fa-mosquito:after,.fad.fa-mosquito:after{content:"\e52b\e52b"}.fa-duotone.fa-mosquito-net:after,.fad.fa-mosquito-net:after{content:"\e52c\e52c"}.fa-duotone.fa-motorcycle:after,.fad.fa-motorcycle:after{content:"\f21c\f21c"}.fa-duotone.fa-mound:after,.fad.fa-mound:after{content:"\e52d\e52d"}.fa-duotone.fa-mountain:after,.fad.fa-mountain:after{content:"\f6fc\f6fc"}.fa-duotone.fa-mountain-city:after,.fad.fa-mountain-city:after{content:"\e52e\e52e"}.fa-duotone.fa-mountain-sun:after,.fad.fa-mountain-sun:after{content:"\e52f\e52f"}.fa-duotone.fa-mountains:after,.fad.fa-mountains:after{content:"\f6fd\f6fd"}.fa-duotone.fa-mouse-field:after,.fad.fa-mouse-field:after{content:"\e5a8\e5a8"}.fa-duotone.fa-mp3-player:after,.fad.fa-mp3-player:after{content:"\f8ce\f8ce"}.fa-duotone.fa-mug:after,.fad.fa-mug:after{content:"\f874\f874"}.fa-duotone.fa-mug-hot:after,.fad.fa-mug-hot:after{content:"\f7b6\f7b6"}.fa-duotone.fa-mug-marshmallows:after,.fad.fa-mug-marshmallows:after{content:"\f7b7\f7b7"}.fa-duotone.fa-coffee:after,.fa-duotone.fa-mug-saucer:after,.fad.fa-coffee:after,.fad.fa-mug-saucer:after{content:"\f0f4\f0f4"}.fa-duotone.fa-mug-tea:after,.fad.fa-mug-tea:after{content:"\f875\f875"}.fa-duotone.fa-mug-tea-saucer:after,.fad.fa-mug-tea-saucer:after{content:"\e1f5\e1f5"}.fa-duotone.fa-mushroom:after,.fad.fa-mushroom:after{content:"\e425\e425"}.fa-duotone.fa-music:after,.fad.fa-music:after{content:"\f001\f001"}.fa-duotone.fa-music-alt:after,.fa-duotone.fa-music-note:after,.fad.fa-music-alt:after,.fad.fa-music-note:after{content:"\f8cf\f8cf"}.fa-duotone.fa-music-alt-slash:after,.fa-duotone.fa-music-note-slash:after,.fad.fa-music-alt-slash:after,.fad.fa-music-note-slash:after{content:"\f8d0\f8d0"}.fa-duotone.fa-music-slash:after,.fad.fa-music-slash:after{content:"\f8d1\f8d1"}.fa-duotone.fa-n:after,.fad.fa-n:after{content:"\4e\4e"}.fa-duotone.fa-naira-sign:after,.fad.fa-naira-sign:after{content:"\e1f6\e1f6"}.fa-duotone.fa-narwhal:after,.fad.fa-narwhal:after{content:"\f6fe\f6fe"}.fa-duotone.fa-nesting-dolls:after,.fad.fa-nesting-dolls:after{content:"\e3ba\e3ba"}.fa-duotone.fa-network-wired:after,.fad.fa-network-wired:after{content:"\f6ff\f6ff"}.fa-duotone.fa-neuter:after,.fad.fa-neuter:after{content:"\f22c\f22c"}.fa-duotone.fa-newspaper:after,.fad.fa-newspaper:after{content:"\f1ea\f1ea"}.fa-duotone.fa-nfc:after,.fad.fa-nfc:after{content:"\e1f7\e1f7"}.fa-duotone.fa-nfc-lock:after,.fad.fa-nfc-lock:after{content:"\e1f8\e1f8"}.fa-duotone.fa-nfc-magnifying-glass:after,.fad.fa-nfc-magnifying-glass:after{content:"\e1f9\e1f9"}.fa-duotone.fa-nfc-pen:after,.fad.fa-nfc-pen:after{content:"\e1fa\e1fa"}.fa-duotone.fa-nfc-signal:after,.fad.fa-nfc-signal:after{content:"\e1fb\e1fb"}.fa-duotone.fa-nfc-slash:after,.fad.fa-nfc-slash:after{content:"\e1fc\e1fc"}.fa-duotone.fa-nfc-trash:after,.fad.fa-nfc-trash:after{content:"\e1fd\e1fd"}.fa-duotone.fa-not-equal:after,.fad.fa-not-equal:after{content:"\f53e\f53e"}.fa-duotone.fa-notdef:after,.fad.fa-notdef:after{content:"\e1fe\e1fe"}.fa-duotone.fa-note:after,.fad.fa-note:after{content:"\e1ff\e1ff"}.fa-duotone.fa-note-medical:after,.fad.fa-note-medical:after{content:"\e200\e200"}.fa-duotone.fa-note-sticky:after,.fa-duotone.fa-sticky-note:after,.fad.fa-note-sticky:after,.fad.fa-sticky-note:after{content:"\f249\f249"}.fa-duotone.fa-notebook:after,.fad.fa-notebook:after{content:"\e201\e201"}.fa-duotone.fa-notes:after,.fad.fa-notes:after{content:"\e202\e202"}.fa-duotone.fa-notes-medical:after,.fad.fa-notes-medical:after{content:"\f481\f481"}.fa-duotone.fa-o:after,.fad.fa-o:after{content:"\4f\4f"}.fa-duotone.fa-object-exclude:after,.fad.fa-object-exclude:after{content:"\e49c\e49c"}.fa-duotone.fa-object-group:after,.fad.fa-object-group:after{content:"\f247\f247"}.fa-duotone.fa-object-intersect:after,.fad.fa-object-intersect:after{content:"\e49d\e49d"}.fa-duotone.fa-object-subtract:after,.fad.fa-object-subtract:after{content:"\e49e\e49e"}.fa-duotone.fa-object-ungroup:after,.fad.fa-object-ungroup:after{content:"\f248\f248"}.fa-duotone.fa-object-union:after,.fad.fa-object-union:after{content:"\e49f\e49f"}.fa-duotone.fa-objects-align-bottom:after,.fad.fa-objects-align-bottom:after{content:"\e3bb\e3bb"}.fa-duotone.fa-objects-align-center-horizontal:after,.fad.fa-objects-align-center-horizontal:after{content:"\e3bc\e3bc"}.fa-duotone.fa-objects-align-center-vertical:after,.fad.fa-objects-align-center-vertical:after{content:"\e3bd\e3bd"}.fa-duotone.fa-objects-align-left:after,.fad.fa-objects-align-left:after{content:"\e3be\e3be"}.fa-duotone.fa-objects-align-right:after,.fad.fa-objects-align-right:after{content:"\e3bf\e3bf"}.fa-duotone.fa-objects-align-top:after,.fad.fa-objects-align-top:after{content:"\e3c0\e3c0"}.fa-duotone.fa-objects-column:after,.fad.fa-objects-column:after{content:"\e3c1\e3c1"}.fa-duotone.fa-octagon:after,.fad.fa-octagon:after{content:"\f306\f306"}.fa-duotone.fa-octagon-check:after,.fad.fa-octagon-check:after{content:"\e426\e426"}.fa-duotone.fa-octagon-divide:after,.fad.fa-octagon-divide:after{content:"\e203\e203"}.fa-duotone.fa-octagon-exclamation:after,.fad.fa-octagon-exclamation:after{content:"\e204\e204"}.fa-duotone.fa-minus-octagon:after,.fa-duotone.fa-octagon-minus:after,.fad.fa-minus-octagon:after,.fad.fa-octagon-minus:after{content:"\f308\f308"}.fa-duotone.fa-octagon-plus:after,.fa-duotone.fa-plus-octagon:after,.fad.fa-octagon-plus:after,.fad.fa-plus-octagon:after{content:"\f301\f301"}.fa-duotone.fa-octagon-xmark:after,.fa-duotone.fa-times-octagon:after,.fa-duotone.fa-xmark-octagon:after,.fad.fa-octagon-xmark:after,.fad.fa-times-octagon:after,.fad.fa-xmark-octagon:after{content:"\f2f0\f2f0"}.fa-duotone.fa-oil-can:after,.fad.fa-oil-can:after{content:"\f613\f613"}.fa-duotone.fa-oil-can-drip:after,.fad.fa-oil-can-drip:after{content:"\e205\e205"}.fa-duotone.fa-oil-temp:after,.fa-duotone.fa-oil-temperature:after,.fad.fa-oil-temp:after,.fad.fa-oil-temperature:after{content:"\f614\f614"}.fa-duotone.fa-oil-well:after,.fad.fa-oil-well:after{content:"\e532\e532"}.fa-duotone.fa-olive:after,.fad.fa-olive:after{content:"\e316\e316"}.fa-duotone.fa-olive-branch:after,.fad.fa-olive-branch:after{content:"\e317\e317"}.fa-duotone.fa-om:after,.fad.fa-om:after{content:"\f679\f679"}.fa-duotone.fa-omega:after,.fad.fa-omega:after{content:"\f67a\f67a"}.fa-duotone.fa-onion:after,.fad.fa-onion:after{content:"\e427\e427"}.fa-duotone.fa-option:after,.fad.fa-option:after{content:"\e318\e318"}.fa-duotone.fa-ornament:after,.fad.fa-ornament:after{content:"\f7b8\f7b8"}.fa-duotone.fa-otter:after,.fad.fa-otter:after{content:"\f700\f700"}.fa-duotone.fa-dedent:after,.fa-duotone.fa-outdent:after,.fad.fa-dedent:after,.fad.fa-outdent:after{content:"\f03b\f03b"}.fa-duotone.fa-outlet:after,.fad.fa-outlet:after{content:"\e01c\e01c"}.fa-duotone.fa-oven:after,.fad.fa-oven:after{content:"\e01d\e01d"}.fa-duotone.fa-overline:after,.fad.fa-overline:after{content:"\f876\f876"}.fa-duotone.fa-p:after,.fad.fa-p:after{content:"\50\50"}.fa-duotone.fa-page:after,.fad.fa-page:after{content:"\e428\e428"}.fa-duotone.fa-file-caret-down:after,.fa-duotone.fa-page-caret-down:after,.fad.fa-file-caret-down:after,.fad.fa-page-caret-down:after{content:"\e429\e429"}.fa-duotone.fa-file-caret-up:after,.fa-duotone.fa-page-caret-up:after,.fad.fa-file-caret-up:after,.fad.fa-page-caret-up:after{content:"\e42a\e42a"}.fa-duotone.fa-pager:after,.fad.fa-pager:after{content:"\f815\f815"}.fa-duotone.fa-paint-roller:after,.fad.fa-paint-roller:after{content:"\f5aa\f5aa"}.fa-duotone.fa-paint-brush:after,.fa-duotone.fa-paintbrush:after,.fad.fa-paint-brush:after,.fad.fa-paintbrush:after{content:"\f1fc\f1fc"}.fa-duotone.fa-paint-brush-alt:after,.fa-duotone.fa-paint-brush-fine:after,.fa-duotone.fa-paintbrush-alt:after,.fa-duotone.fa-paintbrush-fine:after,.fad.fa-paint-brush-alt:after,.fad.fa-paint-brush-fine:after,.fad.fa-paintbrush-alt:after,.fad.fa-paintbrush-fine:after{content:"\f5a9\f5a9"}.fa-duotone.fa-paintbrush-pencil:after,.fad.fa-paintbrush-pencil:after{content:"\e206\e206"}.fa-duotone.fa-palette:after,.fad.fa-palette:after{content:"\f53f\f53f"}.fa-duotone.fa-pallet:after,.fad.fa-pallet:after{content:"\f482\f482"}.fa-duotone.fa-pallet-box:after,.fad.fa-pallet-box:after{content:"\e208\e208"}.fa-duotone.fa-palette-boxes:after,.fa-duotone.fa-pallet-alt:after,.fa-duotone.fa-pallet-boxes:after,.fad.fa-palette-boxes:after,.fad.fa-pallet-alt:after,.fad.fa-pallet-boxes:after{content:"\f483\f483"}.fa-duotone.fa-pan-food:after,.fad.fa-pan-food:after{content:"\e42b\e42b"}.fa-duotone.fa-pan-frying:after,.fad.fa-pan-frying:after{content:"\e42c\e42c"}.fa-duotone.fa-pancakes:after,.fad.fa-pancakes:after{content:"\e42d\e42d"}.fa-duotone.fa-panel-ews:after,.fad.fa-panel-ews:after{content:"\e42e\e42e"}.fa-duotone.fa-panel-fire:after,.fad.fa-panel-fire:after{content:"\e42f\e42f"}.fa-duotone.fa-panorama:after,.fad.fa-panorama:after{content:"\e209\e209"}.fa-duotone.fa-paper-plane:after,.fad.fa-paper-plane:after{content:"\f1d8\f1d8"}.fa-duotone.fa-paper-plane-alt:after,.fa-duotone.fa-paper-plane-top:after,.fa-duotone.fa-send:after,.fad.fa-paper-plane-alt:after,.fad.fa-paper-plane-top:after,.fad.fa-send:after{content:"\e20a\e20a"}.fa-duotone.fa-paperclip:after,.fad.fa-paperclip:after{content:"\f0c6\f0c6"}.fa-duotone.fa-paperclip-vertical:after,.fad.fa-paperclip-vertical:after{content:"\e3c2\e3c2"}.fa-duotone.fa-parachute-box:after,.fad.fa-parachute-box:after{content:"\f4cd\f4cd"}.fa-duotone.fa-paragraph:after,.fad.fa-paragraph:after{content:"\f1dd\f1dd"}.fa-duotone.fa-paragraph-left:after,.fa-duotone.fa-paragraph-rtl:after,.fad.fa-paragraph-left:after,.fad.fa-paragraph-rtl:after{content:"\f878\f878"}.fa-duotone.fa-party-bell:after,.fad.fa-party-bell:after{content:"\e31a\e31a"}.fa-duotone.fa-party-horn:after,.fad.fa-party-horn:after{content:"\e31b\e31b"}.fa-duotone.fa-passport:after,.fad.fa-passport:after{content:"\f5ab\f5ab"}.fa-duotone.fa-file-clipboard:after,.fa-duotone.fa-paste:after,.fad.fa-file-clipboard:after,.fad.fa-paste:after{content:"\f0ea\f0ea"}.fa-duotone.fa-pause:after,.fad.fa-pause:after{content:"\f04c\f04c"}.fa-duotone.fa-paw:after,.fad.fa-paw:after{content:"\f1b0\f1b0"}.fa-duotone.fa-paw-claws:after,.fad.fa-paw-claws:after{content:"\f702\f702"}.fa-duotone.fa-paw-alt:after,.fa-duotone.fa-paw-simple:after,.fad.fa-paw-alt:after,.fad.fa-paw-simple:after{content:"\f701\f701"}.fa-duotone.fa-peace:after,.fad.fa-peace:after{content:"\f67c\f67c"}.fa-duotone.fa-peach:after,.fad.fa-peach:after{content:"\e20b\e20b"}.fa-duotone.fa-peanut:after,.fad.fa-peanut:after{content:"\e430\e430"}.fa-duotone.fa-peanuts:after,.fad.fa-peanuts:after{content:"\e431\e431"}.fa-duotone.fa-peapod:after,.fad.fa-peapod:after{content:"\e31c\e31c"}.fa-duotone.fa-pear:after,.fad.fa-pear:after{content:"\e20c\e20c"}.fa-duotone.fa-pedestal:after,.fad.fa-pedestal:after{content:"\e20d\e20d"}.fa-duotone.fa-pegasus:after,.fad.fa-pegasus:after{content:"\f703\f703"}.fa-duotone.fa-pen:after,.fad.fa-pen:after{content:"\f304\f304"}.fa-duotone.fa-pen-circle:after,.fad.fa-pen-circle:after{content:"\e20e\e20e"}.fa-duotone.fa-pen-alt:after,.fa-duotone.fa-pen-clip:after,.fad.fa-pen-alt:after,.fad.fa-pen-clip:after{content:"\f305\f305"}.fa-duotone.fa-pen-alt-slash:after,.fa-duotone.fa-pen-clip-slash:after,.fad.fa-pen-alt-slash:after,.fad.fa-pen-clip-slash:after{content:"\e20f\e20f"}.fa-duotone.fa-pen-fancy:after,.fad.fa-pen-fancy:after{content:"\f5ac\f5ac"}.fa-duotone.fa-pen-fancy-slash:after,.fad.fa-pen-fancy-slash:after{content:"\e210\e210"}.fa-duotone.fa-pen-field:after,.fad.fa-pen-field:after{content:"\e211\e211"}.fa-duotone.fa-pen-line:after,.fad.fa-pen-line:after{content:"\e212\e212"}.fa-duotone.fa-pen-nib:after,.fad.fa-pen-nib:after{content:"\f5ad\f5ad"}.fa-duotone.fa-pen-nib-slash:after,.fad.fa-pen-nib-slash:after{content:"\e4a1\e4a1"}.fa-duotone.fa-pen-paintbrush:after,.fa-duotone.fa-pencil-paintbrush:after,.fad.fa-pen-paintbrush:after,.fad.fa-pencil-paintbrush:after{content:"\f618\f618"}.fa-duotone.fa-pen-ruler:after,.fa-duotone.fa-pencil-ruler:after,.fad.fa-pen-ruler:after,.fad.fa-pencil-ruler:after{content:"\f5ae\f5ae"}.fa-duotone.fa-pen-slash:after,.fad.fa-pen-slash:after{content:"\e213\e213"}.fa-duotone.fa-pen-swirl:after,.fad.fa-pen-swirl:after{content:"\e214\e214"}.fa-duotone.fa-edit:after,.fa-duotone.fa-pen-to-square:after,.fad.fa-edit:after,.fad.fa-pen-to-square:after{content:"\f044\f044"}.fa-duotone.fa-pencil-alt:after,.fa-duotone.fa-pencil:after,.fad.fa-pencil-alt:after,.fad.fa-pencil:after{content:"\f303\f303"}.fa-duotone.fa-pencil-slash:after,.fad.fa-pencil-slash:after{content:"\e215\e215"}.fa-duotone.fa-people:after,.fad.fa-people:after{content:"\e216\e216"}.fa-duotone.fa-people-arrows-left-right:after,.fa-duotone.fa-people-arrows:after,.fad.fa-people-arrows-left-right:after,.fad.fa-people-arrows:after{content:"\e068\e068"}.fa-duotone.fa-people-carry-box:after,.fa-duotone.fa-people-carry:after,.fad.fa-people-carry-box:after,.fad.fa-people-carry:after{content:"\f4ce\f4ce"}.fa-duotone.fa-people-dress:after,.fad.fa-people-dress:after{content:"\e217\e217"}.fa-duotone.fa-people-dress-simple:after,.fad.fa-people-dress-simple:after{content:"\e218\e218"}.fa-duotone.fa-people-group:after,.fad.fa-people-group:after{content:"\e533\e533"}.fa-duotone.fa-people-line:after,.fad.fa-people-line:after{content:"\e534\e534"}.fa-duotone.fa-people-pants:after,.fad.fa-people-pants:after{content:"\e219\e219"}.fa-duotone.fa-people-pants-simple:after,.fad.fa-people-pants-simple:after{content:"\e21a\e21a"}.fa-duotone.fa-people-pulling:after,.fad.fa-people-pulling:after{content:"\e535\e535"}.fa-duotone.fa-people-robbery:after,.fad.fa-people-robbery:after{content:"\e536\e536"}.fa-duotone.fa-people-roof:after,.fad.fa-people-roof:after{content:"\e537\e537"}.fa-duotone.fa-people-simple:after,.fad.fa-people-simple:after{content:"\e21b\e21b"}.fa-duotone.fa-pepper:after,.fad.fa-pepper:after{content:"\e432\e432"}.fa-duotone.fa-pepper-hot:after,.fad.fa-pepper-hot:after{content:"\f816\f816"}.fa-duotone.fa-percent:after,.fa-duotone.fa-percentage:after,.fad.fa-percent:after,.fad.fa-percentage:after{content:"\25\25"}.fa-duotone.fa-period:after,.fad.fa-period:after{content:"\2e\2e"}.fa-duotone.fa-male:after,.fa-duotone.fa-person:after,.fad.fa-male:after,.fad.fa-person:after{content:"\f183\f183"}.fa-duotone.fa-person-arrow-down-to-line:after,.fad.fa-person-arrow-down-to-line:after{content:"\e538\e538"}.fa-duotone.fa-person-arrow-up-from-line:after,.fad.fa-person-arrow-up-from-line:after{content:"\e539\e539"}.fa-duotone.fa-biking:after,.fa-duotone.fa-person-biking:after,.fad.fa-biking:after,.fad.fa-person-biking:after{content:"\f84a\f84a"}.fa-duotone.fa-biking-mountain:after,.fa-duotone.fa-person-biking-mountain:after,.fad.fa-biking-mountain:after,.fad.fa-person-biking-mountain:after{content:"\f84b\f84b"}.fa-duotone.fa-person-booth:after,.fad.fa-person-booth:after{content:"\f756\f756"}.fa-duotone.fa-person-breastfeeding:after,.fad.fa-person-breastfeeding:after{content:"\e53a\e53a"}.fa-duotone.fa-person-burst:after,.fad.fa-person-burst:after{content:"\e53b\e53b"}.fa-duotone.fa-person-cane:after,.fad.fa-person-cane:after{content:"\e53c\e53c"}.fa-duotone.fa-person-carry-box:after,.fa-duotone.fa-person-carry:after,.fad.fa-person-carry-box:after,.fad.fa-person-carry:after{content:"\f4cf\f4cf"}.fa-duotone.fa-person-chalkboard:after,.fad.fa-person-chalkboard:after{content:"\e53d\e53d"}.fa-duotone.fa-person-circle-check:after,.fad.fa-person-circle-check:after{content:"\e53e\e53e"}.fa-duotone.fa-person-circle-exclamation:after,.fad.fa-person-circle-exclamation:after{content:"\e53f\e53f"}.fa-duotone.fa-person-circle-minus:after,.fad.fa-person-circle-minus:after{content:"\e540\e540"}.fa-duotone.fa-person-circle-plus:after,.fad.fa-person-circle-plus:after{content:"\e541\e541"}.fa-duotone.fa-person-circle-question:after,.fad.fa-person-circle-question:after{content:"\e542\e542"}.fa-duotone.fa-person-circle-xmark:after,.fad.fa-person-circle-xmark:after{content:"\e543\e543"}.fa-duotone.fa-digging:after,.fa-duotone.fa-person-digging:after,.fad.fa-digging:after,.fad.fa-person-digging:after{content:"\f85e\f85e"}.fa-duotone.fa-person-dolly:after,.fad.fa-person-dolly:after{content:"\f4d0\f4d0"}.fa-duotone.fa-person-dolly-empty:after,.fad.fa-person-dolly-empty:after{content:"\f4d1\f4d1"}.fa-duotone.fa-diagnoses:after,.fa-duotone.fa-person-dots-from-line:after,.fad.fa-diagnoses:after,.fad.fa-person-dots-from-line:after{content:"\f470\f470"}.fa-duotone.fa-female:after,.fa-duotone.fa-person-dress:after,.fad.fa-female:after,.fad.fa-person-dress:after{content:"\f182\f182"}.fa-duotone.fa-person-dress-burst:after,.fad.fa-person-dress-burst:after{content:"\e544\e544"}.fa-duotone.fa-person-dress-simple:after,.fad.fa-person-dress-simple:after{content:"\e21c\e21c"}.fa-duotone.fa-person-drowning:after,.fad.fa-person-drowning:after{content:"\e545\e545"}.fa-duotone.fa-person-falling:after,.fad.fa-person-falling:after{content:"\e546\e546"}.fa-duotone.fa-person-falling-burst:after,.fad.fa-person-falling-burst:after{content:"\e547\e547"}.fa-duotone.fa-person-from-portal:after,.fa-duotone.fa-portal-exit:after,.fad.fa-person-from-portal:after,.fad.fa-portal-exit:after{content:"\e023\e023"}.fa-duotone.fa-person-half-dress:after,.fad.fa-person-half-dress:after{content:"\e548\e548"}.fa-duotone.fa-person-harassing:after,.fad.fa-person-harassing:after{content:"\e549\e549"}.fa-duotone.fa-hiking:after,.fa-duotone.fa-person-hiking:after,.fad.fa-hiking:after,.fad.fa-person-hiking:after{content:"\f6ec\f6ec"}.fa-duotone.fa-person-military-pointing:after,.fad.fa-person-military-pointing:after{content:"\e54a\e54a"}.fa-duotone.fa-person-military-rifle:after,.fad.fa-person-military-rifle:after{content:"\e54b\e54b"}.fa-duotone.fa-person-military-to-person:after,.fad.fa-person-military-to-person:after{content:"\e54c\e54c"}.fa-duotone.fa-person-pinball:after,.fad.fa-person-pinball:after{content:"\e21d\e21d"}.fa-duotone.fa-person-praying:after,.fa-duotone.fa-pray:after,.fad.fa-person-praying:after,.fad.fa-pray:after{content:"\f683\f683"}.fa-duotone.fa-person-pregnant:after,.fad.fa-person-pregnant:after{content:"\e31e\e31e"}.fa-duotone.fa-person-rays:after,.fad.fa-person-rays:after{content:"\e54d\e54d"}.fa-duotone.fa-person-rifle:after,.fad.fa-person-rifle:after{content:"\e54e\e54e"}.fa-duotone.fa-person-running:after,.fa-duotone.fa-running:after,.fad.fa-person-running:after,.fad.fa-running:after{content:"\f70c\f70c"}.fa-duotone.fa-person-seat:after,.fad.fa-person-seat:after{content:"\e21e\e21e"}.fa-duotone.fa-person-seat-reclined:after,.fad.fa-person-seat-reclined:after{content:"\e21f\e21f"}.fa-duotone.fa-person-shelter:after,.fad.fa-person-shelter:after{content:"\e54f\e54f"}.fa-duotone.fa-person-sign:after,.fad.fa-person-sign:after{content:"\f757\f757"}.fa-duotone.fa-person-simple:after,.fad.fa-person-simple:after{content:"\e220\e220"}.fa-duotone.fa-person-skating:after,.fa-duotone.fa-skating:after,.fad.fa-person-skating:after,.fad.fa-skating:after{content:"\f7c5\f7c5"}.fa-duotone.fa-person-ski-jumping:after,.fa-duotone.fa-ski-jump:after,.fad.fa-person-ski-jumping:after,.fad.fa-ski-jump:after{content:"\f7c7\f7c7"}.fa-duotone.fa-person-ski-lift:after,.fa-duotone.fa-ski-lift:after,.fad.fa-person-ski-lift:after,.fad.fa-ski-lift:after{content:"\f7c8\f7c8"}.fa-duotone.fa-person-skiing:after,.fa-duotone.fa-skiing:after,.fad.fa-person-skiing:after,.fad.fa-skiing:after{content:"\f7c9\f7c9"}.fa-duotone.fa-person-skiing-nordic:after,.fa-duotone.fa-skiing-nordic:after,.fad.fa-person-skiing-nordic:after,.fad.fa-skiing-nordic:after{content:"\f7ca\f7ca"}.fa-duotone.fa-person-sledding:after,.fa-duotone.fa-sledding:after,.fad.fa-person-sledding:after,.fad.fa-sledding:after{content:"\f7cb\f7cb"}.fa-duotone.fa-person-snowboarding:after,.fa-duotone.fa-snowboarding:after,.fad.fa-person-snowboarding:after,.fad.fa-snowboarding:after{content:"\f7ce\f7ce"}.fa-duotone.fa-person-snowmobiling:after,.fa-duotone.fa-snowmobile:after,.fad.fa-person-snowmobiling:after,.fad.fa-snowmobile:after{content:"\f7d1\f7d1"}.fa-duotone.fa-person-swimming:after,.fa-duotone.fa-swimmer:after,.fad.fa-person-swimming:after,.fad.fa-swimmer:after{content:"\f5c4\f5c4"}.fa-duotone.fa-person-through-window:after,.fad.fa-person-through-window:after{content:"\e5a9\e5a9"}.fa-duotone.fa-person-to-door:after,.fad.fa-person-to-door:after{content:"\e433\e433"}.fa-duotone.fa-person-to-portal:after,.fa-duotone.fa-portal-enter:after,.fad.fa-person-to-portal:after,.fad.fa-portal-enter:after{content:"\e022\e022"}.fa-duotone.fa-person-walking:after,.fa-duotone.fa-walking:after,.fad.fa-person-walking:after,.fad.fa-walking:after{content:"\f554\f554"}.fa-duotone.fa-person-walking-arrow-loop-left:after,.fad.fa-person-walking-arrow-loop-left:after{content:"\e551\e551"}.fa-duotone.fa-person-walking-arrow-right:after,.fad.fa-person-walking-arrow-right:after{content:"\e552\e552"}.fa-duotone.fa-person-walking-dashed-line-arrow-right:after,.fad.fa-person-walking-dashed-line-arrow-right:after{content:"\e553\e553"}.fa-duotone.fa-person-walking-luggage:after,.fad.fa-person-walking-luggage:after{content:"\e554\e554"}.fa-duotone.fa-blind:after,.fa-duotone.fa-person-walking-with-cane:after,.fad.fa-blind:after,.fad.fa-person-walking-with-cane:after{content:"\f29d\f29d"}.fa-duotone.fa-peseta-sign:after,.fad.fa-peseta-sign:after{content:"\e221\e221"}.fa-duotone.fa-peso-sign:after,.fad.fa-peso-sign:after{content:"\e222\e222"}.fa-duotone.fa-phone:after,.fad.fa-phone:after{content:"\f095\f095"}.fa-duotone.fa-phone-arrow-down-left:after,.fa-duotone.fa-phone-arrow-down:after,.fa-duotone.fa-phone-incoming:after,.fad.fa-phone-arrow-down-left:after,.fad.fa-phone-arrow-down:after,.fad.fa-phone-incoming:after{content:"\e223\e223"}.fa-duotone.fa-phone-arrow-up-right:after,.fa-duotone.fa-phone-arrow-up:after,.fa-duotone.fa-phone-outgoing:after,.fad.fa-phone-arrow-up-right:after,.fad.fa-phone-arrow-up:after,.fad.fa-phone-outgoing:after{content:"\e224\e224"}.fa-duotone.fa-phone-alt:after,.fa-duotone.fa-phone-flip:after,.fad.fa-phone-alt:after,.fad.fa-phone-flip:after{content:"\f879\f879"}.fa-duotone.fa-phone-hangup:after,.fad.fa-phone-hangup:after{content:"\e225\e225"}.fa-duotone.fa-phone-intercom:after,.fad.fa-phone-intercom:after{content:"\e434\e434"}.fa-duotone.fa-phone-missed:after,.fad.fa-phone-missed:after{content:"\e226\e226"}.fa-duotone.fa-phone-office:after,.fad.fa-phone-office:after{content:"\f67d\f67d"}.fa-duotone.fa-phone-plus:after,.fad.fa-phone-plus:after{content:"\f4d2\f4d2"}.fa-duotone.fa-phone-rotary:after,.fad.fa-phone-rotary:after{content:"\f8d3\f8d3"}.fa-duotone.fa-phone-slash:after,.fad.fa-phone-slash:after{content:"\f3dd\f3dd"}.fa-duotone.fa-phone-volume:after,.fa-duotone.fa-volume-control-phone:after,.fad.fa-phone-volume:after,.fad.fa-volume-control-phone:after{content:"\f2a0\f2a0"}.fa-duotone.fa-phone-xmark:after,.fad.fa-phone-xmark:after{content:"\e227\e227"}.fa-duotone.fa-photo-film:after,.fa-duotone.fa-photo-video:after,.fad.fa-photo-film:after,.fad.fa-photo-video:after{content:"\f87c\f87c"}.fa-duotone.fa-photo-film-music:after,.fad.fa-photo-film-music:after{content:"\e228\e228"}.fa-duotone.fa-pi:after,.fad.fa-pi:after{content:"\f67e\f67e"}.fa-duotone.fa-piano:after,.fad.fa-piano:after{content:"\f8d4\f8d4"}.fa-duotone.fa-piano-keyboard:after,.fad.fa-piano-keyboard:after{content:"\f8d5\f8d5"}.fa-duotone.fa-pickleball:after,.fad.fa-pickleball:after{content:"\e435\e435"}.fa-duotone.fa-pie:after,.fad.fa-pie:after{content:"\f705\f705"}.fa-duotone.fa-pig:after,.fad.fa-pig:after{content:"\f706\f706"}.fa-duotone.fa-piggy-bank:after,.fad.fa-piggy-bank:after{content:"\f4d3\f4d3"}.fa-duotone.fa-pills:after,.fad.fa-pills:after{content:"\f484\f484"}.fa-duotone.fa-pinata:after,.fad.fa-pinata:after{content:"\e3c3\e3c3"}.fa-duotone.fa-pinball:after,.fad.fa-pinball:after{content:"\e229\e229"}.fa-duotone.fa-pineapple:after,.fad.fa-pineapple:after{content:"\e31f\e31f"}.fa-duotone.fa-pipe:after,.fad.fa-pipe:after{content:"\7c\7c"}.fa-duotone.fa-pipe-circle-check:after,.fad.fa-pipe-circle-check:after{content:"\e436\e436"}.fa-duotone.fa-pipe-collar:after,.fad.fa-pipe-collar:after{content:"\e437\e437"}.fa-duotone.fa-pipe-section:after,.fad.fa-pipe-section:after{content:"\e438\e438"}.fa-duotone.fa-pipe-smoking:after,.fad.fa-pipe-smoking:after{content:"\e3c4\e3c4"}.fa-duotone.fa-pipe-valve:after,.fad.fa-pipe-valve:after{content:"\e439\e439"}.fa-duotone.fa-pizza:after,.fad.fa-pizza:after{content:"\f817\f817"}.fa-duotone.fa-pizza-slice:after,.fad.fa-pizza-slice:after{content:"\f818\f818"}.fa-duotone.fa-place-of-worship:after,.fad.fa-place-of-worship:after{content:"\f67f\f67f"}.fa-duotone.fa-plane:after,.fad.fa-plane:after{content:"\f072\f072"}.fa-duotone.fa-plane-arrival:after,.fad.fa-plane-arrival:after{content:"\f5af\f5af"}.fa-duotone.fa-plane-circle-check:after,.fad.fa-plane-circle-check:after{content:"\e555\e555"}.fa-duotone.fa-plane-circle-exclamation:after,.fad.fa-plane-circle-exclamation:after{content:"\e556\e556"}.fa-duotone.fa-plane-circle-xmark:after,.fad.fa-plane-circle-xmark:after{content:"\e557\e557"}.fa-duotone.fa-plane-departure:after,.fad.fa-plane-departure:after{content:"\f5b0\f5b0"}.fa-duotone.fa-plane-alt:after,.fa-duotone.fa-plane-engines:after,.fad.fa-plane-alt:after,.fad.fa-plane-engines:after{content:"\f3de\f3de"}.fa-duotone.fa-plane-lock:after,.fad.fa-plane-lock:after{content:"\e558\e558"}.fa-duotone.fa-plane-prop:after,.fad.fa-plane-prop:after{content:"\e22b\e22b"}.fa-duotone.fa-plane-slash:after,.fad.fa-plane-slash:after{content:"\e069\e069"}.fa-duotone.fa-plane-tail:after,.fad.fa-plane-tail:after{content:"\e22c\e22c"}.fa-duotone.fa-plane-up:after,.fad.fa-plane-up:after{content:"\e22d\e22d"}.fa-duotone.fa-plane-up-slash:after,.fad.fa-plane-up-slash:after{content:"\e22e\e22e"}.fa-duotone.fa-planet-moon:after,.fad.fa-planet-moon:after{content:"\e01f\e01f"}.fa-duotone.fa-planet-ringed:after,.fad.fa-planet-ringed:after{content:"\e020\e020"}.fa-duotone.fa-plant-wilt:after,.fad.fa-plant-wilt:after{content:"\e5aa\e5aa"}.fa-duotone.fa-plate-utensils:after,.fad.fa-plate-utensils:after{content:"\e43b\e43b"}.fa-duotone.fa-plate-wheat:after,.fad.fa-plate-wheat:after{content:"\e55a\e55a"}.fa-duotone.fa-play:after,.fad.fa-play:after{content:"\f04b\f04b"}.fa-duotone.fa-play-pause:after,.fad.fa-play-pause:after{content:"\e22f\e22f"}.fa-duotone.fa-plug:after,.fad.fa-plug:after{content:"\f1e6\f1e6"}.fa-duotone.fa-plug-circle-bolt:after,.fad.fa-plug-circle-bolt:after{content:"\e55b\e55b"}.fa-duotone.fa-plug-circle-check:after,.fad.fa-plug-circle-check:after{content:"\e55c\e55c"}.fa-duotone.fa-plug-circle-exclamation:after,.fad.fa-plug-circle-exclamation:after{content:"\e55d\e55d"}.fa-duotone.fa-plug-circle-minus:after,.fad.fa-plug-circle-minus:after{content:"\e55e\e55e"}.fa-duotone.fa-plug-circle-plus:after,.fad.fa-plug-circle-plus:after{content:"\e55f\e55f"}.fa-duotone.fa-plug-circle-xmark:after,.fad.fa-plug-circle-xmark:after{content:"\e560\e560"}.fa-duotone.fa-add:after,.fa-duotone.fa-plus:after,.fad.fa-add:after,.fad.fa-plus:after{content:"\2b\2b"}.fa-duotone.fa-plus-large:after,.fad.fa-plus-large:after{content:"\e59e\e59e"}.fa-duotone.fa-plus-minus:after,.fad.fa-plus-minus:after{content:"\e43c\e43c"}.fa-duotone.fa-podcast:after,.fad.fa-podcast:after{content:"\f2ce\f2ce"}.fa-duotone.fa-podium:after,.fad.fa-podium:after{content:"\f680\f680"}.fa-duotone.fa-podium-star:after,.fad.fa-podium-star:after{content:"\f758\f758"}.fa-duotone.fa-police-box:after,.fad.fa-police-box:after{content:"\e021\e021"}.fa-duotone.fa-poll-people:after,.fad.fa-poll-people:after{content:"\f759\f759"}.fa-duotone.fa-pompebled:after,.fad.fa-pompebled:after{content:"\e43d\e43d"}.fa-duotone.fa-poo:after,.fad.fa-poo:after{content:"\f2fe\f2fe"}.fa-duotone.fa-poo-bolt:after,.fa-duotone.fa-poo-storm:after,.fad.fa-poo-bolt:after,.fad.fa-poo-storm:after{content:"\f75a\f75a"}.fa-duotone.fa-pool-8-ball:after,.fad.fa-pool-8-ball:after{content:"\e3c5\e3c5"}.fa-duotone.fa-poop:after,.fad.fa-poop:after{content:"\f619\f619"}.fa-duotone.fa-popcorn:after,.fad.fa-popcorn:after{content:"\f819\f819"}.fa-duotone.fa-popsicle:after,.fad.fa-popsicle:after{content:"\e43e\e43e"}.fa-duotone.fa-pot-food:after,.fad.fa-pot-food:after{content:"\e43f\e43f"}.fa-duotone.fa-potato:after,.fad.fa-potato:after{content:"\e440\e440"}.fa-duotone.fa-power-off:after,.fad.fa-power-off:after{content:"\f011\f011"}.fa-duotone.fa-prescription:after,.fad.fa-prescription:after{content:"\f5b1\f5b1"}.fa-duotone.fa-prescription-bottle:after,.fad.fa-prescription-bottle:after{content:"\f485\f485"}.fa-duotone.fa-prescription-bottle-alt:after,.fa-duotone.fa-prescription-bottle-medical:after,.fad.fa-prescription-bottle-alt:after,.fad.fa-prescription-bottle-medical:after{content:"\f486\f486"}.fa-duotone.fa-presentation-screen:after,.fa-duotone.fa-presentation:after,.fad.fa-presentation-screen:after,.fad.fa-presentation:after{content:"\f685\f685"}.fa-duotone.fa-pretzel:after,.fad.fa-pretzel:after{content:"\e441\e441"}.fa-duotone.fa-print:after,.fad.fa-print:after{content:"\f02f\f02f"}.fa-duotone.fa-print-magnifying-glass:after,.fa-duotone.fa-print-search:after,.fad.fa-print-magnifying-glass:after,.fad.fa-print-search:after{content:"\f81a\f81a"}.fa-duotone.fa-print-slash:after,.fad.fa-print-slash:after{content:"\f686\f686"}.fa-duotone.fa-projector:after,.fad.fa-projector:after{content:"\f8d6\f8d6"}.fa-duotone.fa-pump:after,.fad.fa-pump:after{content:"\e442\e442"}.fa-duotone.fa-pump-medical:after,.fad.fa-pump-medical:after{content:"\e06a\e06a"}.fa-duotone.fa-pump-soap:after,.fad.fa-pump-soap:after{content:"\e06b\e06b"}.fa-duotone.fa-pumpkin:after,.fad.fa-pumpkin:after{content:"\f707\f707"}.fa-duotone.fa-puzzle:after,.fad.fa-puzzle:after{content:"\e443\e443"}.fa-duotone.fa-puzzle-piece:after,.fad.fa-puzzle-piece:after{content:"\f12e\f12e"}.fa-duotone.fa-puzzle-piece-alt:after,.fa-duotone.fa-puzzle-piece-simple:after,.fad.fa-puzzle-piece-alt:after,.fad.fa-puzzle-piece-simple:after{content:"\e231\e231"}.fa-duotone.fa-q:after,.fad.fa-q:after{content:"\51\51"}.fa-duotone.fa-qrcode:after,.fad.fa-qrcode:after{content:"\f029\f029"}.fa-duotone.fa-question:after,.fad.fa-question:after{content:"\3f\3f"}.fa-duotone.fa-quote-left-alt:after,.fa-duotone.fa-quote-left:after,.fad.fa-quote-left-alt:after,.fad.fa-quote-left:after{content:"\f10d\f10d"}.fa-duotone.fa-quote-right-alt:after,.fa-duotone.fa-quote-right:after,.fad.fa-quote-right-alt:after,.fad.fa-quote-right:after{content:"\f10e\f10e"}.fa-duotone.fa-quotes:after,.fad.fa-quotes:after{content:"\e234\e234"}.fa-duotone.fa-r:after,.fad.fa-r:after{content:"\52\52"}.fa-duotone.fa-rabbit:after,.fad.fa-rabbit:after{content:"\f708\f708"}.fa-duotone.fa-rabbit-fast:after,.fa-duotone.fa-rabbit-running:after,.fad.fa-rabbit-fast:after,.fad.fa-rabbit-running:after{content:"\f709\f709"}.fa-duotone.fa-racquet:after,.fad.fa-racquet:after{content:"\f45a\f45a"}.fa-duotone.fa-radar:after,.fad.fa-radar:after{content:"\e024\e024"}.fa-duotone.fa-radiation:after,.fad.fa-radiation:after{content:"\f7b9\f7b9"}.fa-duotone.fa-radio:after,.fad.fa-radio:after{content:"\f8d7\f8d7"}.fa-duotone.fa-radio-alt:after,.fa-duotone.fa-radio-tuner:after,.fad.fa-radio-alt:after,.fad.fa-radio-tuner:after{content:"\f8d8\f8d8"}.fa-duotone.fa-rainbow:after,.fad.fa-rainbow:after{content:"\f75b\f75b"}.fa-duotone.fa-raindrops:after,.fad.fa-raindrops:after{content:"\f75c\f75c"}.fa-duotone.fa-ram:after,.fad.fa-ram:after{content:"\f70a\f70a"}.fa-duotone.fa-ramp-loading:after,.fad.fa-ramp-loading:after{content:"\f4d4\f4d4"}.fa-duotone.fa-ranking-star:after,.fad.fa-ranking-star:after{content:"\e561\e561"}.fa-duotone.fa-raygun:after,.fad.fa-raygun:after{content:"\e025\e025"}.fa-duotone.fa-receipt:after,.fad.fa-receipt:after{content:"\f543\f543"}.fa-duotone.fa-record-vinyl:after,.fad.fa-record-vinyl:after{content:"\f8d9\f8d9"}.fa-duotone.fa-rectangle-landscape:after,.fa-duotone.fa-rectangle:after,.fad.fa-rectangle-landscape:after,.fad.fa-rectangle:after{content:"\f2fa\f2fa"}.fa-duotone.fa-ad:after,.fa-duotone.fa-rectangle-ad:after,.fad.fa-ad:after,.fad.fa-rectangle-ad:after{content:"\f641\f641"}.fa-duotone.fa-barcode-alt:after,.fa-duotone.fa-rectangle-barcode:after,.fad.fa-barcode-alt:after,.fad.fa-rectangle-barcode:after{content:"\f463\f463"}.fa-duotone.fa-rectangle-code:after,.fad.fa-rectangle-code:after{content:"\e322\e322"}.fa-duotone.fa-rectangle-history:after,.fad.fa-rectangle-history:after{content:"\e4a2\e4a2"}.fa-duotone.fa-rectangle-history-circle-plus:after,.fad.fa-rectangle-history-circle-plus:after{content:"\e4a3\e4a3"}.fa-duotone.fa-rectangle-history-circle-user:after,.fad.fa-rectangle-history-circle-user:after{content:"\e4a4\e4a4"}.fa-duotone.fa-list-alt:after,.fa-duotone.fa-rectangle-list:after,.fad.fa-list-alt:after,.fad.fa-rectangle-list:after{content:"\f022\f022"}.fa-duotone.fa-pro:after,.fa-duotone.fa-rectangle-pro:after,.fad.fa-pro:after,.fad.fa-rectangle-pro:after{content:"\e235\e235"}.fa-duotone.fa-rectangle-terminal:after,.fad.fa-rectangle-terminal:after{content:"\e236\e236"}.fa-duotone.fa-rectangle-portrait:after,.fa-duotone.fa-rectangle-vertical:after,.fad.fa-rectangle-portrait:after,.fad.fa-rectangle-vertical:after{content:"\f2fb\f2fb"}.fa-duotone.fa-rectangle-vertical-history:after,.fad.fa-rectangle-vertical-history:after{content:"\e237\e237"}.fa-duotone.fa-rectangle-wide:after,.fad.fa-rectangle-wide:after{content:"\f2fc\f2fc"}.fa-duotone.fa-rectangle-times:after,.fa-duotone.fa-rectangle-xmark:after,.fa-duotone.fa-times-rectangle:after,.fa-duotone.fa-window-close:after,.fad.fa-rectangle-times:after,.fad.fa-rectangle-xmark:after,.fad.fa-times-rectangle:after,.fad.fa-window-close:after{content:"\f410\f410"}.fa-duotone.fa-rectangles-mixed:after,.fad.fa-rectangles-mixed:after{content:"\e323\e323"}.fa-duotone.fa-recycle:after,.fad.fa-recycle:after{content:"\f1b8\f1b8"}.fa-duotone.fa-reel:after,.fad.fa-reel:after{content:"\e238\e238"}.fa-duotone.fa-refrigerator:after,.fad.fa-refrigerator:after{content:"\e026\e026"}.fa-duotone.fa-registered:after,.fad.fa-registered:after{content:"\f25d\f25d"}.fa-duotone.fa-repeat:after,.fad.fa-repeat:after{content:"\f363\f363"}.fa-duotone.fa-repeat-1:after,.fad.fa-repeat-1:after{content:"\f365\f365"}.fa-duotone.fa-mail-reply:after,.fa-duotone.fa-reply:after,.fad.fa-mail-reply:after,.fad.fa-reply:after{content:"\f3e5\f3e5"}.fa-duotone.fa-mail-reply-all:after,.fa-duotone.fa-reply-all:after,.fad.fa-mail-reply-all:after,.fad.fa-reply-all:after{content:"\f122\f122"}.fa-duotone.fa-reply-clock:after,.fa-duotone.fa-reply-time:after,.fad.fa-reply-clock:after,.fad.fa-reply-time:after{content:"\e239\e239"}.fa-duotone.fa-republican:after,.fad.fa-republican:after{content:"\f75e\f75e"}.fa-duotone.fa-restroom:after,.fad.fa-restroom:after{content:"\f7bd\f7bd"}.fa-duotone.fa-restroom-simple:after,.fad.fa-restroom-simple:after{content:"\e23a\e23a"}.fa-duotone.fa-retweet:after,.fad.fa-retweet:after{content:"\f079\f079"}.fa-duotone.fa-rhombus:after,.fad.fa-rhombus:after{content:"\e23b\e23b"}.fa-duotone.fa-ribbon:after,.fad.fa-ribbon:after{content:"\f4d6\f4d6"}.fa-duotone.fa-arrow-alt-right:after,.fa-duotone.fa-right:after,.fad.fa-arrow-alt-right:after,.fad.fa-right:after{content:"\f356\f356"}.fa-duotone.fa-right-from-bracket:after,.fa-duotone.fa-sign-out-alt:after,.fad.fa-right-from-bracket:after,.fad.fa-sign-out-alt:after{content:"\f2f5\f2f5"}.fa-duotone.fa-arrow-alt-from-left:after,.fa-duotone.fa-right-from-line:after,.fad.fa-arrow-alt-from-left:after,.fad.fa-right-from-line:after{content:"\f347\f347"}.fa-duotone.fa-exchange-alt:after,.fa-duotone.fa-right-left:after,.fad.fa-exchange-alt:after,.fad.fa-right-left:after{content:"\f362\f362"}.fa-duotone.fa-long-arrow-alt-right:after,.fa-duotone.fa-right-long:after,.fad.fa-long-arrow-alt-right:after,.fad.fa-right-long:after{content:"\f30b\f30b"}.fa-duotone.fa-right-long-to-line:after,.fad.fa-right-long-to-line:after{content:"\e444\e444"}.fa-duotone.fa-right-to-bracket:after,.fa-duotone.fa-sign-in-alt:after,.fad.fa-right-to-bracket:after,.fad.fa-sign-in-alt:after{content:"\f2f6\f2f6"}.fa-duotone.fa-arrow-alt-to-right:after,.fa-duotone.fa-right-to-line:after,.fad.fa-arrow-alt-to-right:after,.fad.fa-right-to-line:after{content:"\f34c\f34c"}.fa-duotone.fa-ring:after,.fad.fa-ring:after{content:"\f70b\f70b"}.fa-duotone.fa-ring-diamond:after,.fad.fa-ring-diamond:after{content:"\e5ab\e5ab"}.fa-duotone.fa-rings-wedding:after,.fad.fa-rings-wedding:after{content:"\f81b\f81b"}.fa-duotone.fa-road:after,.fad.fa-road:after{content:"\f018\f018"}.fa-duotone.fa-road-barrier:after,.fad.fa-road-barrier:after{content:"\e562\e562"}.fa-duotone.fa-road-bridge:after,.fad.fa-road-bridge:after{content:"\e563\e563"}.fa-duotone.fa-road-circle-check:after,.fad.fa-road-circle-check:after{content:"\e564\e564"}.fa-duotone.fa-road-circle-exclamation:after,.fad.fa-road-circle-exclamation:after{content:"\e565\e565"}.fa-duotone.fa-road-circle-xmark:after,.fad.fa-road-circle-xmark:after{content:"\e566\e566"}.fa-duotone.fa-road-lock:after,.fad.fa-road-lock:after{content:"\e567\e567"}.fa-duotone.fa-road-spikes:after,.fad.fa-road-spikes:after{content:"\e568\e568"}.fa-duotone.fa-robot:after,.fad.fa-robot:after{content:"\f544\f544"}.fa-duotone.fa-robot-astromech:after,.fad.fa-robot-astromech:after{content:"\e2d2\e2d2"}.fa-duotone.fa-rocket:after,.fad.fa-rocket:after{content:"\f135\f135"}.fa-duotone.fa-rocket-launch:after,.fad.fa-rocket-launch:after{content:"\e027\e027"}.fa-duotone.fa-roller-coaster:after,.fad.fa-roller-coaster:after{content:"\e324\e324"}.fa-duotone.fa-rotate:after,.fa-duotone.fa-sync-alt:after,.fad.fa-rotate:after,.fad.fa-sync-alt:after{content:"\f2f1\f2f1"}.fa-duotone.fa-rotate-exclamation:after,.fad.fa-rotate-exclamation:after{content:"\e23c\e23c"}.fa-duotone.fa-rotate-back:after,.fa-duotone.fa-rotate-backward:after,.fa-duotone.fa-rotate-left:after,.fa-duotone.fa-undo-alt:after,.fad.fa-rotate-back:after,.fad.fa-rotate-backward:after,.fad.fa-rotate-left:after,.fad.fa-undo-alt:after{content:"\f2ea\f2ea"}.fa-duotone.fa-redo-alt:after,.fa-duotone.fa-rotate-forward:after,.fa-duotone.fa-rotate-right:after,.fad.fa-redo-alt:after,.fad.fa-rotate-forward:after,.fad.fa-rotate-right:after{content:"\f2f9\f2f9"}.fa-duotone.fa-route:after,.fad.fa-route:after{content:"\f4d7\f4d7"}.fa-duotone.fa-route-highway:after,.fad.fa-route-highway:after{content:"\f61a\f61a"}.fa-duotone.fa-route-interstate:after,.fad.fa-route-interstate:after{content:"\f61b\f61b"}.fa-duotone.fa-router:after,.fad.fa-router:after{content:"\f8da\f8da"}.fa-duotone.fa-feed:after,.fa-duotone.fa-rss:after,.fad.fa-feed:after,.fad.fa-rss:after{content:"\f09e\f09e"}.fa-duotone.fa-rouble:after,.fa-duotone.fa-rub:after,.fa-duotone.fa-ruble-sign:after,.fa-duotone.fa-ruble:after,.fad.fa-rouble:after,.fad.fa-rub:after,.fad.fa-ruble-sign:after,.fad.fa-ruble:after{content:"\f158\f158"}.fa-duotone.fa-rug:after,.fad.fa-rug:after{content:"\e569\e569"}.fa-duotone.fa-rugby-ball:after,.fad.fa-rugby-ball:after{content:"\e3c6\e3c6"}.fa-duotone.fa-ruler:after,.fad.fa-ruler:after{content:"\f545\f545"}.fa-duotone.fa-ruler-combined:after,.fad.fa-ruler-combined:after{content:"\f546\f546"}.fa-duotone.fa-ruler-horizontal:after,.fad.fa-ruler-horizontal:after{content:"\f547\f547"}.fa-duotone.fa-ruler-triangle:after,.fad.fa-ruler-triangle:after{content:"\f61c\f61c"}.fa-duotone.fa-ruler-vertical:after,.fad.fa-ruler-vertical:after{content:"\f548\f548"}.fa-duotone.fa-rupee-sign:after,.fa-duotone.fa-rupee:after,.fad.fa-rupee-sign:after,.fad.fa-rupee:after{content:"\f156\f156"}.fa-duotone.fa-rupiah-sign:after,.fad.fa-rupiah-sign:after{content:"\e23d\e23d"}.fa-duotone.fa-rv:after,.fad.fa-rv:after{content:"\f7be\f7be"}.fa-duotone.fa-s:after,.fad.fa-s:after{content:"\53\53"}.fa-duotone.fa-sack:after,.fad.fa-sack:after{content:"\f81c\f81c"}.fa-duotone.fa-sack-dollar:after,.fad.fa-sack-dollar:after{content:"\f81d\f81d"}.fa-duotone.fa-sack-xmark:after,.fad.fa-sack-xmark:after{content:"\e56a\e56a"}.fa-duotone.fa-sailboat:after,.fad.fa-sailboat:after{content:"\e445\e445"}.fa-duotone.fa-bowl-salad:after,.fa-duotone.fa-salad:after,.fad.fa-bowl-salad:after,.fad.fa-salad:after{content:"\f81e\f81e"}.fa-duotone.fa-salt-shaker:after,.fad.fa-salt-shaker:after{content:"\e446\e446"}.fa-duotone.fa-sandwich:after,.fad.fa-sandwich:after{content:"\f81f\f81f"}.fa-duotone.fa-satellite:after,.fad.fa-satellite:after{content:"\f7bf\f7bf"}.fa-duotone.fa-satellite-dish:after,.fad.fa-satellite-dish:after{content:"\f7c0\f7c0"}.fa-duotone.fa-sausage:after,.fad.fa-sausage:after{content:"\f820\f820"}.fa-duotone.fa-saxophone:after,.fad.fa-saxophone:after{content:"\f8dc\f8dc"}.fa-duotone.fa-sax-hot:after,.fa-duotone.fa-saxophone-fire:after,.fad.fa-sax-hot:after,.fad.fa-saxophone-fire:after{content:"\f8db\f8db"}.fa-duotone.fa-balance-scale:after,.fa-duotone.fa-scale-balanced:after,.fad.fa-balance-scale:after,.fad.fa-scale-balanced:after{content:"\f24e\f24e"}.fa-duotone.fa-balance-scale-left:after,.fa-duotone.fa-scale-unbalanced:after,.fad.fa-balance-scale-left:after,.fad.fa-scale-unbalanced:after{content:"\f515\f515"}.fa-duotone.fa-balance-scale-right:after,.fa-duotone.fa-scale-unbalanced-flip:after,.fad.fa-balance-scale-right:after,.fad.fa-scale-unbalanced-flip:after{content:"\f516\f516"}.fa-duotone.fa-scalpel:after,.fad.fa-scalpel:after{content:"\f61d\f61d"}.fa-duotone.fa-scalpel-line-dashed:after,.fa-duotone.fa-scalpel-path:after,.fad.fa-scalpel-line-dashed:after,.fad.fa-scalpel-path:after{content:"\f61e\f61e"}.fa-duotone.fa-scanner-gun:after,.fa-duotone.fa-scanner:after,.fad.fa-scanner-gun:after,.fad.fa-scanner:after{content:"\f488\f488"}.fa-duotone.fa-scanner-image:after,.fad.fa-scanner-image:after{content:"\f8f3\f8f3"}.fa-duotone.fa-scanner-keyboard:after,.fad.fa-scanner-keyboard:after{content:"\f489\f489"}.fa-duotone.fa-scanner-touchscreen:after,.fad.fa-scanner-touchscreen:after{content:"\f48a\f48a"}.fa-duotone.fa-scarecrow:after,.fad.fa-scarecrow:after{content:"\f70d\f70d"}.fa-duotone.fa-scarf:after,.fad.fa-scarf:after{content:"\f7c1\f7c1"}.fa-duotone.fa-school:after,.fad.fa-school:after{content:"\f549\f549"}.fa-duotone.fa-school-circle-check:after,.fad.fa-school-circle-check:after{content:"\e56b\e56b"}.fa-duotone.fa-school-circle-exclamation:after,.fad.fa-school-circle-exclamation:after{content:"\e56c\e56c"}.fa-duotone.fa-school-circle-xmark:after,.fad.fa-school-circle-xmark:after{content:"\e56d\e56d"}.fa-duotone.fa-school-flag:after,.fad.fa-school-flag:after{content:"\e56e\e56e"}.fa-duotone.fa-school-lock:after,.fad.fa-school-lock:after{content:"\e56f\e56f"}.fa-duotone.fa-cut:after,.fa-duotone.fa-scissors:after,.fad.fa-cut:after,.fad.fa-scissors:after{content:"\f0c4\f0c4"}.fa-duotone.fa-screen-users:after,.fa-duotone.fa-users-class:after,.fad.fa-screen-users:after,.fad.fa-users-class:after{content:"\f63d\f63d"}.fa-duotone.fa-screencast:after,.fad.fa-screencast:after{content:"\e23e\e23e"}.fa-duotone.fa-screwdriver:after,.fad.fa-screwdriver:after{content:"\f54a\f54a"}.fa-duotone.fa-screwdriver-wrench:after,.fa-duotone.fa-tools:after,.fad.fa-screwdriver-wrench:after,.fad.fa-tools:after{content:"\f7d9\f7d9"}.fa-duotone.fa-scribble:after,.fad.fa-scribble:after{content:"\e23f\e23f"}.fa-duotone.fa-scroll:after,.fad.fa-scroll:after{content:"\f70e\f70e"}.fa-duotone.fa-scroll-old:after,.fad.fa-scroll-old:after{content:"\f70f\f70f"}.fa-duotone.fa-scroll-torah:after,.fa-duotone.fa-torah:after,.fad.fa-scroll-torah:after,.fad.fa-torah:after{content:"\f6a0\f6a0"}.fa-duotone.fa-scrubber:after,.fad.fa-scrubber:after{content:"\f2f8\f2f8"}.fa-duotone.fa-scythe:after,.fad.fa-scythe:after{content:"\f710\f710"}.fa-duotone.fa-sd-card:after,.fad.fa-sd-card:after{content:"\f7c2\f7c2"}.fa-duotone.fa-sd-cards:after,.fad.fa-sd-cards:after{content:"\e240\e240"}.fa-duotone.fa-seal:after,.fad.fa-seal:after{content:"\e241\e241"}.fa-duotone.fa-seal-exclamation:after,.fad.fa-seal-exclamation:after{content:"\e242\e242"}.fa-duotone.fa-seal-question:after,.fad.fa-seal-question:after{content:"\e243\e243"}.fa-duotone.fa-seat-airline:after,.fad.fa-seat-airline:after{content:"\e244\e244"}.fa-duotone.fa-section:after,.fad.fa-section:after{content:"\e447\e447"}.fa-duotone.fa-seedling:after,.fa-duotone.fa-sprout:after,.fad.fa-seedling:after,.fad.fa-sprout:after{content:"\f4d8\f4d8"}.fa-duotone.fa-semicolon:after,.fad.fa-semicolon:after{content:"\3b\3b"}.fa-duotone.fa-send-back:after,.fad.fa-send-back:after{content:"\f87e\f87e"}.fa-duotone.fa-send-backward:after,.fad.fa-send-backward:after{content:"\f87f\f87f"}.fa-duotone.fa-sensor:after,.fad.fa-sensor:after{content:"\e028\e028"}.fa-duotone.fa-sensor-cloud:after,.fa-duotone.fa-sensor-smoke:after,.fad.fa-sensor-cloud:after,.fad.fa-sensor-smoke:after{content:"\e02c\e02c"}.fa-duotone.fa-sensor-fire:after,.fad.fa-sensor-fire:after{content:"\e02a\e02a"}.fa-duotone.fa-sensor-on:after,.fad.fa-sensor-on:after{content:"\e02b\e02b"}.fa-duotone.fa-sensor-alert:after,.fa-duotone.fa-sensor-triangle-exclamation:after,.fad.fa-sensor-alert:after,.fad.fa-sensor-triangle-exclamation:after{content:"\e029\e029"}.fa-duotone.fa-server:after,.fad.fa-server:after{content:"\f233\f233"}.fa-duotone.fa-shapes:after,.fa-duotone.fa-triangle-circle-square:after,.fad.fa-shapes:after,.fad.fa-triangle-circle-square:after{content:"\f61f\f61f"}.fa-duotone.fa-arrow-turn-right:after,.fa-duotone.fa-mail-forward:after,.fa-duotone.fa-share:after,.fad.fa-arrow-turn-right:after,.fad.fa-mail-forward:after,.fad.fa-share:after{content:"\f064\f064"}.fa-duotone.fa-share-all:after,.fad.fa-share-all:after{content:"\f367\f367"}.fa-duotone.fa-share-from-square:after,.fa-duotone.fa-share-square:after,.fad.fa-share-from-square:after,.fad.fa-share-square:after{content:"\f14d\f14d"}.fa-duotone.fa-share-alt:after,.fa-duotone.fa-share-nodes:after,.fad.fa-share-alt:after,.fad.fa-share-nodes:after{content:"\f1e0\f1e0"}.fa-duotone.fa-sheep:after,.fad.fa-sheep:after{content:"\f711\f711"}.fa-duotone.fa-sheet-plastic:after,.fad.fa-sheet-plastic:after{content:"\e571\e571"}.fa-duotone.fa-ils:after,.fa-duotone.fa-shekel-sign:after,.fa-duotone.fa-shekel:after,.fa-duotone.fa-sheqel-sign:after,.fa-duotone.fa-sheqel:after,.fad.fa-ils:after,.fad.fa-shekel-sign:after,.fad.fa-shekel:after,.fad.fa-sheqel-sign:after,.fad.fa-sheqel:after{content:"\f20b\f20b"}.fa-duotone.fa-inventory:after,.fa-duotone.fa-shelves:after,.fad.fa-inventory:after,.fad.fa-shelves:after{content:"\f480\f480"}.fa-duotone.fa-shelves-empty:after,.fad.fa-shelves-empty:after{content:"\e246\e246"}.fa-duotone.fa-shield-blank:after,.fa-duotone.fa-shield:after,.fad.fa-shield-blank:after,.fad.fa-shield:after{content:"\f132\f132"}.fa-duotone.fa-shield-cat:after,.fad.fa-shield-cat:after{content:"\e572\e572"}.fa-duotone.fa-shield-check:after,.fad.fa-shield-check:after{content:"\f2f7\f2f7"}.fa-duotone.fa-shield-cross:after,.fad.fa-shield-cross:after{content:"\f712\f712"}.fa-duotone.fa-shield-dog:after,.fad.fa-shield-dog:after{content:"\e573\e573"}.fa-duotone.fa-shield-exclamation:after,.fad.fa-shield-exclamation:after{content:"\e247\e247"}.fa-duotone.fa-shield-alt:after,.fa-duotone.fa-shield-halved:after,.fad.fa-shield-alt:after,.fad.fa-shield-halved:after{content:"\f3ed\f3ed"}.fa-duotone.fa-shield-heart:after,.fad.fa-shield-heart:after{content:"\e574\e574"}.fa-duotone.fa-shield-keyhole:after,.fad.fa-shield-keyhole:after{content:"\e248\e248"}.fa-duotone.fa-shield-minus:after,.fad.fa-shield-minus:after{content:"\e249\e249"}.fa-duotone.fa-shield-plus:after,.fad.fa-shield-plus:after{content:"\e24a\e24a"}.fa-duotone.fa-shield-quartered:after,.fad.fa-shield-quartered:after{content:"\e575\e575"}.fa-duotone.fa-shield-slash:after,.fad.fa-shield-slash:after{content:"\e24b\e24b"}.fa-duotone.fa-shield-virus:after,.fad.fa-shield-virus:after{content:"\e06c\e06c"}.fa-duotone.fa-shield-times:after,.fa-duotone.fa-shield-xmark:after,.fad.fa-shield-times:after,.fad.fa-shield-xmark:after{content:"\e24c\e24c"}.fa-duotone.fa-ship:after,.fad.fa-ship:after{content:"\f21a\f21a"}.fa-duotone.fa-shirt:after,.fa-duotone.fa-t-shirt:after,.fa-duotone.fa-tshirt:after,.fad.fa-shirt:after,.fad.fa-t-shirt:after,.fad.fa-tshirt:after{content:"\f553\f553"}.fa-duotone.fa-shirt-long-sleeve:after,.fad.fa-shirt-long-sleeve:after{content:"\e3c7\e3c7"}.fa-duotone.fa-shirt-running:after,.fad.fa-shirt-running:after{content:"\e3c8\e3c8"}.fa-duotone.fa-shirt-tank-top:after,.fad.fa-shirt-tank-top:after{content:"\e3c9\e3c9"}.fa-duotone.fa-shish-kebab:after,.fad.fa-shish-kebab:after{content:"\f821\f821"}.fa-duotone.fa-shoe-prints:after,.fad.fa-shoe-prints:after{content:"\f54b\f54b"}.fa-duotone.fa-shop:after,.fa-duotone.fa-store-alt:after,.fad.fa-shop:after,.fad.fa-store-alt:after{content:"\f54f\f54f"}.fa-duotone.fa-shop-lock:after,.fad.fa-shop-lock:after{content:"\e4a5\e4a5"}.fa-duotone.fa-shop-slash:after,.fa-duotone.fa-store-alt-slash:after,.fad.fa-shop-slash:after,.fad.fa-store-alt-slash:after{content:"\e070\e070"}.fa-duotone.fa-shovel:after,.fad.fa-shovel:after{content:"\f713\f713"}.fa-duotone.fa-shovel-snow:after,.fad.fa-shovel-snow:after{content:"\f7c3\f7c3"}.fa-duotone.fa-shower:after,.fad.fa-shower:after{content:"\f2cc\f2cc"}.fa-duotone.fa-shower-alt:after,.fa-duotone.fa-shower-down:after,.fad.fa-shower-alt:after,.fad.fa-shower-down:after{content:"\e24d\e24d"}.fa-duotone.fa-shredder:after,.fad.fa-shredder:after{content:"\f68a\f68a"}.fa-duotone.fa-shrimp:after,.fad.fa-shrimp:after{content:"\e448\e448"}.fa-duotone.fa-random:after,.fa-duotone.fa-shuffle:after,.fad.fa-random:after,.fad.fa-shuffle:after{content:"\f074\f074"}.fa-duotone.fa-shutters:after,.fad.fa-shutters:after{content:"\e449\e449"}.fa-duotone.fa-shuttle-space:after,.fa-duotone.fa-space-shuttle:after,.fad.fa-shuttle-space:after,.fad.fa-space-shuttle:after{content:"\f197\f197"}.fa-duotone.fa-shuttlecock:after,.fad.fa-shuttlecock:after{content:"\f45b\f45b"}.fa-duotone.fa-sickle:after,.fad.fa-sickle:after{content:"\f822\f822"}.fa-duotone.fa-sidebar:after,.fad.fa-sidebar:after{content:"\e24e\e24e"}.fa-duotone.fa-sidebar-flip:after,.fad.fa-sidebar-flip:after{content:"\e24f\e24f"}.fa-duotone.fa-sigma:after,.fad.fa-sigma:after{content:"\f68b\f68b"}.fa-duotone.fa-sign-hanging:after,.fa-duotone.fa-sign:after,.fad.fa-sign-hanging:after,.fad.fa-sign:after{content:"\f4d9\f4d9"}.fa-duotone.fa-signal-5:after,.fa-duotone.fa-signal-perfect:after,.fa-duotone.fa-signal:after,.fad.fa-signal-5:after,.fad.fa-signal-perfect:after,.fad.fa-signal:after{content:"\f012\f012"}.fa-duotone.fa-signal-alt-4:after,.fa-duotone.fa-signal-alt:after,.fa-duotone.fa-signal-bars-strong:after,.fa-duotone.fa-signal-bars:after,.fad.fa-signal-alt-4:after,.fad.fa-signal-alt:after,.fad.fa-signal-bars-strong:after,.fad.fa-signal-bars:after{content:"\f690\f690"}.fa-duotone.fa-signal-alt-2:after,.fa-duotone.fa-signal-bars-fair:after,.fad.fa-signal-alt-2:after,.fad.fa-signal-bars-fair:after{content:"\f692\f692"}.fa-duotone.fa-signal-alt-3:after,.fa-duotone.fa-signal-bars-good:after,.fad.fa-signal-alt-3:after,.fad.fa-signal-bars-good:after{content:"\f693\f693"}.fa-duotone.fa-signal-alt-slash:after,.fa-duotone.fa-signal-bars-slash:after,.fad.fa-signal-alt-slash:after,.fad.fa-signal-bars-slash:after{content:"\f694\f694"}.fa-duotone.fa-signal-alt-1:after,.fa-duotone.fa-signal-bars-weak:after,.fad.fa-signal-alt-1:after,.fad.fa-signal-bars-weak:after{content:"\f691\f691"}.fa-duotone.fa-signal-2:after,.fa-duotone.fa-signal-fair:after,.fad.fa-signal-2:after,.fad.fa-signal-fair:after{content:"\f68d\f68d"}.fa-duotone.fa-signal-3:after,.fa-duotone.fa-signal-good:after,.fad.fa-signal-3:after,.fad.fa-signal-good:after{content:"\f68e\f68e"}.fa-duotone.fa-signal-slash:after,.fad.fa-signal-slash:after{content:"\f695\f695"}.fa-duotone.fa-signal-stream:after,.fad.fa-signal-stream:after{content:"\f8dd\f8dd"}.fa-duotone.fa-signal-stream-slash:after,.fad.fa-signal-stream-slash:after{content:"\e250\e250"}.fa-duotone.fa-signal-4:after,.fa-duotone.fa-signal-strong:after,.fad.fa-signal-4:after,.fad.fa-signal-strong:after{content:"\f68f\f68f"}.fa-duotone.fa-signal-1:after,.fa-duotone.fa-signal-weak:after,.fad.fa-signal-1:after,.fad.fa-signal-weak:after{content:"\f68c\f68c"}.fa-duotone.fa-signature:after,.fad.fa-signature:after{content:"\f5b7\f5b7"}.fa-duotone.fa-signature-lock:after,.fad.fa-signature-lock:after{content:"\e3ca\e3ca"}.fa-duotone.fa-signature-slash:after,.fad.fa-signature-slash:after{content:"\e3cb\e3cb"}.fa-duotone.fa-map-signs:after,.fa-duotone.fa-signs-post:after,.fad.fa-map-signs:after,.fad.fa-signs-post:after{content:"\f277\f277"}.fa-duotone.fa-sim-card:after,.fad.fa-sim-card:after{content:"\f7c4\f7c4"}.fa-duotone.fa-sim-cards:after,.fad.fa-sim-cards:after{content:"\e251\e251"}.fa-duotone.fa-sink:after,.fad.fa-sink:after{content:"\e06d\e06d"}.fa-duotone.fa-siren:after,.fad.fa-siren:after{content:"\e02d\e02d"}.fa-duotone.fa-siren-on:after,.fad.fa-siren-on:after{content:"\e02e\e02e"}.fa-duotone.fa-sitemap:after,.fad.fa-sitemap:after{content:"\f0e8\f0e8"}.fa-duotone.fa-skeleton:after,.fad.fa-skeleton:after{content:"\f620\f620"}.fa-duotone.fa-ski-boot:after,.fad.fa-ski-boot:after{content:"\e3cc\e3cc"}.fa-duotone.fa-ski-boot-ski:after,.fad.fa-ski-boot-ski:after{content:"\e3cd\e3cd"}.fa-duotone.fa-skull:after,.fad.fa-skull:after{content:"\f54c\f54c"}.fa-duotone.fa-skull-cow:after,.fad.fa-skull-cow:after{content:"\f8de\f8de"}.fa-duotone.fa-skull-crossbones:after,.fad.fa-skull-crossbones:after{content:"\f714\f714"}.fa-duotone.fa-slash:after,.fad.fa-slash:after{content:"\f715\f715"}.fa-duotone.fa-slash-back:after,.fad.fa-slash-back:after{content:"\5c\5c"}.fa-duotone.fa-slash-forward:after,.fad.fa-slash-forward:after{content:"\2f\2f"}.fa-duotone.fa-sleigh:after,.fad.fa-sleigh:after{content:"\f7cc\f7cc"}.fa-duotone.fa-slider:after,.fad.fa-slider:after{content:"\e252\e252"}.fa-duotone.fa-sliders-h:after,.fa-duotone.fa-sliders:after,.fad.fa-sliders-h:after,.fad.fa-sliders:after{content:"\f1de\f1de"}.fa-duotone.fa-sliders-simple:after,.fad.fa-sliders-simple:after{content:"\e253\e253"}.fa-duotone.fa-sliders-up:after,.fa-duotone.fa-sliders-v:after,.fad.fa-sliders-up:after,.fad.fa-sliders-v:after{content:"\f3f1\f3f1"}.fa-duotone.fa-slot-machine:after,.fad.fa-slot-machine:after{content:"\e3ce\e3ce"}.fa-duotone.fa-smog:after,.fad.fa-smog:after{content:"\f75f\f75f"}.fa-duotone.fa-smoke:after,.fad.fa-smoke:after{content:"\f760\f760"}.fa-duotone.fa-smoking:after,.fad.fa-smoking:after{content:"\f48d\f48d"}.fa-duotone.fa-snake:after,.fad.fa-snake:after{content:"\f716\f716"}.fa-duotone.fa-snooze:after,.fa-duotone.fa-zzz:after,.fad.fa-snooze:after,.fad.fa-zzz:after{content:"\f880\f880"}.fa-duotone.fa-snow-blowing:after,.fad.fa-snow-blowing:after{content:"\f761\f761"}.fa-duotone.fa-snowflake:after,.fad.fa-snowflake:after{content:"\f2dc\f2dc"}.fa-duotone.fa-snowflakes:after,.fad.fa-snowflakes:after{content:"\f7cf\f7cf"}.fa-duotone.fa-snowman:after,.fad.fa-snowman:after{content:"\f7d0\f7d0"}.fa-duotone.fa-frosty-head:after,.fa-duotone.fa-snowman-head:after,.fad.fa-frosty-head:after,.fad.fa-snowman-head:after{content:"\f79b\f79b"}.fa-duotone.fa-snowplow:after,.fad.fa-snowplow:after{content:"\f7d2\f7d2"}.fa-duotone.fa-soap:after,.fad.fa-soap:after{content:"\e06e\e06e"}.fa-duotone.fa-socks:after,.fad.fa-socks:after{content:"\f696\f696"}.fa-duotone.fa-creemee:after,.fa-duotone.fa-soft-serve:after,.fad.fa-creemee:after,.fad.fa-soft-serve:after{content:"\e400\e400"}.fa-duotone.fa-solar-panel:after,.fad.fa-solar-panel:after{content:"\f5ba\f5ba"}.fa-duotone.fa-solar-system:after,.fad.fa-solar-system:after{content:"\e02f\e02f"}.fa-duotone.fa-sort:after,.fa-duotone.fa-unsorted:after,.fad.fa-sort:after,.fad.fa-unsorted:after{content:"\f0dc\f0dc"}.fa-duotone.fa-sort-desc:after,.fa-duotone.fa-sort-down:after,.fad.fa-sort-desc:after,.fad.fa-sort-down:after{content:"\f0dd\f0dd"}.fa-duotone.fa-sort-asc:after,.fa-duotone.fa-sort-up:after,.fad.fa-sort-asc:after,.fad.fa-sort-up:after{content:"\f0de\f0de"}.fa-duotone.fa-spa:after,.fad.fa-spa:after{content:"\f5bb\f5bb"}.fa-duotone.fa-space-station-moon:after,.fad.fa-space-station-moon:after{content:"\e033\e033"}.fa-duotone.fa-space-station-moon-alt:after,.fa-duotone.fa-space-station-moon-construction:after,.fad.fa-space-station-moon-alt:after,.fad.fa-space-station-moon-construction:after{content:"\e034\e034"}.fa-duotone.fa-spade:after,.fad.fa-spade:after{content:"\f2f4\f2f4"}.fa-duotone.fa-pastafarianism:after,.fa-duotone.fa-spaghetti-monster-flying:after,.fad.fa-pastafarianism:after,.fad.fa-spaghetti-monster-flying:after{content:"\f67b\f67b"}.fa-duotone.fa-sparkles:after,.fad.fa-sparkles:after{content:"\f890\f890"}.fa-duotone.fa-speaker:after,.fad.fa-speaker:after{content:"\f8df\f8df"}.fa-duotone.fa-speakers:after,.fad.fa-speakers:after{content:"\f8e0\f8e0"}.fa-duotone.fa-spell-check:after,.fad.fa-spell-check:after{content:"\f891\f891"}.fa-duotone.fa-spider:after,.fad.fa-spider:after{content:"\f717\f717"}.fa-duotone.fa-spider-black-widow:after,.fad.fa-spider-black-widow:after{content:"\f718\f718"}.fa-duotone.fa-spider-web:after,.fad.fa-spider-web:after{content:"\f719\f719"}.fa-duotone.fa-spinner:after,.fad.fa-spinner:after{content:"\f110\f110"}.fa-duotone.fa-spinner-third:after,.fad.fa-spinner-third:after{content:"\f3f4\f3f4"}.fa-duotone.fa-split:after,.fad.fa-split:after{content:"\e254\e254"}.fa-duotone.fa-splotch:after,.fad.fa-splotch:after{content:"\f5bc\f5bc"}.fa-duotone.fa-spoon:after,.fa-duotone.fa-utensil-spoon:after,.fad.fa-spoon:after,.fad.fa-utensil-spoon:after{content:"\f2e5\f2e5"}.fa-duotone.fa-sportsball:after,.fad.fa-sportsball:after{content:"\e44b\e44b"}.fa-duotone.fa-spray-can:after,.fad.fa-spray-can:after{content:"\f5bd\f5bd"}.fa-duotone.fa-air-freshener:after,.fa-duotone.fa-spray-can-sparkles:after,.fad.fa-air-freshener:after,.fad.fa-spray-can-sparkles:after{content:"\f5d0\f5d0"}.fa-duotone.fa-sprinkler:after,.fad.fa-sprinkler:after{content:"\e035\e035"}.fa-duotone.fa-sprinkler-ceiling:after,.fad.fa-sprinkler-ceiling:after{content:"\e44c\e44c"}.fa-duotone.fa-square:after,.fad.fa-square:after{content:"\f0c8\f0c8"}.fa-duotone.fa-square-0:after,.fad.fa-square-0:after{content:"\e255\e255"}.fa-duotone.fa-square-1:after,.fad.fa-square-1:after{content:"\e256\e256"}.fa-duotone.fa-square-2:after,.fad.fa-square-2:after{content:"\e257\e257"}.fa-duotone.fa-square-3:after,.fad.fa-square-3:after{content:"\e258\e258"}.fa-duotone.fa-square-4:after,.fad.fa-square-4:after{content:"\e259\e259"}.fa-duotone.fa-square-5:after,.fad.fa-square-5:after{content:"\e25a\e25a"}.fa-duotone.fa-square-6:after,.fad.fa-square-6:after{content:"\e25b\e25b"}.fa-duotone.fa-square-7:after,.fad.fa-square-7:after{content:"\e25c\e25c"}.fa-duotone.fa-square-8:after,.fad.fa-square-8:after{content:"\e25d\e25d"}.fa-duotone.fa-square-9:after,.fad.fa-square-9:after{content:"\e25e\e25e"}.fa-duotone.fa-square-a:after,.fad.fa-square-a:after{content:"\e25f\e25f"}.fa-duotone.fa-square-a-lock:after,.fad.fa-square-a-lock:after{content:"\e44d\e44d"}.fa-duotone.fa-square-ampersand:after,.fad.fa-square-ampersand:after{content:"\e260\e260"}.fa-duotone.fa-arrow-square-down:after,.fa-duotone.fa-square-arrow-down:after,.fad.fa-arrow-square-down:after,.fad.fa-square-arrow-down:after{content:"\f339\f339"}.fa-duotone.fa-square-arrow-down-left:after,.fad.fa-square-arrow-down-left:after{content:"\e261\e261"}.fa-duotone.fa-square-arrow-down-right:after,.fad.fa-square-arrow-down-right:after{content:"\e262\e262"}.fa-duotone.fa-arrow-square-left:after,.fa-duotone.fa-square-arrow-left:after,.fad.fa-arrow-square-left:after,.fad.fa-square-arrow-left:after{content:"\f33a\f33a"}.fa-duotone.fa-arrow-square-right:after,.fa-duotone.fa-square-arrow-right:after,.fad.fa-arrow-square-right:after,.fad.fa-square-arrow-right:after{content:"\f33b\f33b"}.fa-duotone.fa-arrow-square-up:after,.fa-duotone.fa-square-arrow-up:after,.fad.fa-arrow-square-up:after,.fad.fa-square-arrow-up:after{content:"\f33c\f33c"}.fa-duotone.fa-square-arrow-up-left:after,.fad.fa-square-arrow-up-left:after{content:"\e263\e263"}.fa-duotone.fa-external-link-square:after,.fa-duotone.fa-square-arrow-up-right:after,.fad.fa-external-link-square:after,.fad.fa-square-arrow-up-right:after{content:"\f14c\f14c"}.fa-duotone.fa-square-b:after,.fad.fa-square-b:after{content:"\e264\e264"}.fa-duotone.fa-square-bolt:after,.fad.fa-square-bolt:after{content:"\e265\e265"}.fa-duotone.fa-square-c:after,.fad.fa-square-c:after{content:"\e266\e266"}.fa-duotone.fa-caret-square-down:after,.fa-duotone.fa-square-caret-down:after,.fad.fa-caret-square-down:after,.fad.fa-square-caret-down:after{content:"\f150\f150"}.fa-duotone.fa-caret-square-left:after,.fa-duotone.fa-square-caret-left:after,.fad.fa-caret-square-left:after,.fad.fa-square-caret-left:after{content:"\f191\f191"}.fa-duotone.fa-caret-square-right:after,.fa-duotone.fa-square-caret-right:after,.fad.fa-caret-square-right:after,.fad.fa-square-caret-right:after{content:"\f152\f152"}.fa-duotone.fa-caret-square-up:after,.fa-duotone.fa-square-caret-up:after,.fad.fa-caret-square-up:after,.fad.fa-square-caret-up:after{content:"\f151\f151"}.fa-duotone.fa-check-square:after,.fa-duotone.fa-square-check:after,.fad.fa-check-square:after,.fad.fa-square-check:after{content:"\f14a\f14a"}.fa-duotone.fa-chevron-square-down:after,.fa-duotone.fa-square-chevron-down:after,.fad.fa-chevron-square-down:after,.fad.fa-square-chevron-down:after{content:"\f329\f329"}.fa-duotone.fa-chevron-square-left:after,.fa-duotone.fa-square-chevron-left:after,.fad.fa-chevron-square-left:after,.fad.fa-square-chevron-left:after{content:"\f32a\f32a"}.fa-duotone.fa-chevron-square-right:after,.fa-duotone.fa-square-chevron-right:after,.fad.fa-chevron-square-right:after,.fad.fa-square-chevron-right:after{content:"\f32b\f32b"}.fa-duotone.fa-chevron-square-up:after,.fa-duotone.fa-square-chevron-up:after,.fad.fa-chevron-square-up:after,.fad.fa-square-chevron-up:after{content:"\f32c\f32c"}.fa-duotone.fa-square-code:after,.fad.fa-square-code:after{content:"\e267\e267"}.fa-duotone.fa-square-d:after,.fad.fa-square-d:after{content:"\e268\e268"}.fa-duotone.fa-square-dashed:after,.fad.fa-square-dashed:after{content:"\e269\e269"}.fa-duotone.fa-square-divide:after,.fad.fa-square-divide:after{content:"\e26a\e26a"}.fa-duotone.fa-dollar-square:after,.fa-duotone.fa-square-dollar:after,.fa-duotone.fa-usd-square:after,.fad.fa-dollar-square:after,.fad.fa-square-dollar:after,.fad.fa-usd-square:after{content:"\f2e9\f2e9"}.fa-duotone.fa-arrow-alt-square-down:after,.fa-duotone.fa-square-down:after,.fad.fa-arrow-alt-square-down:after,.fad.fa-square-down:after{content:"\f350\f350"}.fa-duotone.fa-square-down-left:after,.fad.fa-square-down-left:after{content:"\e26b\e26b"}.fa-duotone.fa-square-down-right:after,.fad.fa-square-down-right:after{content:"\e26c\e26c"}.fa-duotone.fa-square-e:after,.fad.fa-square-e:after{content:"\e26d\e26d"}.fa-duotone.fa-square-ellipsis:after,.fad.fa-square-ellipsis:after{content:"\e26e\e26e"}.fa-duotone.fa-square-ellipsis-vertical:after,.fad.fa-square-ellipsis-vertical:after{content:"\e26f\e26f"}.fa-duotone.fa-envelope-square:after,.fa-duotone.fa-square-envelope:after,.fad.fa-envelope-square:after,.fad.fa-square-envelope:after{content:"\f199\f199"}.fa-duotone.fa-exclamation-square:after,.fa-duotone.fa-square-exclamation:after,.fad.fa-exclamation-square:after,.fad.fa-square-exclamation:after{content:"\f321\f321"}.fa-duotone.fa-square-f:after,.fad.fa-square-f:after{content:"\e270\e270"}.fa-duotone.fa-box-fragile:after,.fa-duotone.fa-square-fragile:after,.fa-duotone.fa-square-wine-glass-crack:after,.fad.fa-box-fragile:after,.fad.fa-square-fragile:after,.fad.fa-square-wine-glass-crack:after{content:"\f49b\f49b"}.fa-duotone.fa-square-full:after,.fad.fa-square-full:after{content:"\f45c\f45c"}.fa-duotone.fa-square-g:after,.fad.fa-square-g:after{content:"\e271\e271"}.fa-duotone.fa-h-square:after,.fa-duotone.fa-square-h:after,.fad.fa-h-square:after,.fad.fa-square-h:after{content:"\f0fd\f0fd"}.fa-duotone.fa-heart-square:after,.fa-duotone.fa-square-heart:after,.fad.fa-heart-square:after,.fad.fa-square-heart:after{content:"\f4c8\f4c8"}.fa-duotone.fa-square-i:after,.fad.fa-square-i:after{content:"\e272\e272"}.fa-duotone.fa-info-square:after,.fa-duotone.fa-square-info:after,.fad.fa-info-square:after,.fad.fa-square-info:after{content:"\f30f\f30f"}.fa-duotone.fa-square-j:after,.fad.fa-square-j:after{content:"\e273\e273"}.fa-duotone.fa-square-k:after,.fad.fa-square-k:after{content:"\e274\e274"}.fa-duotone.fa-square-kanban:after,.fad.fa-square-kanban:after{content:"\e488\e488"}.fa-duotone.fa-square-l:after,.fad.fa-square-l:after{content:"\e275\e275"}.fa-duotone.fa-arrow-alt-square-left:after,.fa-duotone.fa-square-left:after,.fad.fa-arrow-alt-square-left:after,.fad.fa-square-left:after{content:"\f351\f351"}.fa-duotone.fa-square-list:after,.fad.fa-square-list:after{content:"\e489\e489"}.fa-duotone.fa-square-m:after,.fad.fa-square-m:after{content:"\e276\e276"}.fa-duotone.fa-minus-square:after,.fa-duotone.fa-square-minus:after,.fad.fa-minus-square:after,.fad.fa-square-minus:after{content:"\f146\f146"}.fa-duotone.fa-square-n:after,.fad.fa-square-n:after{content:"\e277\e277"}.fa-duotone.fa-square-nfi:after,.fad.fa-square-nfi:after{content:"\e576\e576"}.fa-duotone.fa-square-o:after,.fad.fa-square-o:after{content:"\e278\e278"}.fa-duotone.fa-square-p:after,.fad.fa-square-p:after{content:"\e279\e279"}.fa-duotone.fa-parking:after,.fa-duotone.fa-square-parking:after,.fad.fa-parking:after,.fad.fa-square-parking:after{content:"\f540\f540"}.fa-duotone.fa-parking-slash:after,.fa-duotone.fa-square-parking-slash:after,.fad.fa-parking-slash:after,.fad.fa-square-parking-slash:after{content:"\f617\f617"}.fa-duotone.fa-pen-square:after,.fa-duotone.fa-pencil-square:after,.fa-duotone.fa-square-pen:after,.fad.fa-pen-square:after,.fad.fa-pencil-square:after,.fad.fa-square-pen:after{content:"\f14b\f14b"}.fa-duotone.fa-square-person-confined:after,.fad.fa-square-person-confined:after{content:"\e577\e577"}.fa-duotone.fa-phone-square:after,.fa-duotone.fa-square-phone:after,.fad.fa-phone-square:after,.fad.fa-square-phone:after{content:"\f098\f098"}.fa-duotone.fa-phone-square-alt:after,.fa-duotone.fa-square-phone-flip:after,.fad.fa-phone-square-alt:after,.fad.fa-square-phone-flip:after{content:"\f87b\f87b"}.fa-duotone.fa-phone-square-down:after,.fa-duotone.fa-square-phone-hangup:after,.fad.fa-phone-square-down:after,.fad.fa-square-phone-hangup:after{content:"\e27a\e27a"}.fa-duotone.fa-plus-square:after,.fa-duotone.fa-square-plus:after,.fad.fa-plus-square:after,.fad.fa-square-plus:after{content:"\f0fe\f0fe"}.fa-duotone.fa-poll-h:after,.fa-duotone.fa-square-poll-horizontal:after,.fad.fa-poll-h:after,.fad.fa-square-poll-horizontal:after{content:"\f682\f682"}.fa-duotone.fa-poll:after,.fa-duotone.fa-square-poll-vertical:after,.fad.fa-poll:after,.fad.fa-square-poll-vertical:after{content:"\f681\f681"}.fa-duotone.fa-square-q:after,.fad.fa-square-q:after{content:"\e27b\e27b"}.fa-duotone.fa-square-quarters:after,.fad.fa-square-quarters:after{content:"\e44e\e44e"}.fa-duotone.fa-question-square:after,.fa-duotone.fa-square-question:after,.fad.fa-question-square:after,.fad.fa-square-question:after{content:"\f2fd\f2fd"}.fa-duotone.fa-square-quote:after,.fad.fa-square-quote:after{content:"\e329\e329"}.fa-duotone.fa-square-r:after,.fad.fa-square-r:after{content:"\e27c\e27c"}.fa-duotone.fa-arrow-alt-square-right:after,.fa-duotone.fa-square-right:after,.fad.fa-arrow-alt-square-right:after,.fad.fa-square-right:after{content:"\f352\f352"}.fa-duotone.fa-square-ring:after,.fad.fa-square-ring:after{content:"\e44f\e44f"}.fa-duotone.fa-square-root:after,.fad.fa-square-root:after{content:"\f697\f697"}.fa-duotone.fa-square-root-alt:after,.fa-duotone.fa-square-root-variable:after,.fad.fa-square-root-alt:after,.fad.fa-square-root-variable:after{content:"\f698\f698"}.fa-duotone.fa-rss-square:after,.fa-duotone.fa-square-rss:after,.fad.fa-rss-square:after,.fad.fa-square-rss:after{content:"\f143\f143"}.fa-duotone.fa-square-s:after,.fad.fa-square-s:after{content:"\e27d\e27d"}.fa-duotone.fa-share-alt-square:after,.fa-duotone.fa-square-share-nodes:after,.fad.fa-share-alt-square:after,.fad.fa-square-share-nodes:after{content:"\f1e1\f1e1"}.fa-duotone.fa-sliders-h-square:after,.fa-duotone.fa-square-sliders:after,.fad.fa-sliders-h-square:after,.fad.fa-square-sliders:after{content:"\f3f0\f3f0"}.fa-duotone.fa-sliders-v-square:after,.fa-duotone.fa-square-sliders-vertical:after,.fad.fa-sliders-v-square:after,.fad.fa-square-sliders-vertical:after{content:"\f3f2\f3f2"}.fa-duotone.fa-square-small:after,.fad.fa-square-small:after{content:"\e27e\e27e"}.fa-duotone.fa-square-star:after,.fad.fa-square-star:after{content:"\e27f\e27f"}.fa-duotone.fa-square-t:after,.fad.fa-square-t:after{content:"\e280\e280"}.fa-duotone.fa-square-terminal:after,.fad.fa-square-terminal:after{content:"\e32a\e32a"}.fa-duotone.fa-box-up:after,.fa-duotone.fa-square-this-way-up:after,.fad.fa-box-up:after,.fad.fa-square-this-way-up:after{content:"\f49f\f49f"}.fa-duotone.fa-square-u:after,.fad.fa-square-u:after{content:"\e281\e281"}.fa-duotone.fa-arrow-alt-square-up:after,.fa-duotone.fa-square-up:after,.fad.fa-arrow-alt-square-up:after,.fad.fa-square-up:after{content:"\f353\f353"}.fa-duotone.fa-square-up-left:after,.fad.fa-square-up-left:after{content:"\e282\e282"}.fa-duotone.fa-external-link-square-alt:after,.fa-duotone.fa-square-up-right:after,.fad.fa-external-link-square-alt:after,.fad.fa-square-up-right:after{content:"\f360\f360"}.fa-duotone.fa-square-user:after,.fad.fa-square-user:after{content:"\e283\e283"}.fa-duotone.fa-square-v:after,.fad.fa-square-v:after{content:"\e284\e284"}.fa-duotone.fa-square-virus:after,.fad.fa-square-virus:after{content:"\e578\e578"}.fa-duotone.fa-square-w:after,.fad.fa-square-w:after{content:"\e285\e285"}.fa-duotone.fa-square-x:after,.fad.fa-square-x:after{content:"\e286\e286"}.fa-duotone.fa-square-xmark:after,.fa-duotone.fa-times-square:after,.fa-duotone.fa-xmark-square:after,.fad.fa-square-xmark:after,.fad.fa-times-square:after,.fad.fa-xmark-square:after{content:"\f2d3\f2d3"}.fa-duotone.fa-square-y:after,.fad.fa-square-y:after{content:"\e287\e287"}.fa-duotone.fa-square-z:after,.fad.fa-square-z:after{content:"\e288\e288"}.fa-duotone.fa-squid:after,.fad.fa-squid:after{content:"\e450\e450"}.fa-duotone.fa-squirrel:after,.fad.fa-squirrel:after{content:"\f71a\f71a"}.fa-duotone.fa-staff:after,.fad.fa-staff:after{content:"\f71b\f71b"}.fa-duotone.fa-rod-asclepius:after,.fa-duotone.fa-rod-snake:after,.fa-duotone.fa-staff-aesculapius:after,.fa-duotone.fa-staff-snake:after,.fad.fa-rod-asclepius:after,.fad.fa-rod-snake:after,.fad.fa-staff-aesculapius:after,.fad.fa-staff-snake:after{content:"\e579\e579"}.fa-duotone.fa-stairs:after,.fad.fa-stairs:after{content:"\e289\e289"}.fa-duotone.fa-stamp:after,.fad.fa-stamp:after{content:"\f5bf\f5bf"}.fa-duotone.fa-rectangle-sd:after,.fa-duotone.fa-standard-definition:after,.fad.fa-rectangle-sd:after,.fad.fa-standard-definition:after{content:"\e28a\e28a"}.fa-duotone.fa-stapler:after,.fad.fa-stapler:after{content:"\e5af\e5af"}.fa-duotone.fa-star:after,.fad.fa-star:after{content:"\f005\f005"}.fa-duotone.fa-star-and-crescent:after,.fad.fa-star-and-crescent:after{content:"\f699\f699"}.fa-duotone.fa-star-christmas:after,.fad.fa-star-christmas:after{content:"\f7d4\f7d4"}.fa-duotone.fa-star-exclamation:after,.fad.fa-star-exclamation:after{content:"\f2f3\f2f3"}.fa-duotone.fa-star-half:after,.fad.fa-star-half:after{content:"\f089\f089"}.fa-duotone.fa-star-half-alt:after,.fa-duotone.fa-star-half-stroke:after,.fad.fa-star-half-alt:after,.fad.fa-star-half-stroke:after{content:"\f5c0\f5c0"}.fa-duotone.fa-star-of-david:after,.fad.fa-star-of-david:after{content:"\f69a\f69a"}.fa-duotone.fa-star-of-life:after,.fad.fa-star-of-life:after{content:"\f621\f621"}.fa-duotone.fa-star-sharp:after,.fad.fa-star-sharp:after{content:"\e28b\e28b"}.fa-duotone.fa-star-sharp-half:after,.fad.fa-star-sharp-half:after{content:"\e28c\e28c"}.fa-duotone.fa-star-sharp-half-alt:after,.fa-duotone.fa-star-sharp-half-stroke:after,.fad.fa-star-sharp-half-alt:after,.fad.fa-star-sharp-half-stroke:after{content:"\e28d\e28d"}.fa-duotone.fa-star-shooting:after,.fad.fa-star-shooting:after{content:"\e036\e036"}.fa-duotone.fa-starfighter:after,.fad.fa-starfighter:after{content:"\e037\e037"}.fa-duotone.fa-starfighter-alt:after,.fa-duotone.fa-starfighter-twin-ion-engine:after,.fad.fa-starfighter-alt:after,.fad.fa-starfighter-twin-ion-engine:after{content:"\e038\e038"}.fa-duotone.fa-starfighter-alt-advanced:after,.fa-duotone.fa-starfighter-twin-ion-engine-advanced:after,.fad.fa-starfighter-alt-advanced:after,.fad.fa-starfighter-twin-ion-engine-advanced:after{content:"\e28e\e28e"}.fa-duotone.fa-stars:after,.fad.fa-stars:after{content:"\f762\f762"}.fa-duotone.fa-starship:after,.fad.fa-starship:after{content:"\e039\e039"}.fa-duotone.fa-starship-freighter:after,.fad.fa-starship-freighter:after{content:"\e03a\e03a"}.fa-duotone.fa-steak:after,.fad.fa-steak:after{content:"\f824\f824"}.fa-duotone.fa-steering-wheel:after,.fad.fa-steering-wheel:after{content:"\f622\f622"}.fa-duotone.fa-gbp:after,.fa-duotone.fa-pound-sign:after,.fa-duotone.fa-sterling-sign:after,.fad.fa-gbp:after,.fad.fa-pound-sign:after,.fad.fa-sterling-sign:after{content:"\f154\f154"}.fa-duotone.fa-stethoscope:after,.fad.fa-stethoscope:after{content:"\f0f1\f0f1"}.fa-duotone.fa-stocking:after,.fad.fa-stocking:after{content:"\f7d5\f7d5"}.fa-duotone.fa-stomach:after,.fad.fa-stomach:after{content:"\f623\f623"}.fa-duotone.fa-stop:after,.fad.fa-stop:after{content:"\f04d\f04d"}.fa-duotone.fa-stopwatch:after,.fad.fa-stopwatch:after{content:"\f2f2\f2f2"}.fa-duotone.fa-stopwatch-20:after,.fad.fa-stopwatch-20:after{content:"\e06f\e06f"}.fa-duotone.fa-store:after,.fad.fa-store:after{content:"\f54e\f54e"}.fa-duotone.fa-store-lock:after,.fad.fa-store-lock:after{content:"\e4a6\e4a6"}.fa-duotone.fa-store-slash:after,.fad.fa-store-slash:after{content:"\e071\e071"}.fa-duotone.fa-strawberry:after,.fad.fa-strawberry:after{content:"\e32b\e32b"}.fa-duotone.fa-street-view:after,.fad.fa-street-view:after{content:"\f21d\f21d"}.fa-duotone.fa-stretcher:after,.fad.fa-stretcher:after{content:"\f825\f825"}.fa-duotone.fa-strikethrough:after,.fad.fa-strikethrough:after{content:"\f0cc\f0cc"}.fa-duotone.fa-stroopwafel:after,.fad.fa-stroopwafel:after{content:"\f551\f551"}.fa-duotone.fa-subscript:after,.fad.fa-subscript:after{content:"\f12c\f12c"}.fa-duotone.fa-suitcase:after,.fad.fa-suitcase:after{content:"\f0f2\f0f2"}.fa-duotone.fa-medkit:after,.fa-duotone.fa-suitcase-medical:after,.fad.fa-medkit:after,.fad.fa-suitcase-medical:after{content:"\f0fa\f0fa"}.fa-duotone.fa-suitcase-rolling:after,.fad.fa-suitcase-rolling:after{content:"\f5c1\f5c1"}.fa-duotone.fa-sun:after,.fad.fa-sun:after{content:"\f185\f185"}.fa-duotone.fa-sun-alt:after,.fa-duotone.fa-sun-bright:after,.fad.fa-sun-alt:after,.fad.fa-sun-bright:after{content:"\e28f\e28f"}.fa-duotone.fa-sun-cloud:after,.fad.fa-sun-cloud:after{content:"\f763\f763"}.fa-duotone.fa-sun-dust:after,.fad.fa-sun-dust:after{content:"\f764\f764"}.fa-duotone.fa-sun-haze:after,.fad.fa-sun-haze:after{content:"\f765\f765"}.fa-duotone.fa-sun-plant-wilt:after,.fad.fa-sun-plant-wilt:after{content:"\e57a\e57a"}.fa-duotone.fa-sunglasses:after,.fad.fa-sunglasses:after{content:"\f892\f892"}.fa-duotone.fa-sunrise:after,.fad.fa-sunrise:after{content:"\f766\f766"}.fa-duotone.fa-sunset:after,.fad.fa-sunset:after{content:"\f767\f767"}.fa-duotone.fa-superscript:after,.fad.fa-superscript:after{content:"\f12b\f12b"}.fa-duotone.fa-nigiri:after,.fa-duotone.fa-sushi:after,.fad.fa-nigiri:after,.fad.fa-sushi:after{content:"\e48a\e48a"}.fa-duotone.fa-maki-roll:after,.fa-duotone.fa-makizushi:after,.fa-duotone.fa-sushi-roll:after,.fad.fa-maki-roll:after,.fad.fa-makizushi:after,.fad.fa-sushi-roll:after{content:"\e48b\e48b"}.fa-duotone.fa-swatchbook:after,.fad.fa-swatchbook:after{content:"\f5c3\f5c3"}.fa-duotone.fa-sword:after,.fad.fa-sword:after{content:"\f71c\f71c"}.fa-duotone.fa-sword-laser:after,.fad.fa-sword-laser:after{content:"\e03b\e03b"}.fa-duotone.fa-sword-laser-alt:after,.fad.fa-sword-laser-alt:after{content:"\e03c\e03c"}.fa-duotone.fa-swords:after,.fad.fa-swords:after{content:"\f71d\f71d"}.fa-duotone.fa-swords-laser:after,.fad.fa-swords-laser:after{content:"\e03d\e03d"}.fa-duotone.fa-icons-alt:after,.fa-duotone.fa-symbols:after,.fad.fa-icons-alt:after,.fad.fa-symbols:after{content:"\f86e\f86e"}.fa-duotone.fa-synagogue:after,.fad.fa-synagogue:after{content:"\f69b\f69b"}.fa-duotone.fa-syringe:after,.fad.fa-syringe:after{content:"\f48e\f48e"}.fa-duotone.fa-t:after,.fad.fa-t:after{content:"\54\54"}.fa-duotone.fa-table:after,.fad.fa-table:after{content:"\f0ce\f0ce"}.fa-duotone.fa-table-cells:after,.fa-duotone.fa-th:after,.fad.fa-table-cells:after,.fad.fa-th:after{content:"\f00a\f00a"}.fa-duotone.fa-table-cells-large:after,.fa-duotone.fa-th-large:after,.fad.fa-table-cells-large:after,.fad.fa-th-large:after{content:"\f009\f009"}.fa-duotone.fa-columns:after,.fa-duotone.fa-table-columns:after,.fad.fa-columns:after,.fad.fa-table-columns:after{content:"\f0db\f0db"}.fa-duotone.fa-table-layout:after,.fad.fa-table-layout:after{content:"\e290\e290"}.fa-duotone.fa-table-list:after,.fa-duotone.fa-th-list:after,.fad.fa-table-list:after,.fad.fa-th-list:after{content:"\f00b\f00b"}.fa-duotone.fa-table-picnic:after,.fad.fa-table-picnic:after{content:"\e32d\e32d"}.fa-duotone.fa-table-pivot:after,.fad.fa-table-pivot:after{content:"\e291\e291"}.fa-duotone.fa-rows:after,.fa-duotone.fa-table-rows:after,.fad.fa-rows:after,.fad.fa-table-rows:after{content:"\e292\e292"}.fa-duotone.fa-ping-pong-paddle-ball:after,.fa-duotone.fa-table-tennis-paddle-ball:after,.fa-duotone.fa-table-tennis:after,.fad.fa-ping-pong-paddle-ball:after,.fad.fa-table-tennis-paddle-ball:after,.fad.fa-table-tennis:after{content:"\f45d\f45d"}.fa-duotone.fa-table-tree:after,.fad.fa-table-tree:after{content:"\e293\e293"}.fa-duotone.fa-tablet-android:after,.fa-duotone.fa-tablet:after,.fad.fa-tablet-android:after,.fad.fa-tablet:after{content:"\f3fb\f3fb"}.fa-duotone.fa-tablet-button:after,.fad.fa-tablet-button:after{content:"\f10a\f10a"}.fa-duotone.fa-tablet-rugged:after,.fad.fa-tablet-rugged:after{content:"\f48f\f48f"}.fa-duotone.fa-tablet-android-alt:after,.fa-duotone.fa-tablet-screen:after,.fad.fa-tablet-android-alt:after,.fad.fa-tablet-screen:after{content:"\f3fc\f3fc"}.fa-duotone.fa-tablet-alt:after,.fa-duotone.fa-tablet-screen-button:after,.fad.fa-tablet-alt:after,.fad.fa-tablet-screen-button:after{content:"\f3fa\f3fa"}.fa-duotone.fa-tablets:after,.fad.fa-tablets:after{content:"\f490\f490"}.fa-duotone.fa-digital-tachograph:after,.fa-duotone.fa-tachograph-digital:after,.fad.fa-digital-tachograph:after,.fad.fa-tachograph-digital:after{content:"\f566\f566"}.fa-duotone.fa-taco:after,.fad.fa-taco:after{content:"\f826\f826"}.fa-duotone.fa-tag:after,.fad.fa-tag:after{content:"\f02b\f02b"}.fa-duotone.fa-tags:after,.fad.fa-tags:after{content:"\f02c\f02c"}.fa-duotone.fa-tally-5:after,.fa-duotone.fa-tally:after,.fad.fa-tally-5:after,.fad.fa-tally:after{content:"\f69c\f69c"}.fa-duotone.fa-tally-1:after,.fad.fa-tally-1:after{content:"\e294\e294"}.fa-duotone.fa-tally-2:after,.fad.fa-tally-2:after{content:"\e295\e295"}.fa-duotone.fa-tally-3:after,.fad.fa-tally-3:after{content:"\e296\e296"}.fa-duotone.fa-tally-4:after,.fad.fa-tally-4:after{content:"\e297\e297"}.fa-duotone.fa-tamale:after,.fad.fa-tamale:after{content:"\e451\e451"}.fa-duotone.fa-tank-water:after,.fad.fa-tank-water:after{content:"\e452\e452"}.fa-duotone.fa-tape:after,.fad.fa-tape:after{content:"\f4db\f4db"}.fa-duotone.fa-tarp:after,.fad.fa-tarp:after{content:"\e57b\e57b"}.fa-duotone.fa-tarp-droplet:after,.fad.fa-tarp-droplet:after{content:"\e57c\e57c"}.fa-duotone.fa-cab:after,.fa-duotone.fa-taxi:after,.fad.fa-cab:after,.fad.fa-taxi:after{content:"\f1ba\f1ba"}.fa-duotone.fa-taxi-bus:after,.fad.fa-taxi-bus:after{content:"\e298\e298"}.fa-duotone.fa-teddy-bear:after,.fad.fa-teddy-bear:after{content:"\e3cf\e3cf"}.fa-duotone.fa-teeth:after,.fad.fa-teeth:after{content:"\f62e\f62e"}.fa-duotone.fa-teeth-open:after,.fad.fa-teeth-open:after{content:"\f62f\f62f"}.fa-duotone.fa-telescope:after,.fad.fa-telescope:after{content:"\e03e\e03e"}.fa-duotone.fa-temperature-arrow-down:after,.fa-duotone.fa-temperature-down:after,.fad.fa-temperature-arrow-down:after,.fad.fa-temperature-down:after{content:"\e03f\e03f"}.fa-duotone.fa-temperature-arrow-up:after,.fa-duotone.fa-temperature-up:after,.fad.fa-temperature-arrow-up:after,.fad.fa-temperature-up:after{content:"\e040\e040"}.fa-duotone.fa-temperature-0:after,.fa-duotone.fa-temperature-empty:after,.fa-duotone.fa-thermometer-0:after,.fa-duotone.fa-thermometer-empty:after,.fad.fa-temperature-0:after,.fad.fa-temperature-empty:after,.fad.fa-thermometer-0:after,.fad.fa-thermometer-empty:after{content:"\f2cb\f2cb"}.fa-duotone.fa-temperature-4:after,.fa-duotone.fa-temperature-full:after,.fa-duotone.fa-thermometer-4:after,.fa-duotone.fa-thermometer-full:after,.fad.fa-temperature-4:after,.fad.fa-temperature-full:after,.fad.fa-thermometer-4:after,.fad.fa-thermometer-full:after{content:"\f2c7\f2c7"}.fa-duotone.fa-temperature-2:after,.fa-duotone.fa-temperature-half:after,.fa-duotone.fa-thermometer-2:after,.fa-duotone.fa-thermometer-half:after,.fad.fa-temperature-2:after,.fad.fa-temperature-half:after,.fad.fa-thermometer-2:after,.fad.fa-thermometer-half:after{content:"\f2c9\f2c9"}.fa-duotone.fa-temperature-high:after,.fad.fa-temperature-high:after{content:"\f769\f769"}.fa-duotone.fa-temperature-list:after,.fad.fa-temperature-list:after{content:"\e299\e299"}.fa-duotone.fa-temperature-low:after,.fad.fa-temperature-low:after{content:"\f76b\f76b"}.fa-duotone.fa-temperature-1:after,.fa-duotone.fa-temperature-quarter:after,.fa-duotone.fa-thermometer-1:after,.fa-duotone.fa-thermometer-quarter:after,.fad.fa-temperature-1:after,.fad.fa-temperature-quarter:after,.fad.fa-thermometer-1:after,.fad.fa-thermometer-quarter:after{content:"\f2ca\f2ca"}.fa-duotone.fa-temperature-frigid:after,.fa-duotone.fa-temperature-snow:after,.fad.fa-temperature-frigid:after,.fad.fa-temperature-snow:after{content:"\f768\f768"}.fa-duotone.fa-temperature-hot:after,.fa-duotone.fa-temperature-sun:after,.fad.fa-temperature-hot:after,.fad.fa-temperature-sun:after{content:"\f76a\f76a"}.fa-duotone.fa-temperature-3:after,.fa-duotone.fa-temperature-three-quarters:after,.fa-duotone.fa-thermometer-3:after,.fa-duotone.fa-thermometer-three-quarters:after,.fad.fa-temperature-3:after,.fad.fa-temperature-three-quarters:after,.fad.fa-thermometer-3:after,.fad.fa-thermometer-three-quarters:after{content:"\f2c8\f2c8"}.fa-duotone.fa-tenge-sign:after,.fa-duotone.fa-tenge:after,.fad.fa-tenge-sign:after,.fad.fa-tenge:after{content:"\f7d7\f7d7"}.fa-duotone.fa-tennis-ball:after,.fad.fa-tennis-ball:after{content:"\f45e\f45e"}.fa-duotone.fa-tent:after,.fad.fa-tent:after{content:"\e57d\e57d"}.fa-duotone.fa-tent-arrow-down-to-line:after,.fad.fa-tent-arrow-down-to-line:after{content:"\e57e\e57e"}.fa-duotone.fa-tent-arrow-left-right:after,.fad.fa-tent-arrow-left-right:after{content:"\e57f\e57f"}.fa-duotone.fa-tent-arrow-turn-left:after,.fad.fa-tent-arrow-turn-left:after{content:"\e580\e580"}.fa-duotone.fa-tent-arrows-down:after,.fad.fa-tent-arrows-down:after{content:"\e581\e581"}.fa-duotone.fa-tents:after,.fad.fa-tents:after{content:"\e582\e582"}.fa-duotone.fa-terminal:after,.fad.fa-terminal:after{content:"\f120\f120"}.fa-duotone.fa-text:after,.fad.fa-text:after{content:"\f893\f893"}.fa-duotone.fa-text-height:after,.fad.fa-text-height:after{content:"\f034\f034"}.fa-duotone.fa-text-size:after,.fad.fa-text-size:after{content:"\f894\f894"}.fa-duotone.fa-remove-format:after,.fa-duotone.fa-text-slash:after,.fad.fa-remove-format:after,.fad.fa-text-slash:after{content:"\f87d\f87d"}.fa-duotone.fa-text-width:after,.fad.fa-text-width:after{content:"\f035\f035"}.fa-duotone.fa-thermometer:after,.fad.fa-thermometer:after{content:"\f491\f491"}.fa-duotone.fa-theta:after,.fad.fa-theta:after{content:"\f69e\f69e"}.fa-duotone.fa-thought-bubble:after,.fad.fa-thought-bubble:after{content:"\e32e\e32e"}.fa-duotone.fa-thumbs-down:after,.fad.fa-thumbs-down:after{content:"\f165\f165"}.fa-duotone.fa-thumbs-up:after,.fad.fa-thumbs-up:after{content:"\f164\f164"}.fa-duotone.fa-thumb-tack:after,.fa-duotone.fa-thumbtack:after,.fad.fa-thumb-tack:after,.fad.fa-thumbtack:after{content:"\f08d\f08d"}.fa-duotone.fa-tick:after,.fad.fa-tick:after{content:"\e32f\e32f"}.fa-duotone.fa-ticket:after,.fad.fa-ticket:after{content:"\f145\f145"}.fa-duotone.fa-ticket-airline:after,.fad.fa-ticket-airline:after{content:"\e29a\e29a"}.fa-duotone.fa-ticket-alt:after,.fa-duotone.fa-ticket-simple:after,.fad.fa-ticket-alt:after,.fad.fa-ticket-simple:after{content:"\f3ff\f3ff"}.fa-duotone.fa-tickets-airline:after,.fad.fa-tickets-airline:after{content:"\e29b\e29b"}.fa-duotone.fa-tilde:after,.fad.fa-tilde:after{content:"\7e\7e"}.fa-duotone.fa-timeline:after,.fad.fa-timeline:after{content:"\e29c\e29c"}.fa-duotone.fa-timeline-arrow:after,.fad.fa-timeline-arrow:after{content:"\e29d\e29d"}.fa-duotone.fa-timer:after,.fad.fa-timer:after{content:"\e29e\e29e"}.fa-duotone.fa-tire:after,.fad.fa-tire:after{content:"\f631\f631"}.fa-duotone.fa-tire-flat:after,.fad.fa-tire-flat:after{content:"\f632\f632"}.fa-duotone.fa-tire-pressure-warning:after,.fad.fa-tire-pressure-warning:after{content:"\f633\f633"}.fa-duotone.fa-tire-rugged:after,.fad.fa-tire-rugged:after{content:"\f634\f634"}.fa-duotone.fa-toggle-large-off:after,.fad.fa-toggle-large-off:after{content:"\e5b0\e5b0"}.fa-duotone.fa-toggle-large-on:after,.fad.fa-toggle-large-on:after{content:"\e5b1\e5b1"}.fa-duotone.fa-toggle-off:after,.fad.fa-toggle-off:after{content:"\f204\f204"}.fa-duotone.fa-toggle-on:after,.fad.fa-toggle-on:after{content:"\f205\f205"}.fa-duotone.fa-toilet:after,.fad.fa-toilet:after{content:"\f7d8\f7d8"}.fa-duotone.fa-toilet-paper:after,.fad.fa-toilet-paper:after{content:"\f71e\f71e"}.fa-duotone.fa-toilet-paper-alt:after,.fa-duotone.fa-toilet-paper-blank:after,.fad.fa-toilet-paper-alt:after,.fad.fa-toilet-paper-blank:after{content:"\f71f\f71f"}.fa-duotone.fa-toilet-paper-blank-under:after,.fa-duotone.fa-toilet-paper-reverse-alt:after,.fad.fa-toilet-paper-blank-under:after,.fad.fa-toilet-paper-reverse-alt:after{content:"\e29f\e29f"}.fa-duotone.fa-toilet-paper-check:after,.fad.fa-toilet-paper-check:after{content:"\e5b2\e5b2"}.fa-duotone.fa-toilet-paper-slash:after,.fad.fa-toilet-paper-slash:after{content:"\e072\e072"}.fa-duotone.fa-toilet-paper-reverse:after,.fa-duotone.fa-toilet-paper-under:after,.fad.fa-toilet-paper-reverse:after,.fad.fa-toilet-paper-under:after{content:"\e2a0\e2a0"}.fa-duotone.fa-toilet-paper-reverse-slash:after,.fa-duotone.fa-toilet-paper-under-slash:after,.fad.fa-toilet-paper-reverse-slash:after,.fad.fa-toilet-paper-under-slash:after{content:"\e2a1\e2a1"}.fa-duotone.fa-toilet-paper-xmark:after,.fad.fa-toilet-paper-xmark:after{content:"\e5b3\e5b3"}.fa-duotone.fa-toilet-portable:after,.fad.fa-toilet-portable:after{content:"\e583\e583"}.fa-duotone.fa-toilets-portable:after,.fad.fa-toilets-portable:after{content:"\e584\e584"}.fa-duotone.fa-tomato:after,.fad.fa-tomato:after{content:"\e330\e330"}.fa-duotone.fa-tombstone:after,.fad.fa-tombstone:after{content:"\f720\f720"}.fa-duotone.fa-tombstone-alt:after,.fa-duotone.fa-tombstone-blank:after,.fad.fa-tombstone-alt:after,.fad.fa-tombstone-blank:after{content:"\f721\f721"}.fa-duotone.fa-toolbox:after,.fad.fa-toolbox:after{content:"\f552\f552"}.fa-duotone.fa-tooth:after,.fad.fa-tooth:after{content:"\f5c9\f5c9"}.fa-duotone.fa-toothbrush:after,.fad.fa-toothbrush:after{content:"\f635\f635"}.fa-duotone.fa-torii-gate:after,.fad.fa-torii-gate:after{content:"\f6a1\f6a1"}.fa-duotone.fa-tornado:after,.fad.fa-tornado:after{content:"\f76f\f76f"}.fa-duotone.fa-broadcast-tower:after,.fa-duotone.fa-tower-broadcast:after,.fad.fa-broadcast-tower:after,.fad.fa-tower-broadcast:after{content:"\f519\f519"}.fa-duotone.fa-tower-cell:after,.fad.fa-tower-cell:after{content:"\e585\e585"}.fa-duotone.fa-tower-control:after,.fad.fa-tower-control:after{content:"\e2a2\e2a2"}.fa-duotone.fa-tower-observation:after,.fad.fa-tower-observation:after{content:"\e586\e586"}.fa-duotone.fa-tractor:after,.fad.fa-tractor:after{content:"\f722\f722"}.fa-duotone.fa-trademark:after,.fad.fa-trademark:after{content:"\f25c\f25c"}.fa-duotone.fa-traffic-cone:after,.fad.fa-traffic-cone:after{content:"\f636\f636"}.fa-duotone.fa-traffic-light:after,.fad.fa-traffic-light:after{content:"\f637\f637"}.fa-duotone.fa-traffic-light-go:after,.fad.fa-traffic-light-go:after{content:"\f638\f638"}.fa-duotone.fa-traffic-light-slow:after,.fad.fa-traffic-light-slow:after{content:"\f639\f639"}.fa-duotone.fa-traffic-light-stop:after,.fad.fa-traffic-light-stop:after{content:"\f63a\f63a"}.fa-duotone.fa-trailer:after,.fad.fa-trailer:after{content:"\e041\e041"}.fa-duotone.fa-train:after,.fad.fa-train:after{content:"\f238\f238"}.fa-duotone.fa-subway:after,.fa-duotone.fa-train-subway:after,.fad.fa-subway:after,.fad.fa-train-subway:after{content:"\f239\f239"}.fa-duotone.fa-subway-tunnel:after,.fa-duotone.fa-train-subway-tunnel:after,.fad.fa-subway-tunnel:after,.fad.fa-train-subway-tunnel:after{content:"\e2a3\e2a3"}.fa-duotone.fa-train-track:after,.fad.fa-train-track:after{content:"\e453\e453"}.fa-duotone.fa-train-tram:after,.fad.fa-train-tram:after{content:"\e5b4\e5b4"}.fa-duotone.fa-train-tunnel:after,.fad.fa-train-tunnel:after{content:"\e454\e454"}.fa-duotone.fa-transformer-bolt:after,.fad.fa-transformer-bolt:after{content:"\e2a4\e2a4"}.fa-duotone.fa-transgender-alt:after,.fa-duotone.fa-transgender:after,.fad.fa-transgender-alt:after,.fad.fa-transgender:after{content:"\f225\f225"}.fa-duotone.fa-transporter:after,.fad.fa-transporter:after{content:"\e042\e042"}.fa-duotone.fa-transporter-1:after,.fad.fa-transporter-1:after{content:"\e043\e043"}.fa-duotone.fa-transporter-2:after,.fad.fa-transporter-2:after{content:"\e044\e044"}.fa-duotone.fa-transporter-3:after,.fad.fa-transporter-3:after{content:"\e045\e045"}.fa-duotone.fa-transporter-4:after,.fad.fa-transporter-4:after{content:"\e2a5\e2a5"}.fa-duotone.fa-transporter-5:after,.fad.fa-transporter-5:after{content:"\e2a6\e2a6"}.fa-duotone.fa-transporter-6:after,.fad.fa-transporter-6:after{content:"\e2a7\e2a7"}.fa-duotone.fa-transporter-7:after,.fad.fa-transporter-7:after{content:"\e2a8\e2a8"}.fa-duotone.fa-transporter-empty:after,.fad.fa-transporter-empty:after{content:"\e046\e046"}.fa-duotone.fa-trash:after,.fad.fa-trash:after{content:"\f1f8\f1f8"}.fa-duotone.fa-trash-arrow-up:after,.fa-duotone.fa-trash-restore:after,.fad.fa-trash-arrow-up:after,.fad.fa-trash-restore:after{content:"\f829\f829"}.fa-duotone.fa-trash-alt:after,.fa-duotone.fa-trash-can:after,.fad.fa-trash-alt:after,.fad.fa-trash-can:after{content:"\f2ed\f2ed"}.fa-duotone.fa-trash-can-arrow-up:after,.fa-duotone.fa-trash-restore-alt:after,.fad.fa-trash-can-arrow-up:after,.fad.fa-trash-restore-alt:after{content:"\f82a\f82a"}.fa-duotone.fa-trash-can-check:after,.fad.fa-trash-can-check:after{content:"\e2a9\e2a9"}.fa-duotone.fa-trash-can-clock:after,.fad.fa-trash-can-clock:after{content:"\e2aa\e2aa"}.fa-duotone.fa-trash-can-list:after,.fad.fa-trash-can-list:after{content:"\e2ab\e2ab"}.fa-duotone.fa-trash-can-plus:after,.fad.fa-trash-can-plus:after{content:"\e2ac\e2ac"}.fa-duotone.fa-trash-alt-slash:after,.fa-duotone.fa-trash-can-slash:after,.fad.fa-trash-alt-slash:after,.fad.fa-trash-can-slash:after{content:"\e2ad\e2ad"}.fa-duotone.fa-trash-can-arrow-turn-left:after,.fa-duotone.fa-trash-can-undo:after,.fa-duotone.fa-trash-undo-alt:after,.fad.fa-trash-can-arrow-turn-left:after,.fad.fa-trash-can-undo:after,.fad.fa-trash-undo-alt:after{content:"\f896\f896"}.fa-duotone.fa-trash-can-xmark:after,.fad.fa-trash-can-xmark:after{content:"\e2ae\e2ae"}.fa-duotone.fa-trash-check:after,.fad.fa-trash-check:after{content:"\e2af\e2af"}.fa-duotone.fa-trash-clock:after,.fad.fa-trash-clock:after{content:"\e2b0\e2b0"}.fa-duotone.fa-trash-list:after,.fad.fa-trash-list:after{content:"\e2b1\e2b1"}.fa-duotone.fa-trash-plus:after,.fad.fa-trash-plus:after{content:"\e2b2\e2b2"}.fa-duotone.fa-trash-slash:after,.fad.fa-trash-slash:after{content:"\e2b3\e2b3"}.fa-duotone.fa-trash-arrow-turn-left:after,.fa-duotone.fa-trash-undo:after,.fad.fa-trash-arrow-turn-left:after,.fad.fa-trash-undo:after{content:"\f895\f895"}.fa-duotone.fa-trash-xmark:after,.fad.fa-trash-xmark:after{content:"\e2b4\e2b4"}.fa-duotone.fa-treasure-chest:after,.fad.fa-treasure-chest:after{content:"\f723\f723"}.fa-duotone.fa-tree:after,.fad.fa-tree:after{content:"\f1bb\f1bb"}.fa-duotone.fa-tree-christmas:after,.fad.fa-tree-christmas:after{content:"\f7db\f7db"}.fa-duotone.fa-tree-city:after,.fad.fa-tree-city:after{content:"\e587\e587"}.fa-duotone.fa-tree-alt:after,.fa-duotone.fa-tree-deciduous:after,.fad.fa-tree-alt:after,.fad.fa-tree-deciduous:after{content:"\f400\f400"}.fa-duotone.fa-tree-decorated:after,.fad.fa-tree-decorated:after{content:"\f7dc\f7dc"}.fa-duotone.fa-tree-large:after,.fad.fa-tree-large:after{content:"\f7dd\f7dd"}.fa-duotone.fa-tree-palm:after,.fad.fa-tree-palm:after{content:"\f82b\f82b"}.fa-duotone.fa-trees:after,.fad.fa-trees:after{content:"\f724\f724"}.fa-duotone.fa-triangle:after,.fad.fa-triangle:after{content:"\f2ec\f2ec"}.fa-duotone.fa-exclamation-triangle:after,.fa-duotone.fa-triangle-exclamation:after,.fa-duotone.fa-warning:after,.fad.fa-exclamation-triangle:after,.fad.fa-triangle-exclamation:after,.fad.fa-warning:after{content:"\f071\f071"}.fa-duotone.fa-triangle-instrument:after,.fa-duotone.fa-triangle-music:after,.fad.fa-triangle-instrument:after,.fad.fa-triangle-music:after{content:"\f8e2\f8e2"}.fa-duotone.fa-construction:after,.fa-duotone.fa-triangle-person-digging:after,.fad.fa-construction:after,.fad.fa-triangle-person-digging:after{content:"\f85d\f85d"}.fa-duotone.fa-trillium:after,.fad.fa-trillium:after{content:"\e588\e588"}.fa-duotone.fa-trophy:after,.fad.fa-trophy:after{content:"\f091\f091"}.fa-duotone.fa-trophy-alt:after,.fa-duotone.fa-trophy-star:after,.fad.fa-trophy-alt:after,.fad.fa-trophy-star:after{content:"\f2eb\f2eb"}.fa-duotone.fa-trowel:after,.fad.fa-trowel:after{content:"\e589\e589"}.fa-duotone.fa-trowel-bricks:after,.fad.fa-trowel-bricks:after{content:"\e58a\e58a"}.fa-duotone.fa-truck:after,.fad.fa-truck:after{content:"\f0d1\f0d1"}.fa-duotone.fa-truck-arrow-right:after,.fad.fa-truck-arrow-right:after{content:"\e58b\e58b"}.fa-duotone.fa-truck-bolt:after,.fad.fa-truck-bolt:after{content:"\e3d0\e3d0"}.fa-duotone.fa-shipping-timed:after,.fa-duotone.fa-truck-clock:after,.fad.fa-shipping-timed:after,.fad.fa-truck-clock:after{content:"\f48c\f48c"}.fa-duotone.fa-truck-container:after,.fad.fa-truck-container:after{content:"\f4dc\f4dc"}.fa-duotone.fa-truck-container-empty:after,.fad.fa-truck-container-empty:after{content:"\e2b5\e2b5"}.fa-duotone.fa-truck-droplet:after,.fad.fa-truck-droplet:after{content:"\e58c\e58c"}.fa-duotone.fa-shipping-fast:after,.fa-duotone.fa-truck-fast:after,.fad.fa-shipping-fast:after,.fad.fa-truck-fast:after{content:"\f48b\f48b"}.fa-duotone.fa-truck-field:after,.fad.fa-truck-field:after{content:"\e58d\e58d"}.fa-duotone.fa-truck-field-un:after,.fad.fa-truck-field-un:after{content:"\e58e\e58e"}.fa-duotone.fa-truck-flatbed:after,.fad.fa-truck-flatbed:after{content:"\e2b6\e2b6"}.fa-duotone.fa-truck-front:after,.fad.fa-truck-front:after{content:"\e2b7\e2b7"}.fa-duotone.fa-ambulance:after,.fa-duotone.fa-truck-medical:after,.fad.fa-ambulance:after,.fad.fa-truck-medical:after{content:"\f0f9\f0f9"}.fa-duotone.fa-truck-monster:after,.fad.fa-truck-monster:after{content:"\f63b\f63b"}.fa-duotone.fa-truck-moving:after,.fad.fa-truck-moving:after{content:"\f4df\f4df"}.fa-duotone.fa-truck-pickup:after,.fad.fa-truck-pickup:after{content:"\f63c\f63c"}.fa-duotone.fa-truck-plane:after,.fad.fa-truck-plane:after{content:"\e58f\e58f"}.fa-duotone.fa-truck-plow:after,.fad.fa-truck-plow:after{content:"\f7de\f7de"}.fa-duotone.fa-truck-ramp:after,.fad.fa-truck-ramp:after{content:"\f4e0\f4e0"}.fa-duotone.fa-truck-loading:after,.fa-duotone.fa-truck-ramp-box:after,.fad.fa-truck-loading:after,.fad.fa-truck-ramp-box:after{content:"\f4de\f4de"}.fa-duotone.fa-truck-couch:after,.fa-duotone.fa-truck-ramp-couch:after,.fad.fa-truck-couch:after,.fad.fa-truck-ramp-couch:after{content:"\f4dd\f4dd"}.fa-duotone.fa-truck-tow:after,.fad.fa-truck-tow:after{content:"\e2b8\e2b8"}.fa-duotone.fa-trumpet:after,.fad.fa-trumpet:after{content:"\f8e3\f8e3"}.fa-duotone.fa-teletype:after,.fa-duotone.fa-tty:after,.fad.fa-teletype:after,.fad.fa-tty:after{content:"\f1e4\f1e4"}.fa-duotone.fa-teletype-answer:after,.fa-duotone.fa-tty-answer:after,.fad.fa-teletype-answer:after,.fad.fa-tty-answer:after{content:"\e2b9\e2b9"}.fa-duotone.fa-tugrik-sign:after,.fad.fa-tugrik-sign:after{content:"\e2ba\e2ba"}.fa-duotone.fa-turkey:after,.fad.fa-turkey:after{content:"\f725\f725"}.fa-duotone.fa-try:after,.fa-duotone.fa-turkish-lira-sign:after,.fa-duotone.fa-turkish-lira:after,.fad.fa-try:after,.fad.fa-turkish-lira-sign:after,.fad.fa-turkish-lira:after{content:"\e2bb\e2bb"}.fa-duotone.fa-level-down-alt:after,.fa-duotone.fa-turn-down:after,.fad.fa-level-down-alt:after,.fad.fa-turn-down:after{content:"\f3be\f3be"}.fa-duotone.fa-turn-down-left:after,.fad.fa-turn-down-left:after{content:"\e331\e331"}.fa-duotone.fa-turn-down-right:after,.fad.fa-turn-down-right:after{content:"\e455\e455"}.fa-duotone.fa-level-up-alt:after,.fa-duotone.fa-turn-up:after,.fad.fa-level-up-alt:after,.fad.fa-turn-up:after{content:"\f3bf\f3bf"}.fa-duotone.fa-turntable:after,.fad.fa-turntable:after{content:"\f8e4\f8e4"}.fa-duotone.fa-turtle:after,.fad.fa-turtle:after{content:"\f726\f726"}.fa-duotone.fa-television:after,.fa-duotone.fa-tv-alt:after,.fa-duotone.fa-tv:after,.fad.fa-television:after,.fad.fa-tv-alt:after,.fad.fa-tv:after{content:"\f26c\f26c"}.fa-duotone.fa-tv-music:after,.fad.fa-tv-music:after{content:"\f8e6\f8e6"}.fa-duotone.fa-tv-retro:after,.fad.fa-tv-retro:after{content:"\f401\f401"}.fa-duotone.fa-typewriter:after,.fad.fa-typewriter:after{content:"\f8e7\f8e7"}.fa-duotone.fa-u:after,.fad.fa-u:after{content:"\55\55"}.fa-duotone.fa-ufo:after,.fad.fa-ufo:after{content:"\e047\e047"}.fa-duotone.fa-ufo-beam:after,.fad.fa-ufo-beam:after{content:"\e048\e048"}.fa-duotone.fa-umbrella:after,.fad.fa-umbrella:after{content:"\f0e9\f0e9"}.fa-duotone.fa-umbrella-beach:after,.fad.fa-umbrella-beach:after{content:"\f5ca\f5ca"}.fa-duotone.fa-umbrella-alt:after,.fa-duotone.fa-umbrella-simple:after,.fad.fa-umbrella-alt:after,.fad.fa-umbrella-simple:after{content:"\e2bc\e2bc"}.fa-duotone.fa-underline:after,.fad.fa-underline:after{content:"\f0cd\f0cd"}.fa-duotone.fa-unicorn:after,.fad.fa-unicorn:after{content:"\f727\f727"}.fa-duotone.fa-uniform-martial-arts:after,.fad.fa-uniform-martial-arts:after{content:"\e3d1\e3d1"}.fa-duotone.fa-union:after,.fad.fa-union:after{content:"\f6a2\f6a2"}.fa-duotone.fa-universal-access:after,.fad.fa-universal-access:after{content:"\f29a\f29a"}.fa-duotone.fa-unlock:after,.fad.fa-unlock:after{content:"\f09c\f09c"}.fa-duotone.fa-unlock-alt:after,.fa-duotone.fa-unlock-keyhole:after,.fad.fa-unlock-alt:after,.fad.fa-unlock-keyhole:after{content:"\f13e\f13e"}.fa-duotone.fa-arrow-alt-up:after,.fa-duotone.fa-up:after,.fad.fa-arrow-alt-up:after,.fad.fa-up:after{content:"\f357\f357"}.fa-duotone.fa-arrows-alt-v:after,.fa-duotone.fa-up-down:after,.fad.fa-arrows-alt-v:after,.fad.fa-up-down:after{content:"\f338\f338"}.fa-duotone.fa-arrows-alt:after,.fa-duotone.fa-up-down-left-right:after,.fad.fa-arrows-alt:after,.fad.fa-up-down-left-right:after{content:"\f0b2\f0b2"}.fa-duotone.fa-up-from-bracket:after,.fad.fa-up-from-bracket:after{content:"\e590\e590"}.fa-duotone.fa-up-from-dotted-line:after,.fad.fa-up-from-dotted-line:after{content:"\e456\e456"}.fa-duotone.fa-arrow-alt-from-bottom:after,.fa-duotone.fa-up-from-line:after,.fad.fa-arrow-alt-from-bottom:after,.fad.fa-up-from-line:after{content:"\f346\f346"}.fa-duotone.fa-up-left:after,.fad.fa-up-left:after{content:"\e2bd\e2bd"}.fa-duotone.fa-long-arrow-alt-up:after,.fa-duotone.fa-up-long:after,.fad.fa-long-arrow-alt-up:after,.fad.fa-up-long:after{content:"\f30c\f30c"}.fa-duotone.fa-up-right:after,.fad.fa-up-right:after{content:"\e2be\e2be"}.fa-duotone.fa-expand-alt:after,.fa-duotone.fa-up-right-and-down-left-from-center:after,.fad.fa-expand-alt:after,.fad.fa-up-right-and-down-left-from-center:after{content:"\f424\f424"}.fa-duotone.fa-external-link-alt:after,.fa-duotone.fa-up-right-from-square:after,.fad.fa-external-link-alt:after,.fad.fa-up-right-from-square:after{content:"\f35d\f35d"}.fa-duotone.fa-up-to-dotted-line:after,.fad.fa-up-to-dotted-line:after{content:"\e457\e457"}.fa-duotone.fa-arrow-alt-to-top:after,.fa-duotone.fa-up-to-line:after,.fad.fa-arrow-alt-to-top:after,.fad.fa-up-to-line:after{content:"\f34d\f34d"}.fa-duotone.fa-upload:after,.fad.fa-upload:after{content:"\f093\f093"}.fa-duotone.fa-usb-drive:after,.fad.fa-usb-drive:after{content:"\f8e9\f8e9"}.fa-duotone.fa-user:after,.fad.fa-user:after{content:"\f007\f007"}.fa-duotone.fa-user-alien:after,.fad.fa-user-alien:after{content:"\e04a\e04a"}.fa-duotone.fa-user-astronaut:after,.fad.fa-user-astronaut:after{content:"\f4fb\f4fb"}.fa-duotone.fa-user-bounty-hunter:after,.fad.fa-user-bounty-hunter:after{content:"\e2bf\e2bf"}.fa-duotone.fa-user-check:after,.fad.fa-user-check:after{content:"\f4fc\f4fc"}.fa-duotone.fa-user-chef:after,.fad.fa-user-chef:after{content:"\e3d2\e3d2"}.fa-duotone.fa-user-clock:after,.fad.fa-user-clock:after{content:"\f4fd\f4fd"}.fa-duotone.fa-user-cowboy:after,.fad.fa-user-cowboy:after{content:"\f8ea\f8ea"}.fa-duotone.fa-user-crown:after,.fad.fa-user-crown:after{content:"\f6a4\f6a4"}.fa-duotone.fa-user-doctor:after,.fa-duotone.fa-user-md:after,.fad.fa-user-doctor:after,.fad.fa-user-md:after{content:"\f0f0\f0f0"}.fa-duotone.fa-user-doctor-hair:after,.fad.fa-user-doctor-hair:after{content:"\e458\e458"}.fa-duotone.fa-user-doctor-hair-long:after,.fad.fa-user-doctor-hair-long:after{content:"\e459\e459"}.fa-duotone.fa-user-doctor-message:after,.fa-duotone.fa-user-md-chat:after,.fad.fa-user-doctor-message:after,.fad.fa-user-md-chat:after{content:"\f82e\f82e"}.fa-duotone.fa-user-cog:after,.fa-duotone.fa-user-gear:after,.fad.fa-user-cog:after,.fad.fa-user-gear:after{content:"\f4fe\f4fe"}.fa-duotone.fa-user-graduate:after,.fad.fa-user-graduate:after{content:"\f501\f501"}.fa-duotone.fa-user-friends:after,.fa-duotone.fa-user-group:after,.fad.fa-user-friends:after,.fad.fa-user-group:after{content:"\f500\f500"}.fa-duotone.fa-user-group-crown:after,.fa-duotone.fa-users-crown:after,.fad.fa-user-group-crown:after,.fad.fa-users-crown:after{content:"\f6a5\f6a5"}.fa-duotone.fa-user-hair:after,.fad.fa-user-hair:after{content:"\e45a\e45a"}.fa-duotone.fa-user-hair-buns:after,.fad.fa-user-hair-buns:after{content:"\e3d3\e3d3"}.fa-duotone.fa-user-hair-long:after,.fad.fa-user-hair-long:after{content:"\e45b\e45b"}.fa-duotone.fa-business-front:after,.fa-duotone.fa-party-back:after,.fa-duotone.fa-trian-balbot:after,.fa-duotone.fa-user-hair-mullet:after,.fad.fa-business-front:after,.fad.fa-party-back:after,.fad.fa-trian-balbot:after,.fad.fa-user-hair-mullet:after{content:"\e45c\e45c"}.fa-duotone.fa-user-headset:after,.fad.fa-user-headset:after{content:"\f82d\f82d"}.fa-duotone.fa-user-construction:after,.fa-duotone.fa-user-hard-hat:after,.fa-duotone.fa-user-helmet-safety:after,.fad.fa-user-construction:after,.fad.fa-user-hard-hat:after,.fad.fa-user-helmet-safety:after{content:"\f82c\f82c"}.fa-duotone.fa-user-injured:after,.fad.fa-user-injured:after{content:"\f728\f728"}.fa-duotone.fa-user-alt:after,.fa-duotone.fa-user-large:after,.fad.fa-user-alt:after,.fad.fa-user-large:after{content:"\f406\f406"}.fa-duotone.fa-user-alt-slash:after,.fa-duotone.fa-user-large-slash:after,.fad.fa-user-alt-slash:after,.fad.fa-user-large-slash:after{content:"\f4fa\f4fa"}.fa-duotone.fa-user-lock:after,.fad.fa-user-lock:after{content:"\f502\f502"}.fa-duotone.fa-user-minus:after,.fad.fa-user-minus:after{content:"\f503\f503"}.fa-duotone.fa-user-music:after,.fad.fa-user-music:after{content:"\f8eb\f8eb"}.fa-duotone.fa-user-ninja:after,.fad.fa-user-ninja:after{content:"\f504\f504"}.fa-duotone.fa-user-nurse:after,.fad.fa-user-nurse:after{content:"\f82f\f82f"}.fa-duotone.fa-user-nurse-hair:after,.fad.fa-user-nurse-hair:after{content:"\e45d\e45d"}.fa-duotone.fa-user-nurse-hair-long:after,.fad.fa-user-nurse-hair-long:after{content:"\e45e\e45e"}.fa-duotone.fa-user-edit:after,.fa-duotone.fa-user-pen:after,.fad.fa-user-edit:after,.fad.fa-user-pen:after{content:"\f4ff\f4ff"}.fa-duotone.fa-user-pilot:after,.fad.fa-user-pilot:after{content:"\e2c0\e2c0"}.fa-duotone.fa-user-pilot-tie:after,.fad.fa-user-pilot-tie:after{content:"\e2c1\e2c1"}.fa-duotone.fa-user-plus:after,.fad.fa-user-plus:after{content:"\f234\f234"}.fa-duotone.fa-user-police:after,.fad.fa-user-police:after{content:"\e333\e333"}.fa-duotone.fa-user-police-tie:after,.fad.fa-user-police-tie:after{content:"\e334\e334"}.fa-duotone.fa-user-robot:after,.fad.fa-user-robot:after{content:"\e04b\e04b"}.fa-duotone.fa-user-robot-xmarks:after,.fad.fa-user-robot-xmarks:after{content:"\e4a7\e4a7"}.fa-duotone.fa-user-secret:after,.fad.fa-user-secret:after{content:"\f21b\f21b"}.fa-duotone.fa-user-shakespeare:after,.fad.fa-user-shakespeare:after{content:"\e2c2\e2c2"}.fa-duotone.fa-user-shield:after,.fad.fa-user-shield:after{content:"\f505\f505"}.fa-duotone.fa-user-slash:after,.fad.fa-user-slash:after{content:"\f506\f506"}.fa-duotone.fa-user-tag:after,.fad.fa-user-tag:after{content:"\f507\f507"}.fa-duotone.fa-user-tie:after,.fad.fa-user-tie:after{content:"\f508\f508"}.fa-duotone.fa-user-tie-hair:after,.fad.fa-user-tie-hair:after{content:"\e45f\e45f"}.fa-duotone.fa-user-tie-hair-long:after,.fad.fa-user-tie-hair-long:after{content:"\e460\e460"}.fa-duotone.fa-user-unlock:after,.fad.fa-user-unlock:after{content:"\e058\e058"}.fa-duotone.fa-user-visor:after,.fad.fa-user-visor:after{content:"\e04c\e04c"}.fa-duotone.fa-user-vneck:after,.fad.fa-user-vneck:after{content:"\e461\e461"}.fa-duotone.fa-user-vneck-hair:after,.fad.fa-user-vneck-hair:after{content:"\e462\e462"}.fa-duotone.fa-user-vneck-hair-long:after,.fad.fa-user-vneck-hair-long:after{content:"\e463\e463"}.fa-duotone.fa-user-times:after,.fa-duotone.fa-user-xmark:after,.fad.fa-user-times:after,.fad.fa-user-xmark:after{content:"\f235\f235"}.fa-duotone.fa-users:after,.fad.fa-users:after{content:"\f0c0\f0c0"}.fa-duotone.fa-users-between-lines:after,.fad.fa-users-between-lines:after{content:"\e591\e591"}.fa-duotone.fa-users-cog:after,.fa-duotone.fa-users-gear:after,.fad.fa-users-cog:after,.fad.fa-users-gear:after{content:"\f509\f509"}.fa-duotone.fa-users-line:after,.fad.fa-users-line:after{content:"\e592\e592"}.fa-duotone.fa-users-medical:after,.fad.fa-users-medical:after{content:"\f830\f830"}.fa-duotone.fa-users-rays:after,.fad.fa-users-rays:after{content:"\e593\e593"}.fa-duotone.fa-users-rectangle:after,.fad.fa-users-rectangle:after{content:"\e594\e594"}.fa-duotone.fa-users-slash:after,.fad.fa-users-slash:after{content:"\e073\e073"}.fa-duotone.fa-users-viewfinder:after,.fad.fa-users-viewfinder:after{content:"\e595\e595"}.fa-duotone.fa-cutlery:after,.fa-duotone.fa-utensils:after,.fad.fa-cutlery:after,.fad.fa-utensils:after{content:"\f2e7\f2e7"}.fa-duotone.fa-utensils-slash:after,.fad.fa-utensils-slash:after{content:"\e464\e464"}.fa-duotone.fa-utility-pole:after,.fad.fa-utility-pole:after{content:"\e2c3\e2c3"}.fa-duotone.fa-utility-pole-double:after,.fad.fa-utility-pole-double:after{content:"\e2c4\e2c4"}.fa-duotone.fa-v:after,.fad.fa-v:after{content:"\56\56"}.fa-duotone.fa-vacuum:after,.fad.fa-vacuum:after{content:"\e04d\e04d"}.fa-duotone.fa-vacuum-robot:after,.fad.fa-vacuum-robot:after{content:"\e04e\e04e"}.fa-duotone.fa-value-absolute:after,.fad.fa-value-absolute:after{content:"\f6a6\f6a6"}.fa-duotone.fa-shuttle-van:after,.fa-duotone.fa-van-shuttle:after,.fad.fa-shuttle-van:after,.fad.fa-van-shuttle:after{content:"\f5b6\f5b6"}.fa-duotone.fa-vault:after,.fad.fa-vault:after{content:"\e2c5\e2c5"}.fa-duotone.fa-vector-circle:after,.fad.fa-vector-circle:after{content:"\e2c6\e2c6"}.fa-duotone.fa-vector-polygon:after,.fad.fa-vector-polygon:after{content:"\e2c7\e2c7"}.fa-duotone.fa-vector-square:after,.fad.fa-vector-square:after{content:"\f5cb\f5cb"}.fa-duotone.fa-vent-damper:after,.fad.fa-vent-damper:after{content:"\e465\e465"}.fa-duotone.fa-venus:after,.fad.fa-venus:after{content:"\f221\f221"}.fa-duotone.fa-venus-double:after,.fad.fa-venus-double:after{content:"\f226\f226"}.fa-duotone.fa-venus-mars:after,.fad.fa-venus-mars:after{content:"\f228\f228"}.fa-duotone.fa-vest:after,.fad.fa-vest:after{content:"\e085\e085"}.fa-duotone.fa-vest-patches:after,.fad.fa-vest-patches:after{content:"\e086\e086"}.fa-duotone.fa-vial:after,.fad.fa-vial:after{content:"\f492\f492"}.fa-duotone.fa-vial-circle-check:after,.fad.fa-vial-circle-check:after{content:"\e596\e596"}.fa-duotone.fa-vial-virus:after,.fad.fa-vial-virus:after{content:"\e597\e597"}.fa-duotone.fa-vials:after,.fad.fa-vials:after{content:"\f493\f493"}.fa-duotone.fa-video-camera:after,.fa-duotone.fa-video:after,.fad.fa-video-camera:after,.fad.fa-video:after{content:"\f03d\f03d"}.fa-duotone.fa-video-arrow-down-left:after,.fad.fa-video-arrow-down-left:after{content:"\e2c8\e2c8"}.fa-duotone.fa-video-arrow-up-right:after,.fad.fa-video-arrow-up-right:after{content:"\e2c9\e2c9"}.fa-duotone.fa-video-plus:after,.fad.fa-video-plus:after{content:"\f4e1\f4e1"}.fa-duotone.fa-video-slash:after,.fad.fa-video-slash:after{content:"\f4e2\f4e2"}.fa-duotone.fa-vihara:after,.fad.fa-vihara:after{content:"\f6a7\f6a7"}.fa-duotone.fa-violin:after,.fad.fa-violin:after{content:"\f8ed\f8ed"}.fa-duotone.fa-virus:after,.fad.fa-virus:after{content:"\e074\e074"}.fa-duotone.fa-virus-covid:after,.fad.fa-virus-covid:after{content:"\e4a8\e4a8"}.fa-duotone.fa-virus-covid-slash:after,.fad.fa-virus-covid-slash:after{content:"\e4a9\e4a9"}.fa-duotone.fa-virus-slash:after,.fad.fa-virus-slash:after{content:"\e075\e075"}.fa-duotone.fa-viruses:after,.fad.fa-viruses:after{content:"\e076\e076"}.fa-duotone.fa-voicemail:after,.fad.fa-voicemail:after{content:"\f897\f897"}.fa-duotone.fa-volcano:after,.fad.fa-volcano:after{content:"\f770\f770"}.fa-duotone.fa-volleyball-ball:after,.fa-duotone.fa-volleyball:after,.fad.fa-volleyball-ball:after,.fad.fa-volleyball:after{content:"\f45f\f45f"}.fa-duotone.fa-volume-medium:after,.fa-duotone.fa-volume:after,.fad.fa-volume-medium:after,.fad.fa-volume:after{content:"\f6a8\f6a8"}.fa-duotone.fa-volume-high:after,.fa-duotone.fa-volume-up:after,.fad.fa-volume-high:after,.fad.fa-volume-up:after{content:"\f028\f028"}.fa-duotone.fa-volume-down:after,.fa-duotone.fa-volume-low:after,.fad.fa-volume-down:after,.fad.fa-volume-low:after{content:"\f027\f027"}.fa-duotone.fa-volume-off:after,.fad.fa-volume-off:after{content:"\f026\f026"}.fa-duotone.fa-volume-slash:after,.fad.fa-volume-slash:after{content:"\f2e2\f2e2"}.fa-duotone.fa-volume-mute:after,.fa-duotone.fa-volume-times:after,.fa-duotone.fa-volume-xmark:after,.fad.fa-volume-mute:after,.fad.fa-volume-times:after,.fad.fa-volume-xmark:after{content:"\f6a9\f6a9"}.fa-duotone.fa-vr-cardboard:after,.fad.fa-vr-cardboard:after{content:"\f729\f729"}.fa-duotone.fa-w:after,.fad.fa-w:after{content:"\57\57"}.fa-duotone.fa-waffle:after,.fad.fa-waffle:after{content:"\e466\e466"}.fa-duotone.fa-wagon-covered:after,.fad.fa-wagon-covered:after{content:"\f8ee\f8ee"}.fa-duotone.fa-walker:after,.fad.fa-walker:after{content:"\f831\f831"}.fa-duotone.fa-walkie-talkie:after,.fad.fa-walkie-talkie:after{content:"\f8ef\f8ef"}.fa-duotone.fa-wallet:after,.fad.fa-wallet:after{content:"\f555\f555"}.fa-duotone.fa-wand:after,.fad.fa-wand:after{content:"\f72a\f72a"}.fa-duotone.fa-magic:after,.fa-duotone.fa-wand-magic:after,.fad.fa-magic:after,.fad.fa-wand-magic:after{content:"\f0d0\f0d0"}.fa-duotone.fa-magic-wand-sparkles:after,.fa-duotone.fa-wand-magic-sparkles:after,.fad.fa-magic-wand-sparkles:after,.fad.fa-wand-magic-sparkles:after{content:"\e2ca\e2ca"}.fa-duotone.fa-wand-sparkles:after,.fad.fa-wand-sparkles:after{content:"\f72b\f72b"}.fa-duotone.fa-warehouse:after,.fad.fa-warehouse:after{content:"\f494\f494"}.fa-duotone.fa-warehouse-alt:after,.fa-duotone.fa-warehouse-full:after,.fad.fa-warehouse-alt:after,.fad.fa-warehouse-full:after{content:"\f495\f495"}.fa-duotone.fa-washer:after,.fa-duotone.fa-washing-machine:after,.fad.fa-washer:after,.fad.fa-washing-machine:after{content:"\f898\f898"}.fa-duotone.fa-watch:after,.fad.fa-watch:after{content:"\f2e1\f2e1"}.fa-duotone.fa-watch-apple:after,.fad.fa-watch-apple:after{content:"\e2cb\e2cb"}.fa-duotone.fa-watch-calculator:after,.fad.fa-watch-calculator:after{content:"\f8f0\f8f0"}.fa-duotone.fa-watch-fitness:after,.fad.fa-watch-fitness:after{content:"\f63e\f63e"}.fa-duotone.fa-watch-smart:after,.fad.fa-watch-smart:after{content:"\e2cc\e2cc"}.fa-duotone.fa-water:after,.fad.fa-water:after{content:"\f773\f773"}.fa-duotone.fa-water-arrow-down:after,.fa-duotone.fa-water-lower:after,.fad.fa-water-arrow-down:after,.fad.fa-water-lower:after{content:"\f774\f774"}.fa-duotone.fa-water-arrow-up:after,.fa-duotone.fa-water-rise:after,.fad.fa-water-arrow-up:after,.fad.fa-water-rise:after{content:"\f775\f775"}.fa-duotone.fa-ladder-water:after,.fa-duotone.fa-swimming-pool:after,.fa-duotone.fa-water-ladder:after,.fad.fa-ladder-water:after,.fad.fa-swimming-pool:after,.fad.fa-water-ladder:after{content:"\f5c5\f5c5"}.fa-duotone.fa-watermelon-slice:after,.fad.fa-watermelon-slice:after{content:"\e337\e337"}.fa-duotone.fa-heart-rate:after,.fa-duotone.fa-wave-pulse:after,.fad.fa-heart-rate:after,.fad.fa-wave-pulse:after{content:"\f5f8\f5f8"}.fa-duotone.fa-wave-sine:after,.fad.fa-wave-sine:after{content:"\f899\f899"}.fa-duotone.fa-wave-square:after,.fad.fa-wave-square:after{content:"\f83e\f83e"}.fa-duotone.fa-wave-triangle:after,.fad.fa-wave-triangle:after{content:"\f89a\f89a"}.fa-duotone.fa-waveform:after,.fad.fa-waveform:after{content:"\f8f1\f8f1"}.fa-duotone.fa-waveform-lines:after,.fa-duotone.fa-waveform-path:after,.fad.fa-waveform-lines:after,.fad.fa-waveform-path:after{content:"\f8f2\f8f2"}.fa-duotone.fa-weight-hanging:after,.fad.fa-weight-hanging:after{content:"\f5cd\f5cd"}.fa-duotone.fa-weight-scale:after,.fa-duotone.fa-weight:after,.fad.fa-weight-scale:after,.fad.fa-weight:after{content:"\f496\f496"}.fa-duotone.fa-whale:after,.fad.fa-whale:after{content:"\f72c\f72c"}.fa-duotone.fa-wheat:after,.fad.fa-wheat:after{content:"\f72d\f72d"}.fa-duotone.fa-wheat-alt:after,.fa-duotone.fa-wheat-awn:after,.fad.fa-wheat-alt:after,.fad.fa-wheat-awn:after{content:"\e2cd\e2cd"}.fa-duotone.fa-wheat-awn-circle-exclamation:after,.fad.fa-wheat-awn-circle-exclamation:after{content:"\e598\e598"}.fa-duotone.fa-wheat-awn-slash:after,.fad.fa-wheat-awn-slash:after{content:"\e338\e338"}.fa-duotone.fa-wheat-slash:after,.fad.fa-wheat-slash:after{content:"\e339\e339"}.fa-duotone.fa-wheelchair:after,.fad.fa-wheelchair:after{content:"\f193\f193"}.fa-duotone.fa-wheelchair-alt:after,.fa-duotone.fa-wheelchair-move:after,.fad.fa-wheelchair-alt:after,.fad.fa-wheelchair-move:after{content:"\e2ce\e2ce"}.fa-duotone.fa-glass-whiskey:after,.fa-duotone.fa-whiskey-glass:after,.fad.fa-glass-whiskey:after,.fad.fa-whiskey-glass:after{content:"\f7a0\f7a0"}.fa-duotone.fa-glass-whiskey-rocks:after,.fa-duotone.fa-whiskey-glass-ice:after,.fad.fa-glass-whiskey-rocks:after,.fad.fa-whiskey-glass-ice:after{content:"\f7a1\f7a1"}.fa-duotone.fa-whistle:after,.fad.fa-whistle:after{content:"\f460\f460"}.fa-duotone.fa-wifi-3:after,.fa-duotone.fa-wifi-strong:after,.fa-duotone.fa-wifi:after,.fad.fa-wifi-3:after,.fad.fa-wifi-strong:after,.fad.fa-wifi:after{content:"\f1eb\f1eb"}.fa-duotone.fa-wifi-exclamation:after,.fad.fa-wifi-exclamation:after{content:"\e2cf\e2cf"}.fa-duotone.fa-wifi-2:after,.fa-duotone.fa-wifi-fair:after,.fad.fa-wifi-2:after,.fad.fa-wifi-fair:after{content:"\f6ab\f6ab"}.fa-duotone.fa-wifi-slash:after,.fad.fa-wifi-slash:after{content:"\f6ac\f6ac"}.fa-duotone.fa-wifi-1:after,.fa-duotone.fa-wifi-weak:after,.fad.fa-wifi-1:after,.fad.fa-wifi-weak:after{content:"\f6aa\f6aa"}.fa-duotone.fa-wind:after,.fad.fa-wind:after{content:"\f72e\f72e"}.fa-duotone.fa-wind-turbine:after,.fad.fa-wind-turbine:after{content:"\f89b\f89b"}.fa-duotone.fa-wind-circle-exclamation:after,.fa-duotone.fa-wind-warning:after,.fad.fa-wind-circle-exclamation:after,.fad.fa-wind-warning:after{content:"\f776\f776"}.fa-duotone.fa-window:after,.fad.fa-window:after{content:"\f40e\f40e"}.fa-duotone.fa-window-alt:after,.fa-duotone.fa-window-flip:after,.fad.fa-window-alt:after,.fad.fa-window-flip:after{content:"\f40f\f40f"}.fa-duotone.fa-window-frame:after,.fad.fa-window-frame:after{content:"\e04f\e04f"}.fa-duotone.fa-window-frame-open:after,.fad.fa-window-frame-open:after{content:"\e050\e050"}.fa-duotone.fa-window-maximize:after,.fad.fa-window-maximize:after{content:"\f2d0\f2d0"}.fa-duotone.fa-window-minimize:after,.fad.fa-window-minimize:after{content:"\f2d1\f2d1"}.fa-duotone.fa-window-restore:after,.fad.fa-window-restore:after{content:"\f2d2\f2d2"}.fa-duotone.fa-windsock:after,.fad.fa-windsock:after{content:"\f777\f777"}.fa-duotone.fa-wine-bottle:after,.fad.fa-wine-bottle:after{content:"\f72f\f72f"}.fa-duotone.fa-wine-glass:after,.fad.fa-wine-glass:after{content:"\f4e3\f4e3"}.fa-duotone.fa-fragile:after,.fa-duotone.fa-wine-glass-crack:after,.fad.fa-fragile:after,.fad.fa-wine-glass-crack:after{content:"\f4bb\f4bb"}.fa-duotone.fa-wine-glass-alt:after,.fa-duotone.fa-wine-glass-empty:after,.fad.fa-wine-glass-alt:after,.fad.fa-wine-glass-empty:after{content:"\f5ce\f5ce"}.fa-duotone.fa-krw:after,.fa-duotone.fa-won-sign:after,.fa-duotone.fa-won:after,.fad.fa-krw:after,.fad.fa-won-sign:after,.fad.fa-won:after{content:"\f159\f159"}.fa-duotone.fa-worm:after,.fad.fa-worm:after{content:"\e599\e599"}.fa-duotone.fa-wreath:after,.fad.fa-wreath:after{content:"\f7e2\f7e2"}.fa-duotone.fa-wrench:after,.fad.fa-wrench:after{content:"\f0ad\f0ad"}.fa-duotone.fa-wrench-simple:after,.fad.fa-wrench-simple:after{content:"\e2d1\e2d1"}.fa-duotone.fa-x:after,.fad.fa-x:after{content:"\58\58"}.fa-duotone.fa-x-ray:after,.fad.fa-x-ray:after{content:"\f497\f497"}.fa-duotone.fa-close:after,.fa-duotone.fa-multiply:after,.fa-duotone.fa-remove:after,.fa-duotone.fa-times:after,.fa-duotone.fa-xmark:after,.fad.fa-close:after,.fad.fa-multiply:after,.fad.fa-remove:after,.fad.fa-times:after,.fad.fa-xmark:after{content:"\f00d\f00d"}.fa-duotone.fa-xmark-large:after,.fad.fa-xmark-large:after{content:"\e59b\e59b"}.fa-duotone.fa-times-to-slot:after,.fa-duotone.fa-vote-nay:after,.fa-duotone.fa-xmark-to-slot:after,.fad.fa-times-to-slot:after,.fad.fa-vote-nay:after,.fad.fa-xmark-to-slot:after{content:"\f771\f771"}.fa-duotone.fa-xmarks-lines:after,.fad.fa-xmarks-lines:after{content:"\e59a\e59a"}.fa-duotone.fa-y:after,.fad.fa-y:after{content:"\59\59"}.fa-duotone.fa-cny:after,.fa-duotone.fa-jpy:after,.fa-duotone.fa-rmb:after,.fa-duotone.fa-yen-sign:after,.fa-duotone.fa-yen:after,.fad.fa-cny:after,.fad.fa-jpy:after,.fad.fa-rmb:after,.fad.fa-yen-sign:after,.fad.fa-yen:after{content:"\f157\f157"}.fa-duotone.fa-yin-yang:after,.fad.fa-yin-yang:after{content:"\f6ad\f6ad"}.fa-duotone.fa-z:after,.fad.fa-z:after{content:"\5a\5a"}:host,:root{--fa-font-light:normal 300 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-d5bbe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-d5bbe9.ttf) format("truetype");unicode-range:u+20-21,u+23,u+2b,u+3f,u+ae,u+d8,u+2013,u+201d,u+2190-2193,u+2205,u+2212,u+2303,u+231a,u+2399,u+23e9-23ea,u+23f8-23f9,u+23fb,u+23fe,u+25a0,u+25b2,u+25b6,u+25cf,u+25fb-25fc,u+2601,u+2615,u+261d,u+2665,u+26aa-26ab,u+26df,u+2709,u+270f,u+2713-2714,u+271d,u+273f,u+2753-2755,u+2757,u+2764,u+2795-2796,u+2b24,u+2b50,u+e017,u+e01f,u+e024,u+e045,u+e060,u+f001,u+f003-f007,u+f00c,u+f011-f012,u+f015-f017,u+f019,u+f023-f024,u+f02c-f02d,u+f02f-f031,u+f03a,u+f03d-f03e,u+f040-f041,u+f04a-f04e,u+f060-f065,u+f067-f068,u+f06b-f06d,u+f072,u+f075,u+f077,u+f07b,u+f084,u+f08a,u+f091,u+f093,u+f095-f096,u+f09d,u+f0a2,u+f0a6,u+f0ac-f0ad,u+f0b0,u+f0c0-f0c2,u+f0c5,u+f0c8-f0c9,u+f0cc,u+f0ce,u+f0d1,u+f0d6-f0d7,u+f0dc,u+f0e0,u+f0e5,u+f0e8,u+f0f3,u+f0f7,u+f106,u+f108-f109,u+f10c,u+f10e,u+f110-f111,u+f114,u+f11d-f11e,u+f121,u+f128-f12a,u+f132-f133,u+f135,u+f145,u+f14e,u+f15b,u+f186,u+f188,u+f1ab,u+f1ad,u+f1bb,u+f1c0,u+f1c2-f1c3,u+f1d8-f1d9,u+f1db,u+f1e4,u+f1ea-f1eb,u+f1f8,u+f205,u+f20a,u+f217,u+f21a,u+f21c-f21d,u+f233,u+f238,u+f251,u+f25d,u+f283,u+f292,u+f29e,u+f2a0,u+f2a7,u+f2bb-f2bc,u+f2c0,u+f2cc,u+f2db,u+f2e1,u+f2ec,u+f2f7,u+f303,u+f316,u+f328,u+f332,u+f335,u+f37e,u+f390,u+f3c5,u+f3ce,u+f3f4,u+f40e,u+f435,u+f481,u+f493,u+f4cc,u+f4d1,u+f4d8,u+f4e2,u+f503,u+f51b,u+f52b,u+f549,u+f54e,u+f555,u+f559,u+f56e-f570,u+f594,u+f5a1,u+f5aa-f5ab,u+f5b7,u+f5db-f5dc,u+f5f6,u+f5fd,u+f621,u+f64a,u+f64f,u+f654,u+f656,u+f673,u+f67d,u+f67f,u+f695,u+f69c,u+f6a8,u+f6e3,u+f6e9,u+f6ff,u+f715,u+f734,u+f755,u+f757,u+f773,u+f781,u+f784,u+f788,u+f7b2,u+f7b6,u+f7bd,u+f7d5,u+f7ee,u+f7ff,u+f804,u+f80a,u+f80c,u+f813,u+f82f,u+f855,u+f858-f859,u+f85c,u+f86d,u+f871,u+f893-f894,u+f8a9,u+f8b2,u+f8d6,u+f8d9,u+f8e7,u+f8ef,u+1f310,u+1f319,u+1f331-1f332,u+1f33c,u+1f381,u+1f39f,u+1f3a5-1f3a6,u+1f3b5,u+1f3c1,u+1f3c6,u+1f3cd,u+1f3d9,u+1f3e0,u+1f3e2,u+1f3e8,u+1f3eb,u+1f3f4,u+1f464,u+1f499-1f49c,u+1f4b3,u+1f4bb,u+1f4c1,u+1f4c4-1f4c6,u+1f4cb,u+1f4d4,u+1f4da,u+1f4de,u+1f4ea,u+1f4f0-1f4f1,u+1f4f6,u+1f509,u+1f511-1f512,u+1f514,u+1f517,u+1f525,u+1f527-1f528,u+1f534-1f535,u+1f547,u+1f553,u+1f57b,u+1f582,u+1f5a4-1f5a5,u+1f5a8,u+1f5b6,u+1f5bf,u+1f5cb,u+1f5d4,u+1f5e9,u+1f686,u+1f69a,u+1f6a2,u+1f6bf,u+1f6e1,u+1f7e0-1f7e4,u+1f90d-1f90e,u+1f95b,u+1f9e0-1f9e1,u+1f9ed,u+1fa99}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-e41116.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-e41116.ttf) format("truetype");unicode-range:u+20,u+24-25,u+a9,u+2328,u+2666,u+2672,u+267a-267b,u+2693,u+26a1,u+26ea,u+e010,u+e01b,u+e020-e021,u+e02f,u+e03a,u+e042,u+e046,u+e068,u+e06e,u+e074,u+e076,u+f008,u+f018,u+f01c,u+f025,u+f02a,u+f02e,u+f05b,u+f06e,u+f078,u+f086-f087,u+f097,u+f09c,u+f0a3,u+f0b1,u+f0c6,u+f0e6-f0e7,u+f0eb,u+f0f8,u+f112,u+f11c,u+f126,u+f12c-f12e,u+f130-f131,u+f13d,u+f140,u+f155,u+f164,u+f1ae,u+f1b2,u+f1b8,u+f1c1,u+f1ce,u+f1dc,u+f1e5-f1e6,u+f1ec,u+f1f9,u+f219,u+f21b,u+f22d,u+f234,u+f246,u+f24d,u+f275,u+f295,u+f2b5,u+f2cd,u+f2d2,u+f2fc,u+f302,u+f31a,u+f363,u+f3e5,u+f3fb,u+f44b,u+f47d,u+f48a,u+f48f-f490,u+f494,u+f498,u+f4b7,u+f4ca,u+f4d7,u+f508,u+f51d-f51e,u+f521-f522,u+f530,u+f535,u+f53e,u+f541,u+f543-f545,u+f548,u+f55d,u+f564,u+f56c,u+f577-f578,u+f590,u+f595,u+f5a2,u+f5b0,u+f5ba,u+f5bf,u+f5ca,u+f5ef,u+f5f2,u+f5fb,u+f63b,u+f649,u+f653,u+f65b,u+f664,u+f675,u+f6bf-f6c0,u+f6d5,u+f6f5,u+f6fa,u+f700,u+f70b,u+f70e,u+f71b,u+f72e-f72f,u+f733,u+f747,u+f75c,u+f762,u+f77c,u+f801,u+f814,u+f830,u+f845-f846,u+f850,u+f866,u+f875,u+f897,u+f89f,u+f8b1,u+f8bb,u+f8c7,u+f8d7,u+f8df-f8e0,u+f8ee,u+f8fd,u+1f337,u+1f356,u+1f39e,u+1f3a7,u+1f3b2,u+1f3c5,u+1f3d6,u+1f3e5,u+1f409,u+1f41f,u+1f441,u+1f44d,u+1f451,u+1f4a1,u+1f4b2,u+1f4bc-1f4bd,u+1f4ce-1f4cf,u+1f4dc,u+1f4e3,u+1f4fb,u+1f501,u+1f50c,u+1f513,u+1f516,u+1f52a,u+1f575,u+1f5a9,u+1f5ea,u+1f6c1,u+1f6e3,u+1f6eb,u+1f916,u+1f9a6,u+1f9e9,u+1f9fc,u+1f9fe,u+1fa90-1fa91}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-bbafe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-bbafe9.ttf) format("truetype");unicode-range:u+20,u+f293,u+f2b4,u+f425,u+f4e6}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-56ba33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-56ba33.ttf) format("truetype");unicode-range:u+20,u+e531}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-c046b6.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-c046b6.ttf) format("truetype");unicode-range:u+20,u+26-27,u+2a,u+30-39,u+40-42,u+60-62,u+ab,u+bb,u+2039-203a,u+21a4-21a7,u+21ba-21bb,u+21c4,u+21e4-21e5,u+2304,u+23ee,u+23f0,u+2625,u+269b,u+2731,u+e059-e05a,u+e089-e08a,u+e08c-e08d,u+e08f-e0ac,u+e2dc,u+e2df,u+e2e1,u+e2e3-e2e6,u+e33a,u+e3d4-e3d8,u+e467-e468,u+e48c-e48f,u+e4aa-e4c2,u+f01e,u+f021,u+f036-f039,u+f047-f049,u+f05e,u+f069,u+f07d-f07e,u+f08b,u+f08e,u+f090,u+f0e2,u+f0ec,u+f100-f105,u+f107,u+f148-f149,u+f15d-f15e,u+f160-f163,u+f175-f178,u+f1fa,u+f245,u+f290,u+f2b9-f2ba,u+f31d,u+f336,u+f33d-f33e,u+f340-f345,u+f34e,u+f361,u+f364,u+f366,u+f462,u+f464,u+f54d,u+f557,u+f5d1-f5d4,u+f616,u+f640,u+f644-f646,u+f666,u+f6ae,u+f6b0,u+f6b2-f6b4,u+f732,u+f779,u+f77d-f77e,u+f7e5,u+f7f9,u+f843-f844,u+f847,u+f881-f88f,u+f8a0-f8a3,u+f8f4-f8f6,u+1f34e-1f34f,u+1f392,u+1f47d-1f47e,u+1f5d8,u+1f6ab,u+1f6ad,u+1f6cd,u+1f953,u+1f956,u+1f96f,u+1f9a1,u+1f9ee,u+1fa79,u+1fa93,u+1fa95}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-792d0c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-792d0c.ttf) format("truetype");unicode-range:u+20,u+28-29,u+43,u+5b,u+5d,u+63,u+7b,u+7d,u+2623,u+26be,u+e05b,u+e0ad-e0ce,u+e2e7-e2eb,u+e2f2,u+e33b-e33f,u+e3da-e3e4,u+e469-e46d,u+e490,u+e4c3-e4dc,u+f032,u+f0a1,u+f0fc,u+f187,u+f19c,u+f1e2,u+f1f6-f1f7,u+f206-f207,u+f236,u+f240-f244,u+f291,u+f293,u+f2a1,u+f376-f377,u+f432-f434,u+f436-f438,u+f458,u+f465-f469,u+f487,u+f499-f49a,u+f49c-f49e,u+f4a0-f4a1,u+f517-f518,u+f51a,u+f550,u+f558,u+f55b-f55c,u+f55e,u+f562,u+f5d5-f5da,u+f5dd,u+f647-f648,u+f64b,u+f66a,u+f677,u+f687,u+f6b5-f6b9,u+f735,u+f77f-f780,u+f782,u+f7e6-f7ed,u+f7f1,u+f805,u+f823,u+f827-f828,u+f848-f849,u+f84c-f84f,u+f851-f854,u+f856-f857,u+f89c-f89d,u+f8a5,u+f8f7-f8fc,u+1f32f,u+1f345,u+1f354,u+1f35e,u+1f367,u+1f3af,u+1f3c0,u+1f3f9,u+1f4a3,u+1f4d5-1f4d9,u+1f4e2,u+1f4e6,u+1f4fe,u+1f50b,u+1f515,u+1f56b,u+1f56d-1f56e,u+1f5c4,u+1f5f3,u+1f68d,u+1f6b2,u+1f6cc,u+1f6ce-1f6cf,u+1f94a,u+1f94e,u+1f963,u+1f966,u+1f97e,u+1f9b4,u+1f9c8,u+1f9f9}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-16f2f9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-16f2f9.ttf) format("truetype");unicode-range:u+20,u+2329-232a,u+265a-265f,u+26fa,u+e000-e001,u+e0cf-e0df,u+e0e1-e105,u+e341-e344,u+e3e5-e3f7,u+e46e-e474,u+e4dd-e4e1,u+e59c-e59d,u+f053-f054,u+f058,u+f05d,u+f073,u+f07a,u+f080,u+f083,u+f0a8-f0ab,u+f0d8-f0da,u+f137-f13a,u+f1b9,u+f1fd-f1fe,u+f200-f201,u+f218,u+f271-f274,u+f322-f325,u+f32d-f32e,u+f330-f331,u+f333-f334,u+f439-f448,u+f46b,u+f474-f476,u+f51c,u+f55f-f560,u+f59d,u+f5de-f5e7,u+f643,u+f64c-f64e,u+f6a3,u+f6ba-f6be,u+f6c1,u+f736,u+f772,u+f783,u+f786-f787,u+f78a-f78b,u+f79e-f79f,u+f7da,u+f7ef-f7f0,u+f832-f833,u+f85a-f85b,u+f8a4,u+f8a7-f8a8,u+f8aa-f8ac,u+f8ec,u+f8fe-f8ff,u+1f330,u+1f335,u+1f36b-1f36c,u+1f370,u+1f382,u+1f408,u+1f4c9,u+1f4f7,u+1f4f9,u+1f4fc,u+1f56f,u+1f5ad,u+1f697-1f698,u+1f6a1,u+1f6d2,u+1f942,u+1f955,u+1f96b,u+1f9c0}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-3eb023.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-3eb023.ttf) format("truetype");unicode-range:u+20,u+2c,u+3a,u+24bd,u+25d0,u+2622,u+2663,u+26b0,u+26c5-26c6,u+e002-e003,u+e030-e032,u+e051,u+e106-e140,u+e142-e14f,u+e2f4-e2f6,u+e345-e35f,u+e361,u+e3f8-e3fd,u+e491-e492,u+e4e2-e4e4,u+f01a-f01b,u+f01d,u+f042,u+f055-f057,u+f059-f05a,u+f05c,u+f066,u+f06a,u+f0ed-f0ee,u+f144,u+f18e,u+f190,u+f192,u+f1da,u+f27b,u+f28b-f28e,u+f29c,u+f2bd-f2be,u+f2e8,u+f327,u+f358-f35b,u+f381-f382,u+f386-f387,u+f46c-f46d,u+f47e,u+f4ac-f4b5,u+f4b9,u+f4c7,u+f51f,u+f568,u+f5e8-f5e9,u+f602,u+f615,u+f651,u+f6c2-f6c4,u+f6c6,u+f737-f746,u+f74e,u+f76c-f76e,u+f7ba,u+f7cd,u+f7f3,u+f7f5,u+f8ad-f8ae,u+f8b0,u+1f326-1f329,u+1f32b,u+1f4ac,u+1f4bf-1f4c0,u+1f518,u+1f5b8}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-b1cb49.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-b1cb49.ttf) format("truetype");unicode-range:u+20,u+22,u+3d,u+44-46,u+64-66,u+f7,u+20ac,u+232b,u+23cf,u+2638-2639,u+2680-2685,u+2797,u+e150-e152,u+e154-e158,u+e15a-e166,u+e168-e173,u+e2fa,u+e2fe,u+e362-e375,u+e3fe-e3ff,u+e401-e409,u+e475-e480,u+e4e5-e4e9,u+e59f,u+f043,u+f052,u+f070,u+f119,u+f125,u+f141-f142,u+f153,u+f1b3,u+f1fb,u+f2a2,u+f2a4,u+f2a8,u+f2b6-f2b7,u+f309,u+f320,u+f326,u+f349-f34a,u+f354,u+f389-f38a,u+f39b-f39c,u+f422,u+f449-f44a,u+f46e-f46f,u+f471-f473,u+f4b8,u+f4ba,u+f520,u+f523-f52a,u+f52c,u+f542,u+f556,u+f55a,u+f563,u+f565,u+f567,u+f569-f56a,u+f579,u+f57c-f57e,u+f5c7,u+f5ea-f5ee,u+f5f0,u+f655,u+f657-f658,u+f674,u+f6b1,u+f6c5,u+f6c7-f6c8,u+f6cb,u+f6cd-f6d4,u+f6d6-f6db,u+f748-f749,u+f750,u+f78e-f78f,u+f792-f796,u+f7a2,u+f7f6-f7f8,u+f7fa-f7fc,u+f85f-f862,u+f8b3-f8b5,u+f8cc-f8cd,u+1f30d-1f30f,u+1f33d,u+1f357,u+1f369-1f36a,u+1f36e,u+1f3cf,u+1f404,u+1f415,u+1f418,u+1f442,u+1f4a7,u+1f54a,u+1f5b1,u+1f620,u+1f633,u+1f6aa,u+1f92d,u+1f941,u+1f94c,u+1f950,u+1f952,u+1f95a,u+1f964,u+1f980,u+1f986,u+1f98c,u+1f9ae,u+1f9c1,u+1f9ec,u+1fae4-1fae5}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-493f48.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-493f48.ttf) format("truetype");unicode-range:u+20,u+2698,u+e004-e006,u+e053-e054,u+e174-e18d,u+e2ff-e304,u+e376-e3a9,u+e40a-e40c,u+e481-e485,u+e493-e494,u+e4ea-e4f3,u+e5a0-e5a1,u+f07c,u+f0c3,u+f0c7,u+f0f6,u+f115,u+f118,u+f11a,u+f134,u+f15c,u+f1ac,u+f1c4-f1c9,u+f317-f319,u+f31c,u+f3a0,u+f44c,u+f456,u+f46a,u+f477-f478,u+f4da,u+f52d,u+f56b,u+f56d,u+f571-f576,u+f57a,u+f57f-f58c,u+f596-f59c,u+f5a4-f5a5,u+f5b3-f5b4,u+f5b8-f5b9,u+f5c2,u+f5c8,u+f5f3,u+f659-f65a,u+f65c-f65d,u+f662,u+f6dd,u+f6df-f6e1,u+f74b-f74d,u+f79a,u+f7e4,u+f7fd-f7fe,u+f800,u+f863-f865,u+f877,u+f8b6-f8ba,u+1f3d1,u+1f4be,u+1f4c2,u+1f4dd,u+1f4e0,u+1f526,u+1f5aa,u+1f5b7,u+1f5b9,u+1f5bb,u+1f5c1,u+1f5ce,u+1f600-1f606,u+1f609-1f60a,u+1f60d,u+1f610,u+1f617-1f619,u+1f61b-1f61d,u+1f622,u+1f626,u+1f62b-1f62e,u+1f636,u+1f642,u+1f644,u+1f6a9,u+1f6b0,u+1f923,u+1f929,u+1f959,u+1f979,u+1f9c6,u+1f9ef,u+1fab6,u+1fad3,u+1fae0-1fae3}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-910f33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-910f33.ttf) format("truetype");unicode-range:u+20,u+3e,u+47-48,u+67-68,u+23ed,u+2699,u+26bd,u+26fd,u+270a-270c,u+2b23,u+e008-e00c,u+e05c-e05f,u+e061-e064,u+e18e-e1ad,u+e306-e307,u+e3aa-e3ad,u+e40d-e40e,u+e410-e417,u+e486,u+e495-e498,u+e4f4-e504,u+e5a2-e5a5,u+f013,u+f050-f051,u+f085,u+f0a0,u+f0a4-f0a5,u+f0a7,u+f0e3-f0e4,u+f11b,u+f19d,u+f1e3,u+f21e,u+f255-f25b,u+f2a3,u+f2b4,u+f2e3,u+f2e6,u+f307,u+f312-f315,u+f3a5,u+f3fd,u+f425,u+f44e-f451,u+f461,u+f47a-f47c,u+f4bc-f4c6,u+f4e6,u+f52e-f52f,u+f531-f533,u+f58d-f58f,u+f5f4-f5f5,u+f624-f62d,u+f65e-f661,u+f663,u+f665,u+f684,u+f6de,u+f6e2,u+f6e4-f6e8,u+f6ea-f6eb,u+f79c-f79d,u+f7a3-f7a9,u+f802-f803,u+f806-f809,u+f867-f86b,u+f8bc-f8c2,u+1f35f,u+1f393,u+1f3ae,u+1f3b8,u+1f3c8,u+1f453,u+1f47b,u+1f48e,u+1f494,u+1f54e,u+1f595-1f596,u+1f5b4,u+1f681,u+1f91a,u+1f91d,u+1f9c4,u+1fad5}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-25ee0f.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-25ee0f.ttf) format("truetype");unicode-range:u+20,u+2d,u+3c,u+49-4c,u+69-6c,u+2015,u+20a4,u+20b4,u+2194,u+221e,u+22c2,u+231b,u+23f3,u+262c,u+267e,u+26f8,u+e00d-e00f,u+e011-e012,u+e014-e016,u+e018-e019,u+e065-e066,u+e1ae-e1d4,u+e30c,u+e3ae-e3b6,u+e418-e421,u+e487,u+e505-e51e,u+e5a6-e5a7,u+f033,u+f03c,u+f094,u+f0ae,u+f0ca-f0cb,u+f0fb,u+f124,u+f127,u+f195,u+f1cd,u+f250,u+f252-f254,u+f2c1-f2c3,u+f2e4,u+f2ee,u+f300,u+f30a,u+f30e,u+f310-f311,u+f337,u+f348,u+f34b,u+f355,u+f3b3,u+f3e0,u+f453-f454,u+f479,u+f47f,u+f4c9,u+f4cb,u+f534,u+f536-f537,u+f591,u+f593,u+f5f9,u+f5fc,u+f5fe-f601,u+f603,u+f605-f606,u+f667-f669,u+f66b-f672,u+f6ed-f6f4,u+f6f6-f6f7,u+f74f,u+f751-f752,u+f7aa-f7ae,u+f7f2,u+f80b,u+f80d-f812,u+f86c,u+f86f-f870,u+f87a,u+f8c3-f8c6,u+f8c8-f8c9,u+1f32d,u+1f341,u+1f34b,u+1f368,u+1f36f,u+1f383,u+1f3db,u+1f3dd,u+1f3ed,u+1f40e,u+1f444,u+1f4af,u+1f4e4-1f4e5,u+1f54b,u+1f579,u+1f5dd,u+1f5e2,u+1f96c,u+1f99b,u+1f99e,u+1fa81}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-c238fb.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-c238fb.ttf) format("truetype");unicode-range:u+20,u+4d-4f,u+6d-6f,u+2604,u+263f,u+2642,u+26a3,u+26a5-26a6,u+26a8-26a9,u+26b2,u+26f0,u+e067,u+e1d5-e205,u+e30f-e313,u+e316,u+e3b7-e3c1,u+e422-e426,u+e49a,u+e49c-e49f,u+e51f-e52f,u+e531-e532,u+e5a8,u+f000,u+f002,u+f00e,u+f010,u+f076,u+f0f4,u+f10b,u+f222-f224,u+f227,u+f229-f22c,u+f247-f24a,u+f276,u+f278-f27a,u+f2f0,u+f301,u+f306,u+f308,u+f30d,u+f31e,u+f3c1-f3c2,u+f3c9,u+f3cd,u+f3cf,u+f3d1,u+f455,u+f4a2-f4ab,u+f4b6,u+f538-f53d,u+f561,u+f57b,u+f59f-f5a0,u+f5a6-f5a7,u+f604,u+f607-f60e,u+f610-f611,u+f613-f614,u+f630,u+f650,u+f652,u+f676,u+f678,u+f688-f689,u+f6f8-f6f9,u+f6fb-f6fe,u+f74a,u+f753-f754,u+f78c,u+f7b4-f7b5,u+f7b7,u+f7f4,u+f872-f874,u+f8af,u+f8cb,u+f8ce-f8d1,u+1f344,u+1f36d,u+1f378,u+1f399,u+1f3a4,u+1f3ad,u+1f3d4,u+1f412,u+1f4cd,u+1f50d,u+1f52c,u+1f54c,u+1f5fa,u+1f6d1,u+1f9f2,u+1fac1}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-cbbfb4.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-cbbfb4.ttf) format("truetype");unicode-range:u+20,u+2e,u+50,u+70,u+7c,u+b6,u+260e,u+262e,u+26f7,u+2708,u+2711-2712,u+e01c-e01d,u+e022-e023,u+e069,u+e206-e229,u+e22b-e22f,u+e317-e318,u+e31a-e31c,u+e31e-e31f,u+e3c2-e3c4,u+e427-e439,u+e43b-e43d,u+e4a1,u+e533-e560,u+e59e,u+e5a9-e5aa,u+f03b,u+f044,u+f0ea,u+f182-f183,u+f1b0,u+f1dd,u+f1fc,u+f29d,u+f2ce,u+f304-f305,u+f3dd-f3de,u+f470,u+f482-f484,u+f4cd-f4d0,u+f4d2-f4d3,u+f53f,u+f554,u+f5a9,u+f5ac-f5af,u+f5c4,u+f618,u+f679-f67a,u+f67c,u+f67e,u+f680,u+f683,u+f6ec,u+f701-f703,u+f705-f706,u+f70c,u+f756,u+f758-f759,u+f7b8,u+f7c5,u+f7c7-f7cb,u+f7ce,u+f7d1,u+f815-f818,u+f84a-f84b,u+f85e,u+f876,u+f878-f879,u+f87c,u+f8d3-f8d5,u+1f336,u+1f355,u+1f373,u+1f3a8,u+1f3b9,u+1f3c2-1f3c3,u+1f3ca,u+1f416,u+1f4df,u+1f549,u+1f57d,u+1f58a-1f58c,u+1f6b4-1f6b6,u+1f6d0,u+1f6ec,u+1f958,u+1f95c,u+1f95e,u+1f967,u+1f9c5,u+1f9cd,u+1fad1}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-aa90b0.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-aa90b0.ttf) format("truetype");unicode-range:u+20,u+3b,u+51-53,u+71-73,u+201c,u+20a8,u+20aa,u+20bd,u+2211,u+25ac,u+2696,u+26e8,u+2700,u+2702,u+2704,u+2b95,u+e025-e02c,u+e06a-e06c,u+e070,u+e231,u+e234-e244,u+e246-e24f,u+e2d2,u+e322-e324,u+e3c5-e3c9,u+e43e-e449,u+e4a2-e4a5,u+e561-e56f,u+e571-e575,u+e5ab,u+f022,u+f029,u+f045,u+f074,u+f079,u+f09e,u+f0c4,u+f10d,u+f122,u+f14d,u+f156,u+f158,u+f197,u+f1e0,u+f20b,u+f24e,u+f2d4,u+f2ea,u+f2f1,u+f2f5-f2f6,u+f2f8-f2fb,u+f2fe,u+f30b,u+f347,u+f34c,u+f356,u+f362,u+f365,u+f367,u+f3ed,u+f410,u+f45a-f45b,u+f463,u+f480,u+f485-f486,u+f488-f489,u+f4d4,u+f4d6,u+f4d9,u+f515-f516,u+f546-f547,u+f54a-f54b,u+f54f,u+f553,u+f5b1,u+f619-f61f,u+f63d,u+f641,u+f685-f686,u+f68a-f68b,u+f690-f694,u+f6a0,u+f707-f70a,u+f70d,u+f70f-f713,u+f75a-f75b,u+f75e,u+f7b9,u+f7be-f7c3,u+f7d9,u+f819-f822,u+f87e-f87f,u+f8d8,u+f8da-f8dc,u+f8f3,u+1f308,u+1f372,u+1f37f,u+1f397,u+1f3b7,u+1f407,u+1f40f,u+1f411,u+1f455,u+1f4a9,u+1f4b0,u+1f4d0,u+1f4e1,u+1f500,u+1f502,u+1f504,u+1f680,u+1f6f0,u+1f954,u+1f957,u+1f968,u+1f96a,u+1f990,u+1f9c2,u+1f9e3,u+1fa9b}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-9d9a2c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-9d9a2c.ttf) format("truetype");unicode-range:u+20,u+2f,u+5c,u+a3,u+2139,u+2197,u+221a,u+23f1,u+2603,u+2611,u+2620,u+262a,u+2660,u+26c4,u+2705,u+2721,u+2728,u+2744,u+2746,u+274e,u+27a1,u+2b05-2b07,u+2b1b-2b1c,u+e02d-e02e,u+e033-e039,u+e06d,u+e06f,u+e071,u+e250-e28e,u+e329-e32b,u+e3ca-e3ce,u+e400,u+e44b-e450,u+e488-e489,u+e4a6,u+e576-e579,u+e5af,u+f046,u+f089,u+f098,u+f0dd-f0de,u+f0f1,u+f0fd-f0fe,u+f123,u+f143,u+f146-f147,u+f14a-f14c,u+f150-f152,u+f154,u+f191,u+f196,u+f199,u+f1b1,u+f1de,u+f1e1,u+f277,u+f2d3,u+f2dc,u+f2e5,u+f2e9,u+f2f2-f2f4,u+f2fd,u+f30f,u+f321,u+f329-f32c,u+f339-f33c,u+f350-f353,u+f360,u+f3f0-f3f2,u+f45c,u+f48d,u+f49b,u+f49f,u+f4c8,u+f540,u+f54c,u+f551,u+f5bb-f5bd,u+f5c0,u+f5d0,u+f617,u+f620,u+f622-f623,u+f67b,u+f681-f682,u+f68c-f68f,u+f696-f69a,u+f714,u+f716-f71a,u+f75f-f761,u+f79b,u+f7c4,u+f7cc,u+f7cf-f7d0,u+f7d2,u+f7d4,u+f824-f825,u+f87b,u+f880,u+f890-f891,u+f8dd-f8de,u+1f17f,u+1f320,u+1f366,u+1f40d,u+1f480,u+1f49f,u+1f4a4,u+1f571,u+1f577-1f578,u+1f6ac,u+1f7e5-1f7eb,u+1f944,u+1f969,u+1f991,u+1f9e6,u+1fa7a}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-f064f7.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-f064f7.ttf) format("truetype");unicode-range:u+20,u+54,u+74,u+7e,u+20b8,u+2122,u+2600,u+2694,u+26a0,u+26a7,u+26e9,u+e03b-e041,u+e043-e044,u+e072,u+e28f-e2ba,u+e32d-e330,u+e3cf-e3d0,u+e451-e454,u+e48a-e48b,u+e57a-e58f,u+e5b0-e5b4,u+f009-f00b,u+f014,u+f02b,u+f034-f035,u+f071,u+f088,u+f08d,u+f0db,u+f0f2,u+f0f9-f0fa,u+f10a,u+f120,u+f12b,u+f165,u+f185,u+f1ba,u+f204,u+f225,u+f239,u+f25c,u+f2c7-f2cb,u+f2eb,u+f2ed,u+f3fa,u+f3fc,u+f3ff-f400,u+f45d-f45e,u+f48b-f48c,u+f48e,u+f491,u+f4db-f4e0,u+f519,u+f552,u+f566,u+f5c1,u+f5c3,u+f5c9,u+f62e-f62f,u+f631-f63a,u+f63c,u+f69b,u+f69e-f69f,u+f6a1,u+f71c-f725,u+f763-f76b,u+f76f,u+f7d7-f7d8,u+f7db-f7de,u+f826,u+f829-f82b,u+f85d,u+f86e,u+f87d,u+f892,u+f895-f896,u+f8e2-f8e3,u+1f305,u+1f307,u+1f321,u+1f324,u+1f32a,u+1f32e,u+1f333-1f334,u+1f363,u+1f384,u+1f3ba,u+1f3be,u+1f3d3,u+1f3f7,u+1f44e,u+1f489,u+1f4cc,u+1f523,u+1f52d,u+1f54d,u+1f576,u+1f588,u+1f5e1,u+1f68a,u+1f691,u+1f696,u+1f69c,u+1f6a6,u+1f6bd,u+1f6fb,u+1f9b7,u+1f9f0,u+1f9f3,u+1f9fb,u+1faa5-1faa6,u+1fad4}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:300;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-b1cf62.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-b1cf62.ttf) format("truetype");unicode-range:u+20,u+55-5a,u+75-7a,u+a5,u+d7,u+20a9,u+2195,u+223f,u+22c3,u+262f,u+2640,u+26a2,u+26a4,u+2715-2716,u+274c,u+2934-2935,u+2b0d,u+e047-e048,u+e04a-e050,u+e058,u+e073,u+e075,u+e085-e086,u+e2bb-e2cf,u+e2d1,u+e331,u+e333-e334,u+e337-e339,u+e3d1-e3d3,u+e455-e466,u+e4a7-e4a9,u+e590-e59b,u+f00d,u+f026-f028,u+f0b2,u+f0cd,u+f0d0,u+f0e9,u+f0f0,u+f0f5,u+f13e,u+f157,u+f159,u+f193,u+f221,u+f226,u+f228,u+f235,u+f26c,u+f29a,u+f2d0-f2d1,u+f2e2,u+f2e7,u+f30c,u+f338,u+f346,u+f34d,u+f357,u+f35d,u+f3be-f3bf,u+f401,u+f406,u+f40f,u+f424,u+f45f-f460,u+f492,u+f495-f497,u+f4bb,u+f4e1,u+f4e3,u+f4fa-f502,u+f504-f507,u+f509,u+f5b6,u+f5c5,u+f5cb,u+f5cd-f5ce,u+f5f8,u+f63e,u+f6a2,u+f6a4-f6a7,u+f6a9-f6ad,u+f726-f72d,u+f770-f771,u+f774-f777,u+f7a0-f7a1,u+f7e2,u+f82c-f82e,u+f831,u+f83e,u+f898-f89b,u+f8e4-f8e6,u+f8e9-f8eb,u+f8ed,u+f8f0-f8f2,u+1f30b,u+1f374,u+1f377,u+1f3bb,u+1f3d0,u+1f40b,u+1f422,u+1f465,u+1f477,u+1f4fa,u+1f507-1f508,u+1f50a,u+1f5d5-1f5d6,u+1f5d9,u+1f690,u+1f6f8,u+1f943,u+1f977,u+1f984,u+1f9c7,u+1f9ea,u+1fa9f}.fa-light,.fal{font-family:"Font Awesome 6 Pro";font-weight:300}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-d5bbe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-d5bbe9.ttf) format("truetype");unicode-range:u+20,u+ae,u+23fe,u+25a0,u+25cf,u+25fb-25fc,u+261d,u+2665,u+26aa-26ab,u+2709,u+2764,u+2b24,u+2b50,u+f003-f007,u+f016-f017,u+f024,u+f03e,u+f075,u+f07b,u+f08a,u+f096,u+f09d,u+f0a2,u+f0a6,u+f0c5,u+f0c8,u+f0e0,u+f0e5,u+f0f3,u+f0f7,u+f10c,u+f111,u+f114,u+f11d,u+f133,u+f14e,u+f15b,u+f186,u+f1ad,u+f1c2-f1c3,u+f1d8-f1d9,u+f1db,u+f1ea,u+f20a,u+f25d,u+f283,u+f2bb-f2bc,u+f2c0,u+f328,u+1f319,u+1f3e2,u+1f3f4,u+1f464,u+1f499-1f49c,u+1f4b3,u+1f4c1,u+1f4c4-1f4c6,u+1f4cb,u+1f4f0,u+1f514,u+1f534-1f535,u+1f553,u+1f582,u+1f5a4,u+1f5bf,u+1f5cb,u+1f5e9,u+1f7e0-1f7e4,u+1f90d-1f90e,u+1f9e1,u+1f9ed}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-d5bbe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-d5bbe9.ttf) format("truetype");unicode-range:u+20-21,u+23,u+2b,u+3f,u+d8,u+2013,u+201d,u+2190-2193,u+2205,u+2212,u+2303,u+231a,u+2399,u+23e9-23ea,u+23f8-23f9,u+23fb,u+25b2,u+25b6,u+2601,u+2615,u+26df,u+270f,u+2713-2714,u+271d,u+273f,u+2753-2755,u+2757,u+2795-2796,u+e017,u+e01f,u+e024,u+e045,u+e060,u+f001,u+f00c,u+f011-f012,u+f015,u+f019,u+f023,u+f02c-f02d,u+f02f-f031,u+f03a,u+f03d,u+f040-f041,u+f04a-f04e,u+f060-f065,u+f067-f068,u+f06b-f06d,u+f072,u+f077,u+f084,u+f091,u+f093,u+f095,u+f0ac-f0ad,u+f0b0,u+f0c0-f0c2,u+f0c9,u+f0cc,u+f0ce,u+f0d1,u+f0d6-f0d7,u+f0dc,u+f0e8,u+f106,u+f108-f109,u+f10e,u+f110,u+f11e,u+f121,u+f128-f12a,u+f132,u+f135,u+f145,u+f188,u+f1ab,u+f1bb,u+f1c0,u+f1e4,u+f1eb,u+f1f8,u+f205,u+f217,u+f21a,u+f21c-f21d,u+f233,u+f238,u+f251,u+f292,u+f29e,u+f2a0,u+f2a7,u+f2cc,u+f2db,u+f2e1,u+f2ec,u+f2f7,u+f303,u+f316,u+f332,u+f335,u+f37e,u+f390,u+f3c5,u+f3ce,u+f3f4,u+f40e,u+f435,u+f481,u+f493,u+f4cc,u+f4d1,u+f4d8,u+f4e2,u+f503,u+f51b,u+f52b,u+f549,u+f54e,u+f555,u+f559,u+f56e-f570,u+f594,u+f5a1,u+f5aa-f5ab,u+f5b7,u+f5db-f5dc,u+f5f6,u+f5fd,u+f621,u+f64a,u+f64f,u+f654,u+f656,u+f673,u+f67d,u+f67f,u+f695,u+f69c,u+f6a8,u+f6e3,u+f6e9,u+f6ff,u+f715,u+f734,u+f755,u+f757,u+f773,u+f781,u+f784,u+f788,u+f7b2,u+f7b6,u+f7bd,u+f7d5,u+f7ee,u+f7ff,u+f804,u+f80a,u+f80c,u+f813,u+f82f,u+f855,u+f858-f859,u+f85c,u+f86d,u+f871,u+f893-f894,u+f8a9,u+f8b2,u+f8d6,u+f8d9,u+f8e7,u+f8ef,u+1f310,u+1f331-1f332,u+1f33c,u+1f381,u+1f39f,u+1f3a5-1f3a6,u+1f3b5,u+1f3c1,u+1f3c6,u+1f3cd,u+1f3d9,u+1f3e0,u+1f3e8,u+1f3eb,u+1f4bb,u+1f4d4,u+1f4da,u+1f4de,u+1f4ea,u+1f4f1,u+1f4f6,u+1f509,u+1f511-1f512,u+1f517,u+1f525,u+1f527-1f528,u+1f547,u+1f57b,u+1f5a5,u+1f5a8,u+1f5b6,u+1f5d4,u+1f686,u+1f69a,u+1f6a2,u+1f6bf,u+1f6e1,u+1f95b,u+1f9e0,u+1fa99}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-e41116.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-e41116.ttf) format("truetype");unicode-range:u+20,u+a9,u+2328,u+f02e,u+f06e,u+f086-f087,u+f097,u+f0e6,u+f0eb,u+f0f8,u+f11c,u+f164,u+f1c1,u+f1f9,u+f24d,u+f2b5,u+f2d2,u+f302,u+f47d,u+1f3e5,u+1f441,u+1f44d,u+1f4a1,u+1f516,u+1f5ea}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-e41116.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-e41116.ttf) format("truetype");unicode-range:u+20,u+24-25,u+2666,u+2672,u+267a-267b,u+2693,u+26a1,u+26ea,u+e010,u+e01b,u+e020-e021,u+e02f,u+e03a,u+e042,u+e046,u+e068,u+e06e,u+e074,u+e076,u+f008,u+f018,u+f01c,u+f025,u+f02a,u+f05b,u+f078,u+f09c,u+f0a3,u+f0b1,u+f0c6,u+f0e7,u+f112,u+f126,u+f12c-f12e,u+f130-f131,u+f13d,u+f140,u+f155,u+f1ae,u+f1b2,u+f1b8,u+f1ce,u+f1dc,u+f1e5-f1e6,u+f1ec,u+f219,u+f21b,u+f22d,u+f234,u+f246,u+f275,u+f295,u+f2cd,u+f2fc,u+f31a,u+f363,u+f3e5,u+f3fb,u+f44b,u+f48a,u+f48f-f490,u+f494,u+f498,u+f4b7,u+f4ca,u+f4d7,u+f508,u+f51d-f51e,u+f521-f522,u+f530,u+f535,u+f53e,u+f541,u+f543-f545,u+f548,u+f55d,u+f564,u+f56c,u+f577-f578,u+f590,u+f595,u+f5a2,u+f5b0,u+f5ba,u+f5bf,u+f5ca,u+f5ef,u+f5f2,u+f5fb,u+f63b,u+f649,u+f653,u+f65b,u+f664,u+f675,u+f6bf-f6c0,u+f6d5,u+f6f5,u+f6fa,u+f700,u+f70b,u+f70e,u+f71b,u+f72e-f72f,u+f733,u+f747,u+f75c,u+f762,u+f77c,u+f801,u+f814,u+f830,u+f845-f846,u+f850,u+f866,u+f875,u+f897,u+f89f,u+f8b1,u+f8bb,u+f8c7,u+f8d7,u+f8df-f8e0,u+f8ee,u+f8fd,u+1f337,u+1f356,u+1f39e,u+1f3a7,u+1f3b2,u+1f3c5,u+1f3d6,u+1f409,u+1f41f,u+1f451,u+1f4b2,u+1f4bc-1f4bd,u+1f4ce-1f4cf,u+1f4dc,u+1f4e3,u+1f4fb,u+1f501,u+1f50c,u+1f513,u+1f52a,u+1f575,u+1f5a9,u+1f6c1,u+1f6e3,u+1f6eb,u+1f916,u+1f9a6,u+1f9e9,u+1f9fc,u+1f9fe,u+1fa90-1fa91}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-bbafe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-bbafe9.ttf) format("truetype");unicode-range:u+20,u+f2b4,u+f425,u+f4e6}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-bbafe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-bbafe9.ttf) format("truetype");unicode-range:u+20,u+f293}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-56ba33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-56ba33.ttf) format("truetype");unicode-range:u+20,u+e531}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c046b6.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c046b6.ttf) format("truetype");unicode-range:u+20,u+f2b9-f2ba}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c046b6.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c046b6.ttf) format("truetype");unicode-range:u+20,u+26-27,u+2a,u+30-39,u+40-42,u+60-62,u+ab,u+bb,u+2039-203a,u+21a4-21a7,u+21ba-21bb,u+21c4,u+21e4-21e5,u+2304,u+23ee,u+23f0,u+2625,u+269b,u+2731,u+e059-e05a,u+e089-e08a,u+e08c-e08d,u+e08f-e0ac,u+e2dc,u+e2df,u+e2e1,u+e2e3-e2e6,u+e33a,u+e3d4-e3d8,u+e467-e468,u+e48c-e48f,u+e4aa-e4c2,u+f01e,u+f021,u+f036-f039,u+f047-f049,u+f05e,u+f069,u+f07d-f07e,u+f08b,u+f08e,u+f090,u+f0e2,u+f0ec,u+f100-f105,u+f107,u+f148-f149,u+f15d-f15e,u+f160-f163,u+f175-f178,u+f1fa,u+f245,u+f290,u+f31d,u+f336,u+f33d-f33e,u+f340-f345,u+f34e,u+f361,u+f364,u+f366,u+f462,u+f464,u+f54d,u+f557,u+f5d1-f5d4,u+f616,u+f640,u+f644-f646,u+f666,u+f6ae,u+f6b0,u+f6b2-f6b4,u+f732,u+f779,u+f77d-f77e,u+f7e5,u+f7f9,u+f843-f844,u+f847,u+f881-f88f,u+f8a0-f8a3,u+f8f4-f8f6,u+1f34e-1f34f,u+1f392,u+1f47d-1f47e,u+1f5d8,u+1f6ab,u+1f6ad,u+1f6cd,u+1f953,u+1f956,u+1f96f,u+1f9a1,u+1f9ee,u+1fa79,u+1fa93,u+1fa95}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-792d0c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-792d0c.ttf) format("truetype");unicode-range:u+20,u+f1f6-f1f7,u+1f515}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-792d0c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-792d0c.ttf) format("truetype");unicode-range:u+20,u+28-29,u+43,u+5b,u+5d,u+63,u+7b,u+7d,u+2623,u+26be,u+e05b,u+e0ad-e0ce,u+e2e7-e2eb,u+e2f2,u+e33b-e33f,u+e3da-e3e4,u+e469-e46d,u+e490,u+e4c3-e4dc,u+f032,u+f0a1,u+f0fc,u+f187,u+f19c,u+f1e2,u+f206-f207,u+f236,u+f240-f244,u+f291,u+f293,u+f2a1,u+f376-f377,u+f432-f434,u+f436-f438,u+f458,u+f465-f469,u+f487,u+f499-f49a,u+f49c-f49e,u+f4a0-f4a1,u+f517-f518,u+f51a,u+f550,u+f558,u+f55b-f55c,u+f55e,u+f562,u+f5d5-f5da,u+f5dd,u+f647-f648,u+f64b,u+f66a,u+f677,u+f687,u+f6b5-f6b9,u+f735,u+f77f-f780,u+f782,u+f7e6-f7ed,u+f7f1,u+f805,u+f823,u+f827-f828,u+f848-f849,u+f84c-f84f,u+f851-f854,u+f856-f857,u+f89c-f89d,u+f8a5,u+f8f7-f8fc,u+1f32f,u+1f345,u+1f354,u+1f35e,u+1f367,u+1f3af,u+1f3c0,u+1f3f9,u+1f4a3,u+1f4d5-1f4d9,u+1f4e2,u+1f4e6,u+1f4fe,u+1f50b,u+1f56b,u+1f56d-1f56e,u+1f5c4,u+1f5f3,u+1f68d,u+1f6b2,u+1f6cc,u+1f6ce-1f6cf,u+1f94a,u+1f94e,u+1f963,u+1f966,u+1f97e,u+1f9b4,u+1f9c8,u+1f9f9}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-16f2f9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-16f2f9.ttf) format("truetype");unicode-range:u+20,u+265a-265f,u+f058,u+f05d,u+f073,u+f080,u+f271-f274,u+f43a,u+f43f,u+f441,u+f443,u+f445,u+f447}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-16f2f9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-16f2f9.ttf) format("truetype");unicode-range:u+20,u+2329-232a,u+26fa,u+e000-e001,u+e0cf-e0df,u+e0e1-e105,u+e341-e344,u+e3e5-e3f7,u+e46e-e474,u+e4dd-e4e1,u+e59c-e59d,u+f053-f054,u+f07a,u+f083,u+f0a8-f0ab,u+f0d8-f0da,u+f137-f13a,u+f1b9,u+f1fd-f1fe,u+f200-f201,u+f218,u+f322-f325,u+f32d-f32e,u+f330-f331,u+f333-f334,u+f439,u+f43b-f43e,u+f440,u+f442,u+f444,u+f446,u+f448,u+f46b,u+f474-f476,u+f51c,u+f55f-f560,u+f59d,u+f5de-f5e7,u+f643,u+f64c-f64e,u+f6a3,u+f6ba-f6be,u+f6c1,u+f736,u+f772,u+f783,u+f786-f787,u+f78a-f78b,u+f79e-f79f,u+f7da,u+f7ef-f7f0,u+f832-f833,u+f85a-f85b,u+f8a4,u+f8a7-f8a8,u+f8aa-f8ac,u+f8ec,u+f8fe-f8ff,u+1f330,u+1f335,u+1f36b-1f36c,u+1f370,u+1f382,u+1f408,u+1f4c9,u+1f4f7,u+1f4f9,u+1f4fc,u+1f56f,u+1f5ad,u+1f697-1f698,u+1f6a1,u+1f6d2,u+1f942,u+1f955,u+1f96b,u+1f9c0}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-3eb023.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-3eb023.ttf) format("truetype");unicode-range:u+20,u+f01a-f01b,u+f01d,u+f057,u+f059,u+f05c,u+f144,u+f18e,u+f190,u+f192,u+f27b,u+f28b-f28e,u+f29c,u+f2bd-f2be,u+f358-f35b,u+f4ad,u+1f4ac,u+1f518}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-3eb023.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-3eb023.ttf) format("truetype");unicode-range:u+20,u+2c,u+3a,u+24bd,u+25d0,u+2622,u+2663,u+26b0,u+26c5-26c6,u+e002-e003,u+e030-e032,u+e051,u+e106-e140,u+e142-e14f,u+e2f4-e2f6,u+e345-e35f,u+e361,u+e3f8-e3fd,u+e491-e492,u+e4e2-e4e4,u+f042,u+f055-f056,u+f05a,u+f066,u+f06a,u+f0ed-f0ee,u+f1da,u+f2e8,u+f327,u+f381-f382,u+f386-f387,u+f46c-f46d,u+f47e,u+f4ac,u+f4ae-f4b5,u+f4b9,u+f4c7,u+f51f,u+f568,u+f5e8-f5e9,u+f602,u+f615,u+f651,u+f6c2-f6c4,u+f6c6,u+f737-f746,u+f74e,u+f76c-f76e,u+f7ba,u+f7cd,u+f7f3,u+f7f5,u+f8ad-f8ae,u+f8b0,u+1f326-1f329,u+1f32b,u+1f4bf-1f4c0,u+1f5b8}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cb49.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cb49.ttf) format("truetype");unicode-range:u+20,u+2639,u+f070,u+f119,u+f2b6-f2b7,u+f556,u+f567,u+f579,u+1f620,u+1f633}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cb49.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cb49.ttf) format("truetype");unicode-range:u+20,u+22,u+3d,u+44-46,u+64-66,u+f7,u+20ac,u+232b,u+23cf,u+2638,u+2680-2685,u+2797,u+e150-e152,u+e154-e158,u+e15a-e166,u+e168-e173,u+e2fa,u+e2fe,u+e362-e375,u+e3fe-e3ff,u+e401-e409,u+e475-e480,u+e4e5-e4e9,u+e59f,u+f043,u+f052,u+f125,u+f141-f142,u+f153,u+f1b3,u+f1fb,u+f2a2,u+f2a4,u+f2a8,u+f309,u+f320,u+f326,u+f349-f34a,u+f354,u+f389-f38a,u+f39b-f39c,u+f422,u+f449-f44a,u+f46e-f46f,u+f471-f473,u+f4b8,u+f4ba,u+f520,u+f523-f52a,u+f52c,u+f542,u+f55a,u+f563,u+f565,u+f569-f56a,u+f57c-f57e,u+f5c7,u+f5ea-f5ee,u+f5f0,u+f655,u+f657-f658,u+f674,u+f6b1,u+f6c5,u+f6c7-f6c8,u+f6cb,u+f6cd-f6d4,u+f6d6-f6db,u+f748-f749,u+f750,u+f78e-f78f,u+f792-f796,u+f7a2,u+f7f6-f7f8,u+f7fa-f7fc,u+f85f-f862,u+f8b3-f8b5,u+f8cc-f8cd,u+1f30d-1f30f,u+1f33d,u+1f357,u+1f369-1f36a,u+1f36e,u+1f3cf,u+1f404,u+1f415,u+1f418,u+1f442,u+1f4a7,u+1f54a,u+1f5b1,u+1f6aa,u+1f92d,u+1f941,u+1f94c,u+1f950,u+1f952,u+1f95a,u+1f964,u+1f980,u+1f986,u+1f98c,u+1f9ae,u+1f9c1,u+1f9ec,u+1fae4-1fae5}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-493f48.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-493f48.ttf) format("truetype");unicode-range:u+20,u+e185,u+f07c,u+f0c7,u+f0f6,u+f115,u+f118,u+f11a,u+f15c,u+f1c4-f1c9,u+f4da,u+f57a,u+f57f-f58c,u+f596-f59c,u+f5a4-f5a5,u+f5b3-f5b4,u+f5b8,u+f5c2,u+f5c8,u+1f4be,u+1f4c2,u+1f5aa,u+1f5b9,u+1f5bb,u+1f5c1,u+1f5ce,u+1f600-1f606,u+1f609-1f60a,u+1f60d,u+1f610,u+1f617-1f619,u+1f61b-1f61d,u+1f622,u+1f626,u+1f62b-1f62e,u+1f636,u+1f642,u+1f644,u+1f923,u+1f929}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-493f48.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-493f48.ttf) format("truetype");unicode-range:u+20,u+2698,u+e004-e006,u+e053-e054,u+e174-e184,u+e186-e18d,u+e2ff-e304,u+e376-e3a9,u+e40a-e40c,u+e481-e485,u+e493-e494,u+e4ea-e4f3,u+e5a0-e5a1,u+f0c3,u+f134,u+f1ac,u+f317-f319,u+f31c,u+f3a0,u+f44c,u+f456,u+f46a,u+f477-f478,u+f52d,u+f56b,u+f56d,u+f571-f576,u+f5b9,u+f5f3,u+f659-f65a,u+f65c-f65d,u+f662,u+f6dd,u+f6df-f6e1,u+f74b-f74d,u+f79a,u+f7e4,u+f7fd-f7fe,u+f800,u+f863-f865,u+f877,u+f8b6-f8ba,u+1f3d1,u+1f4dd,u+1f4e0,u+1f526,u+1f5b7,u+1f6a9,u+1f6b0,u+1f959,u+1f979,u+1f9c6,u+1f9ef,u+1fab6,u+1fad3,u+1fae0-1fae3}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-910f33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-910f33.ttf) format("truetype");unicode-range:u+20,u+26bd,u+270b-270c,u+f0a0,u+f0a4-f0a5,u+f0a7,u+f1e3,u+f255-f25b,u+f2b4,u+f3a5,u+f425,u+f4e6,u+1f48e,u+1f596,u+1f5b4,u+1f91a}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-910f33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-910f33.ttf) format("truetype");unicode-range:u+20,u+3e,u+47-48,u+67-68,u+23ed,u+2699,u+26fd,u+270a,u+2b23,u+e008-e00c,u+e05c-e05f,u+e061-e064,u+e18e-e1ad,u+e306-e307,u+e3aa-e3ad,u+e40d-e40e,u+e410-e417,u+e486,u+e495-e498,u+e4f4-e504,u+e5a2-e5a5,u+f013,u+f050-f051,u+f085,u+f0e3-f0e4,u+f11b,u+f19d,u+f21e,u+f2a3,u+f2e3,u+f2e6,u+f307,u+f312-f315,u+f3fd,u+f44e-f451,u+f461,u+f47a-f47c,u+f4bc-f4c6,u+f52e-f52f,u+f531-f533,u+f58d-f58f,u+f5f4-f5f5,u+f624-f62d,u+f65e-f661,u+f663,u+f665,u+f684,u+f6de,u+f6e2,u+f6e4-f6e8,u+f6ea-f6eb,u+f79c-f79d,u+f7a3-f7a9,u+f802-f803,u+f806-f809,u+f867-f86b,u+f8bc-f8c2,u+1f35f,u+1f393,u+1f3ae,u+1f3b8,u+1f3c8,u+1f453,u+1f47b,u+1f494,u+1f54e,u+1f595,u+1f681,u+1f91d,u+1f9c4,u+1fad5}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-25ee0f.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-25ee0f.ttf) format("truetype");unicode-range:u+20,u+23f3,u+f094,u+f1cd,u+f250,u+f252,u+f254,u+f2c1-f2c3,u+1f34b}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-25ee0f.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-25ee0f.ttf) format("truetype");unicode-range:u+20,u+2d,u+3c,u+49-4c,u+69-6c,u+2015,u+20a4,u+20b4,u+2194,u+221e,u+22c2,u+231b,u+262c,u+267e,u+26f8,u+e00d-e00f,u+e011-e012,u+e014-e016,u+e018-e019,u+e065-e066,u+e1ae-e1d4,u+e30c,u+e3ae-e3b6,u+e418-e421,u+e487,u+e505-e51e,u+e5a6-e5a7,u+f033,u+f03c,u+f0ae,u+f0ca-f0cb,u+f0fb,u+f124,u+f127,u+f195,u+f253,u+f2e4,u+f2ee,u+f300,u+f30a,u+f30e,u+f310-f311,u+f337,u+f348,u+f34b,u+f355,u+f3b3,u+f3e0,u+f453-f454,u+f479,u+f47f,u+f4c9,u+f4cb,u+f534,u+f536-f537,u+f591,u+f593,u+f5f9,u+f5fc,u+f5fe-f601,u+f603,u+f605-f606,u+f667-f669,u+f66b-f672,u+f6ed-f6f4,u+f6f6-f6f7,u+f74f,u+f751-f752,u+f7aa-f7ae,u+f7f2,u+f80b,u+f80d-f812,u+f86c,u+f86f-f870,u+f87a,u+f8c3-f8c6,u+f8c8-f8c9,u+1f32d,u+1f341,u+1f368,u+1f36f,u+1f383,u+1f3db,u+1f3dd,u+1f3ed,u+1f40e,u+1f444,u+1f4af,u+1f4e4-1f4e5,u+1f54b,u+1f579,u+1f5dd,u+1f5e2,u+1f96c,u+1f99b,u+1f99e,u+1fa81}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c238fb.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c238fb.ttf) format("truetype");unicode-range:u+20,u+f247-f24a,u+f278-f27a,u+f3d1,u+1f5fa}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c238fb.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c238fb.ttf) format("truetype");unicode-range:u+20,u+4d-4f,u+6d-6f,u+2604,u+263f,u+2642,u+26a3,u+26a5-26a6,u+26a8-26a9,u+26b2,u+26f0,u+e067,u+e1d5-e205,u+e30f-e313,u+e316,u+e3b7-e3c1,u+e422-e426,u+e49a,u+e49c-e49f,u+e51f-e52f,u+e531-e532,u+e5a8,u+f000,u+f002,u+f00e,u+f010,u+f076,u+f0f4,u+f10b,u+f222-f224,u+f227,u+f229-f22c,u+f276,u+f2f0,u+f301,u+f306,u+f308,u+f30d,u+f31e,u+f3c1-f3c2,u+f3c9,u+f3cd,u+f3cf,u+f455,u+f4a2-f4ab,u+f4b6,u+f538-f53d,u+f561,u+f57b,u+f59f-f5a0,u+f5a6-f5a7,u+f604,u+f607-f60e,u+f610-f611,u+f613-f614,u+f630,u+f650,u+f652,u+f676,u+f678,u+f688-f689,u+f6f8-f6f9,u+f6fb-f6fe,u+f74a,u+f753-f754,u+f78c,u+f7b4-f7b5,u+f7b7,u+f7f4,u+f872-f874,u+f8af,u+f8cb,u+f8ce-f8d1,u+1f344,u+1f36d,u+1f378,u+1f399,u+1f3a4,u+1f3ad,u+1f3d4,u+1f412,u+1f4cd,u+1f50d,u+1f52c,u+1f54c,u+1f6d1,u+1f9f2,u+1fac1}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-cbbfb4.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-cbbfb4.ttf) format("truetype");unicode-range:u+20,u+f044,u+f0ea}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-cbbfb4.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-cbbfb4.ttf) format("truetype");unicode-range:u+20,u+2e,u+50,u+70,u+7c,u+b6,u+260e,u+262e,u+26f7,u+2708,u+2711-2712,u+e01c-e01d,u+e022-e023,u+e069,u+e206-e229,u+e22b-e22f,u+e317-e318,u+e31a-e31c,u+e31e-e31f,u+e3c2-e3c4,u+e427-e439,u+e43b-e43d,u+e4a1,u+e533-e560,u+e59e,u+e5a9-e5aa,u+f03b,u+f182-f183,u+f1b0,u+f1dd,u+f1fc,u+f29d,u+f2ce,u+f304-f305,u+f3dd-f3de,u+f470,u+f482-f484,u+f4cd-f4d0,u+f4d2-f4d3,u+f53f,u+f554,u+f5a9,u+f5ac-f5af,u+f5c4,u+f618,u+f679-f67a,u+f67c,u+f67e,u+f680,u+f683,u+f6ec,u+f701-f703,u+f705-f706,u+f70c,u+f756,u+f758-f759,u+f7b8,u+f7c5,u+f7c7-f7cb,u+f7ce,u+f7d1,u+f815-f818,u+f84a-f84b,u+f85e,u+f876,u+f878-f879,u+f87c,u+f8d3-f8d5,u+1f336,u+1f355,u+1f373,u+1f3a8,u+1f3b9,u+1f3c2-1f3c3,u+1f3ca,u+1f416,u+1f4df,u+1f549,u+1f57d,u+1f58a-1f58c,u+1f6b4-1f6b6,u+1f6d0,u+1f6ec,u+1f958,u+1f95c,u+1f95e,u+1f967,u+1f9c5,u+1f9cd,u+1fad1}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-aa90b0.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-aa90b0.ttf) format("truetype");unicode-range:u+20,u+f022,u+f045,u+f14d,u+f2d4,u+f410}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-aa90b0.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-aa90b0.ttf) format("truetype");unicode-range:u+20,u+3b,u+51-53,u+71-73,u+201c,u+20a8,u+20aa,u+20bd,u+2211,u+25ac,u+2696,u+26e8,u+2700,u+2702,u+2704,u+2b95,u+e025-e02c,u+e06a-e06c,u+e070,u+e231,u+e234-e244,u+e246-e24f,u+e2d2,u+e322-e324,u+e3c5-e3c9,u+e43e-e449,u+e4a2-e4a5,u+e561-e56f,u+e571-e575,u+e5ab,u+f029,u+f074,u+f079,u+f09e,u+f0c4,u+f10d,u+f122,u+f156,u+f158,u+f197,u+f1e0,u+f20b,u+f24e,u+f2ea,u+f2f1,u+f2f5-f2f6,u+f2f8-f2fb,u+f2fe,u+f30b,u+f347,u+f34c,u+f356,u+f362,u+f365,u+f367,u+f3ed,u+f45a-f45b,u+f463,u+f480,u+f485-f486,u+f488-f489,u+f4d4,u+f4d6,u+f4d9,u+f515-f516,u+f546-f547,u+f54a-f54b,u+f54f,u+f553,u+f5b1,u+f619-f61f,u+f63d,u+f641,u+f685-f686,u+f68a-f68b,u+f690-f694,u+f6a0,u+f707-f70a,u+f70d,u+f70f-f713,u+f75a-f75b,u+f75e,u+f7b9,u+f7be-f7c3,u+f7d9,u+f819-f822,u+f87e-f87f,u+f8d8,u+f8da-f8dc,u+f8f3,u+1f308,u+1f372,u+1f37f,u+1f397,u+1f3b7,u+1f407,u+1f40f,u+1f411,u+1f455,u+1f4a9,u+1f4b0,u+1f4d0,u+1f4e1,u+1f500,u+1f502,u+1f504,u+1f680,u+1f6f0,u+1f954,u+1f957,u+1f968,u+1f96a,u+1f990,u+1f9c2,u+1f9e3,u+1fa9b}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-9d9a2c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-9d9a2c.ttf) format("truetype");unicode-range:u+20,u+2611,u+2705,u+2744,u+2746,u+2b1b-2b1c,u+f046,u+f089,u+f0fe,u+f123,u+f146-f147,u+f14a,u+f150-f152,u+f191,u+f196,u+f2dc,u+f45c,u+f5c0,u+1f7e5-1f7eb}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-9d9a2c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-9d9a2c.ttf) format("truetype");unicode-range:u+20,u+2f,u+5c,u+a3,u+2139,u+2197,u+221a,u+23f1,u+2603,u+2620,u+262a,u+2660,u+26c4,u+2721,u+2728,u+274e,u+27a1,u+2b05-2b07,u+e02d-e02e,u+e033-e039,u+e06d,u+e06f,u+e071,u+e250-e28e,u+e329-e32b,u+e3ca-e3ce,u+e400,u+e44b-e450,u+e488-e489,u+e4a6,u+e576-e579,u+e5af,u+f098,u+f0dd-f0de,u+f0f1,u+f0fd,u+f143,u+f14b-f14c,u+f154,u+f199,u+f1b1,u+f1de,u+f1e1,u+f277,u+f2d3,u+f2e5,u+f2e9,u+f2f2-f2f4,u+f2fd,u+f30f,u+f321,u+f329-f32c,u+f339-f33c,u+f350-f353,u+f360,u+f3f0-f3f2,u+f48d,u+f49b,u+f49f,u+f4c8,u+f540,u+f54c,u+f551,u+f5bb-f5bd,u+f5d0,u+f617,u+f620,u+f622-f623,u+f67b,u+f681-f682,u+f68c-f68f,u+f696-f69a,u+f714,u+f716-f71a,u+f75f-f761,u+f79b,u+f7c4,u+f7cc,u+f7cf-f7d0,u+f7d2,u+f7d4,u+f824-f825,u+f87b,u+f880,u+f890-f891,u+f8dd-f8de,u+1f17f,u+1f320,u+1f366,u+1f40d,u+1f480,u+1f49f,u+1f4a4,u+1f571,u+1f577-1f578,u+1f6ac,u+1f944,u+1f969,u+1f991,u+1f9e6,u+1fa7a}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-f064f7.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-f064f7.ttf) format("truetype");unicode-range:u+20,u+2600,u+f014,u+f088,u+f165,u+f185,u+f2ed,u+1f44e}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-f064f7.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-f064f7.ttf) format("truetype");unicode-range:u+20,u+54,u+74,u+7e,u+20b8,u+2122,u+2694,u+26a0,u+26a7,u+26e9,u+e03b-e041,u+e043-e044,u+e072,u+e28f-e2ba,u+e32d-e330,u+e3cf-e3d0,u+e451-e454,u+e48a-e48b,u+e57a-e58f,u+e5b0-e5b4,u+f009-f00b,u+f02b,u+f034-f035,u+f071,u+f08d,u+f0db,u+f0f2,u+f0f9-f0fa,u+f10a,u+f120,u+f12b,u+f1ba,u+f204,u+f225,u+f239,u+f25c,u+f2c7-f2cb,u+f2eb,u+f3fa,u+f3fc,u+f3ff-f400,u+f45d-f45e,u+f48b-f48c,u+f48e,u+f491,u+f4db-f4e0,u+f519,u+f552,u+f566,u+f5c1,u+f5c3,u+f5c9,u+f62e-f62f,u+f631-f63a,u+f63c,u+f69b,u+f69e-f69f,u+f6a1,u+f71c-f725,u+f763-f76b,u+f76f,u+f7d7-f7d8,u+f7db-f7de,u+f826,u+f829-f82b,u+f85d,u+f86e,u+f87d,u+f892,u+f895-f896,u+f8e2-f8e3,u+1f305,u+1f307,u+1f321,u+1f324,u+1f32a,u+1f32e,u+1f333-1f334,u+1f363,u+1f384,u+1f3ba,u+1f3be,u+1f3d3,u+1f3f7,u+1f489,u+1f4cc,u+1f523,u+1f52d,u+1f54d,u+1f576,u+1f588,u+1f5e1,u+1f68a,u+1f691,u+1f696,u+1f69c,u+1f6a6,u+1f6bd,u+1f6fb,u+1f9b7,u+1f9f0,u+1f9f3,u+1f9fb,u+1faa5-1faa6,u+1fad4}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cf62.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cf62.ttf) format("truetype");unicode-range:u+20,u+f2d0-f2d1,u+1f5d5-1f5d6}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cf62.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cf62.ttf) format("truetype");unicode-range:u+20,u+55-5a,u+75-7a,u+a5,u+d7,u+20a9,u+2195,u+223f,u+22c3,u+262f,u+2640,u+26a2,u+26a4,u+2715-2716,u+274c,u+2934-2935,u+2b0d,u+e047-e048,u+e04a-e050,u+e058,u+e073,u+e075,u+e085-e086,u+e2bb-e2cf,u+e2d1,u+e331,u+e333-e334,u+e337-e339,u+e3d1-e3d3,u+e455-e466,u+e4a7-e4a9,u+e590-e59b,u+f00d,u+f026-f028,u+f0b2,u+f0cd,u+f0d0,u+f0e9,u+f0f0,u+f0f5,u+f13e,u+f157,u+f159,u+f193,u+f221,u+f226,u+f228,u+f235,u+f26c,u+f29a,u+f2e2,u+f2e7,u+f30c,u+f338,u+f346,u+f34d,u+f357,u+f35d,u+f3be-f3bf,u+f401,u+f406,u+f40f,u+f424,u+f45f-f460,u+f492,u+f495-f497,u+f4bb,u+f4e1,u+f4e3,u+f4fa-f502,u+f504-f507,u+f509,u+f5b6,u+f5c5,u+f5cb,u+f5cd-f5ce,u+f5f8,u+f63e,u+f6a2,u+f6a4-f6a7,u+f6a9-f6ad,u+f726-f72d,u+f770-f771,u+f774-f777,u+f7a0-f7a1,u+f7e2,u+f82c-f82e,u+f831,u+f83e,u+f898-f89b,u+f8e4-f8e6,u+f8e9-f8eb,u+f8ed,u+f8f0-f8f2,u+1f30b,u+1f374,u+1f377,u+1f3bb,u+1f3d0,u+1f40b,u+1f422,u+1f465,u+1f477,u+1f4fa,u+1f507-1f508,u+1f50a,u+1f5d9,u+1f690,u+1f6f8,u+1f943,u+1f977,u+1f984,u+1f9c7,u+1f9ea,u+1fa9f}.fa-regular,.far{font-family:"Font Awesome 6 Pro";font-weight:400}:host,:root{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-d5bbe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-d5bbe9.ttf) format("truetype");unicode-range:u+20-21,u+23,u+2b,u+3f,u+ae,u+2013,u+201d,u+2190-2193,u+2212,u+2303,u+2399,u+23e9-23ea,u+23f8-23f9,u+23fb,u+23fe,u+25a0,u+25b6,u+25cf,u+25fb-25fc,u+2601,u+2615,u+261d,u+2665,u+26aa-26ab,u+26df,u+2709,u+270f,u+2713-2714,u+271d,u+2753-2755,u+2757,u+2764,u+2795-2796,u+2b24,u+2b50,u+e060,u+f001,u+f003-f007,u+f00c,u+f011-f012,u+f015-f017,u+f019,u+f023-f024,u+f02c-f02d,u+f02f-f031,u+f03a,u+f03d-f03e,u+f040-f041,u+f04a-f04e,u+f060-f065,u+f067-f068,u+f06b-f06d,u+f072,u+f075,u+f077,u+f07b,u+f084,u+f08a,u+f091,u+f093,u+f095-f096,u+f09d,u+f0a2,u+f0a6,u+f0ac-f0ad,u+f0b0,u+f0c0-f0c2,u+f0c5,u+f0c8-f0c9,u+f0cc,u+f0ce,u+f0d1,u+f0d6-f0d7,u+f0dc,u+f0e0,u+f0e5,u+f0e8,u+f0f3,u+f0f7,u+f106,u+f108-f109,u+f10c,u+f10e,u+f110-f111,u+f114,u+f11d-f11e,u+f121,u+f128-f12a,u+f132-f133,u+f135,u+f145,u+f14e,u+f15b,u+f186,u+f188,u+f1ab,u+f1ad,u+f1bb,u+f1c0,u+f1c2-f1c3,u+f1d8-f1d9,u+f1db,u+f1e4,u+f1ea-f1eb,u+f1f8,u+f205,u+f20a,u+f217,u+f21a,u+f21c-f21d,u+f233,u+f238,u+f251,u+f25d,u+f283,u+f292,u+f29e,u+f2a0,u+f2a7,u+f2bb-f2bc,u+f2c0,u+f2cc,u+f2db,u+f303,u+f328,u+f332,u+f390,u+f3c5,u+f3ce,u+f481,u+f493,u+f4d8,u+f4e2,u+f503,u+f51b,u+f52b,u+f549,u+f54e,u+f555,u+f559,u+f56e-f570,u+f594,u+f5a1,u+f5aa-f5ab,u+f5b7,u+f5dc,u+f5fd,u+f621,u+f64a,u+f64f,u+f654,u+f67f,u+f6e3,u+f6ff,u+f715,u+f773,u+f781,u+f784,u+f788,u+f7b6,u+f7bd,u+f80a,u+f80c,u+f82f,u+f86d,u+f8d9,u+f8ef,u+1f310,u+1f319,u+1f331-1f332,u+1f381,u+1f39f,u+1f3b5,u+1f3c1,u+1f3c6,u+1f3cd,u+1f3d9,u+1f3e0,u+1f3e2,u+1f3e8,u+1f3eb,u+1f3f4,u+1f464,u+1f499-1f49c,u+1f4b3,u+1f4bb,u+1f4c1,u+1f4c4-1f4c6,u+1f4cb,u+1f4d4,u+1f4de,u+1f4f0-1f4f1,u+1f4f6,u+1f511-1f512,u+1f514,u+1f517,u+1f525,u+1f527-1f528,u+1f534-1f535,u+1f547,u+1f553,u+1f57b,u+1f582,u+1f5a4-1f5a5,u+1f5a8,u+1f5b6,u+1f5bf,u+1f5cb,u+1f5e9,u+1f686,u+1f69a,u+1f6a2,u+1f6bf,u+1f6e1,u+1f7e0-1f7e4,u+1f90d-1f90e,u+1f9e0-1f9e1,u+1f9ed}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-d5bbe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-d5bbe9.ttf) format("truetype");unicode-range:u+20,u+d8,u+2205,u+231a,u+25b2,u+273f,u+e017,u+e01f,u+e024,u+e045,u+f2e1,u+f2ec,u+f2f7,u+f316,u+f335,u+f37e,u+f3f4,u+f40e,u+f435,u+f4cc,u+f4d1,u+f5db,u+f5f6,u+f656,u+f673,u+f67d,u+f695,u+f69c,u+f6a8,u+f6e9,u+f734,u+f755,u+f757,u+f7b2,u+f7d5,u+f7ee,u+f7ff,u+f804,u+f813,u+f855,u+f858-f859,u+f85c,u+f871,u+f893-f894,u+f8a9,u+f8b2,u+f8d6,u+f8e7,u+1f33c,u+1f3a5-1f3a6,u+1f4da,u+1f4ea,u+1f509,u+1f5d4,u+1f95b,u+1fa99}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-e41116.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-e41116.ttf) format("truetype");unicode-range:u+20,u+24-25,u+a9,u+2328,u+2666,u+2672,u+267a-267b,u+2693,u+26a1,u+26ea,u+e068,u+e06e,u+e074,u+e076,u+f008,u+f018,u+f01c,u+f025,u+f02a,u+f02e,u+f05b,u+f06e,u+f078,u+f086-f087,u+f097,u+f09c,u+f0a3,u+f0b1,u+f0c6,u+f0e6-f0e7,u+f0eb,u+f0f8,u+f112,u+f11c,u+f126,u+f12c-f12e,u+f130-f131,u+f13d,u+f140,u+f155,u+f164,u+f1ae,u+f1b2,u+f1b8,u+f1c1,u+f1ce,u+f1dc,u+f1e5-f1e6,u+f1ec,u+f1f9,u+f219,u+f21b,u+f22d,u+f234,u+f246,u+f24d,u+f275,u+f295,u+f2b5,u+f2cd,u+f2d2,u+f302,u+f363,u+f3e5,u+f3fb,u+f44b,u+f47d,u+f490,u+f494,u+f4d7,u+f508,u+f51d-f51e,u+f521-f522,u+f530,u+f535,u+f53e,u+f541,u+f543-f545,u+f548,u+f55d,u+f564,u+f56c,u+f577-f578,u+f590,u+f595,u+f5a2,u+f5b0,u+f5ba,u+f5bf,u+f5ca,u+f63b,u+f653,u+f664,u+f6c0,u+f6d5,u+f6fa,u+f700,u+f70b,u+f70e,u+f72e-f72f,u+f747,u+f77c,u+f850,u+f897,u+f8d7,u+1f39e,u+1f3a7,u+1f3b2,u+1f3c5,u+1f3d6,u+1f3e5,u+1f409,u+1f41f,u+1f441,u+1f44d,u+1f451,u+1f4a1,u+1f4b2,u+1f4bc,u+1f4ce-1f4cf,u+1f4dc,u+1f4fb,u+1f501,u+1f50c,u+1f513,u+1f516,u+1f575,u+1f5a9,u+1f5ea,u+1f6c1,u+1f6e3,u+1f6eb,u+1f916,u+1f9a6,u+1f9e9,u+1f9fc,u+1f9fe,u+1fa91}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-e41116.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-e41116.ttf) format("truetype");unicode-range:u+20,u+e010,u+e01b,u+e020-e021,u+e02f,u+e03a,u+e042,u+e046,u+f2fc,u+f31a,u+f48a,u+f48f,u+f498,u+f4b7,u+f4ca,u+f5ef,u+f5f2,u+f5fb,u+f649,u+f65b,u+f675,u+f6bf,u+f6f5,u+f71b,u+f733,u+f75c,u+f762,u+f801,u+f814,u+f830,u+f845-f846,u+f866,u+f875,u+f89f,u+f8b1,u+f8bb,u+f8c7,u+f8df-f8e0,u+f8ee,u+f8fd,u+1f337,u+1f356,u+1f4bd,u+1f4e3,u+1f52a,u+1fa90}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-bbafe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-bbafe9.ttf) format("truetype");unicode-range:u+20,u+f2b4,u+f425,u+f4e6}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-bbafe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-bbafe9.ttf) format("truetype");unicode-range:u+20,u+f293}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-56ba33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-56ba33.ttf) format("truetype");unicode-range:u+20,u+e531}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c046b6.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c046b6.ttf) format("truetype");unicode-range:u+20,u+2a,u+30-39,u+40-42,u+61-62,u+ab,u+bb,u+2039-203a,u+21ba-21bb,u+21c4,u+2304,u+23ee,u+2625,u+269b,u+2731,u+e059-e05a,u+e097-e098,u+e09a,u+e0a9,u+e0ac,u+e4aa-e4ad,u+e4af-e4b0,u+e4b3,u+e4b5-e4c2,u+f01e,u+f021,u+f036-f039,u+f047-f049,u+f05e,u+f069,u+f07d-f07e,u+f08b,u+f08e,u+f090,u+f0e2,u+f0ec,u+f100-f105,u+f107,u+f148-f149,u+f15d-f15e,u+f160-f163,u+f175-f178,u+f1fa,u+f245,u+f290,u+f2b9-f2ba,u+f462,u+f54d,u+f557,u+f5d1-f5d2,u+f644,u+f666,u+f77d,u+f7e5,u+f881-f882,u+f884-f887,u+1f34e-1f34f,u+1f5d8,u+1f6ab,u+1f6ad,u+1f953,u+1fa79}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c046b6.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c046b6.ttf) format("truetype");unicode-range:u+20,u+26-27,u+60,u+21a4-21a7,u+21e4-21e5,u+23f0,u+e089-e08a,u+e08c-e08d,u+e08f-e096,u+e099,u+e09b-e0a8,u+e0aa-e0ab,u+e2dc,u+e2df,u+e2e1,u+e2e3-e2e6,u+e33a,u+e3d4-e3d8,u+e467-e468,u+e48c-e48f,u+e4ae,u+e4b1-e4b2,u+e4b4,u+f31d,u+f336,u+f33d-f33e,u+f340-f345,u+f34e,u+f361,u+f364,u+f366,u+f464,u+f5d3-f5d4,u+f616,u+f640,u+f645-f646,u+f6ae,u+f6b0,u+f6b2-f6b4,u+f732,u+f779,u+f77e,u+f7f9,u+f843-f844,u+f847,u+f883,u+f888-f88f,u+f8a0-f8a3,u+f8f4-f8f6,u+1f392,u+1f47d-1f47e,u+1f6cd,u+1f956,u+1f96f,u+1f9a1,u+1f9ee,u+1fa93,u+1fa95}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-792d0c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-792d0c.ttf) format("truetype");unicode-range:u+20,u+43,u+63,u+2623,u+26be,u+e05b,u+e0b4,u+e0b7,u+e0bb,u+e2eb,u+e46c,u+e490,u+e4c3-e4cc,u+e4ce-e4dc,u+f032,u+f0a1,u+f0fc,u+f187,u+f19c,u+f1e2,u+f1f6-f1f7,u+f206-f207,u+f236,u+f240-f244,u+f291,u+f2a1,u+f432-f434,u+f436,u+f458,u+f466,u+f468-f469,u+f487,u+f49e,u+f4a1,u+f517-f518,u+f51a,u+f550,u+f558,u+f55b-f55c,u+f55e,u+f562,u+f5d7,u+f5da,u+f647,u+f66a,u+f687,u+f6b6-f6b7,u+f780,u+f7e6,u+f7ec,u+f805,u+f827-f828,u+f84c,u+f853,u+1f3c0,u+1f4a3,u+1f4d6,u+1f4e2,u+1f4e6,u+1f50b,u+1f515,u+1f56b,u+1f56e,u+1f68d,u+1f6b2,u+1f6cc,u+1f6ce,u+1f94e,u+1f9b4,u+1f9f9}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-792d0c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-792d0c.ttf) format("truetype");unicode-range:u+20,u+28-29,u+5b,u+5d,u+7b,u+7d,u+e0ad-e0b3,u+e0b5-e0b6,u+e0b8-e0ba,u+e0bc-e0ce,u+e2e7-e2ea,u+e2f2,u+e33b-e33f,u+e3da-e3e4,u+e469-e46b,u+e46d,u+e4cd,u+f293,u+f376-f377,u+f437-f438,u+f465,u+f467,u+f499-f49a,u+f49c-f49d,u+f4a0,u+f5d5-f5d6,u+f5d8-f5d9,u+f5dd,u+f648,u+f64b,u+f677,u+f6b5,u+f6b8-f6b9,u+f735,u+f77f,u+f782,u+f7e7-f7eb,u+f7ed,u+f7f1,u+f823,u+f848-f849,u+f84d-f84f,u+f851-f852,u+f854,u+f856-f857,u+f89c-f89d,u+f8a5,u+f8f7-f8fc,u+1f32f,u+1f345,u+1f354,u+1f35e,u+1f367,u+1f3af,u+1f3f9,u+1f4d5,u+1f4d7-1f4d9,u+1f4fe,u+1f56d,u+1f5c4,u+1f5f3,u+1f6cf,u+1f94a,u+1f963,u+1f966,u+1f97e,u+1f9c8}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-16f2f9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-16f2f9.ttf) format("truetype");unicode-range:u+20,u+2329-232a,u+265a-265f,u+26fa,u+e0cf,u+e0d8,u+e0df,u+e0e3-e0e4,u+e3f5,u+e473,u+e4dd-e4de,u+e4e0-e4e1,u+e59c-e59d,u+f053-f054,u+f058,u+f05d,u+f073,u+f07a,u+f080,u+f083,u+f0a8-f0ab,u+f0d8-f0da,u+f137-f13a,u+f1b9,u+f1fd-f1fe,u+f200-f201,u+f218,u+f271-f274,u+f439-f43a,u+f43c,u+f43f,u+f441,u+f443,u+f445,u+f447,u+f46b,u+f474,u+f51c,u+f55f-f560,u+f59d,u+f5de-f5df,u+f5e1,u+f5e4,u+f5e7,u+f6bb,u+f6be,u+f772,u+f783,u+f786-f787,u+f79f,u+f7da,u+f7ef,u+f8ff,u+1f382,u+1f408,u+1f4f7,u+1f697-1f698,u+1f6a1,u+1f6d2,u+1f942,u+1f955}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-16f2f9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-16f2f9.ttf) format("truetype");unicode-range:u+20,u+e000-e001,u+e0d0-e0d7,u+e0d9-e0de,u+e0e1-e0e2,u+e0e5-e105,u+e341-e344,u+e3e5-e3f4,u+e3f6-e3f7,u+e46e-e472,u+e474,u+e4df,u+f322-f325,u+f32d-f32e,u+f330-f331,u+f333-f334,u+f43b,u+f43d-f43e,u+f440,u+f442,u+f444,u+f446,u+f448,u+f475-f476,u+f5e0,u+f5e2-f5e3,u+f5e5-f5e6,u+f643,u+f64c-f64e,u+f6a3,u+f6ba,u+f6bc-f6bd,u+f6c1,u+f736,u+f78a-f78b,u+f79e,u+f7f0,u+f832-f833,u+f85a-f85b,u+f8a4,u+f8a7-f8a8,u+f8aa-f8ac,u+f8ec,u+f8fe,u+1f330,u+1f335,u+1f36b-1f36c,u+1f370,u+1f4c9,u+1f4f9,u+1f4fc,u+1f56f,u+1f5ad,u+1f96b,u+1f9c0}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-3eb023.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-3eb023.ttf) format("truetype");unicode-range:u+20,u+24bd,u+25d0,u+2622,u+26c5-26c6,u+e131,u+e139-e13c,u+e140,u+e4e2-e4e4,u+f01a-f01b,u+f01d,u+f042,u+f055-f057,u+f059-f05a,u+f05c,u+f066,u+f06a,u+f0ed-f0ee,u+f144,u+f18e,u+f190,u+f192,u+f1da,u+f27b,u+f28b-f28e,u+f29c,u+f2bd-f2be,u+f358-f35b,u+f381-f382,u+f386-f387,u+f46c-f46d,u+f47e,u+f4ad,u+f4b3,u+f4b9,u+f51f,u+f568,u+f651,u+f6c3-f6c4,u+f73b-f73d,u+f740,u+f743,u+f76c,u+f7ba,u+f7cd,u+f7f3,u+f7f5,u+1f326-1f327,u+1f329,u+1f4ac,u+1f4bf-1f4c0,u+1f518,u+1f5b8}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-3eb023.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-3eb023.ttf) format("truetype");unicode-range:u+20,u+2c,u+3a,u+2663,u+26b0,u+e002-e003,u+e030-e032,u+e051,u+e106-e130,u+e132-e138,u+e13d-e13f,u+e142-e14f,u+e2f4-e2f6,u+e345-e35f,u+e361,u+e3f8-e3fd,u+e491-e492,u+f2e8,u+f327,u+f4ac,u+f4ae-f4b2,u+f4b4-f4b5,u+f4c7,u+f5e8-f5e9,u+f602,u+f615,u+f6c2,u+f6c6,u+f737-f73a,u+f73e-f73f,u+f741-f742,u+f744-f746,u+f74e,u+f76d-f76e,u+f8ad-f8ae,u+f8b0,u+1f328,u+1f32b}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cb49.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cb49.ttf) format("truetype");unicode-range:u+20,u+3d,u+44-46,u+64-66,u+f7,u+20ac,u+232b,u+23cf,u+2638-2639,u+2680-2685,u+2797,u+e152,u+e163,u+e169,u+e16d,u+e476-e477,u+e47a-e47b,u+e4e5-e4e6,u+e4e8-e4e9,u+f043,u+f052,u+f070,u+f119,u+f125,u+f141-f142,u+f153,u+f1b3,u+f1fb,u+f2a2,u+f2a4,u+f2a8,u+f2b6-f2b7,u+f309,u+f422,u+f471-f472,u+f4b8,u+f4ba,u+f520,u+f523-f52a,u+f52c,u+f542,u+f556,u+f55a,u+f563,u+f565,u+f567,u+f569-f56a,u+f579,u+f57c-f57e,u+f5c7,u+f5eb,u+f5ee,u+f655,u+f658,u+f674,u+f6c8,u+f6cf,u+f6d1,u+f6d3,u+f6d7,u+f6d9,u+f793-f794,u+f796,u+f7a2,u+f7f7,u+f7fa-f7fb,u+f8cc,u+1f30d-1f30f,u+1f36a,u+1f404,u+1f415,u+1f4a7,u+1f54a,u+1f5b1,u+1f620,u+1f633,u+1f6aa,u+1f941,u+1f95a,u+1f9ec}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cb49.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cb49.ttf) format("truetype");unicode-range:u+20,u+22,u+e150-e151,u+e154-e158,u+e15a-e162,u+e164-e166,u+e168,u+e16a-e16c,u+e16e-e173,u+e2fa,u+e2fe,u+e362-e375,u+e3fe-e3ff,u+e401-e409,u+e475,u+e478-e479,u+e47c-e480,u+e4e7,u+e59f,u+f320,u+f326,u+f349-f34a,u+f354,u+f389-f38a,u+f39b-f39c,u+f449-f44a,u+f46e-f46f,u+f473,u+f5ea,u+f5ec-f5ed,u+f5f0,u+f657,u+f6b1,u+f6c5,u+f6c7,u+f6cb,u+f6cd-f6ce,u+f6d0,u+f6d2,u+f6d4,u+f6d6,u+f6d8,u+f6da-f6db,u+f748-f749,u+f750,u+f78e-f78f,u+f792,u+f795,u+f7f6,u+f7f8,u+f7fc,u+f85f-f862,u+f8b3-f8b5,u+f8cd,u+1f33d,u+1f357,u+1f369,u+1f36e,u+1f3cf,u+1f418,u+1f442,u+1f92d,u+1f94c,u+1f950,u+1f952,u+1f964,u+1f980,u+1f986,u+1f98c,u+1f9ae,u+1f9c1,u+1fae4-1fae5}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-493f48.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-493f48.ttf) format("truetype");unicode-range:u+20,u+e005-e006,u+e17b,u+e184-e185,u+e494,u+e4ea-e4eb,u+e4ed-e4f3,u+e5a0-e5a1,u+f07c,u+f0c3,u+f0c7,u+f0f6,u+f115,u+f118,u+f11a,u+f134,u+f15c,u+f1ac,u+f1c4-f1c9,u+f31c,u+f46a,u+f477-f478,u+f4da,u+f52d,u+f56b,u+f56d,u+f571-f576,u+f57a,u+f57f-f58c,u+f596-f59c,u+f5a4-f5a5,u+f5b3-f5b4,u+f5b8,u+f5c2,u+f5c8,u+f65d,u+f662,u+f6dd,u+f74d,u+f7e4,u+f863,u+1f4be,u+1f4c2,u+1f4dd,u+1f4e0,u+1f5aa,u+1f5b7,u+1f5b9,u+1f5bb,u+1f5c1,u+1f5ce,u+1f600-1f606,u+1f609-1f60a,u+1f60d,u+1f610,u+1f617-1f619,u+1f61b-1f61d,u+1f622,u+1f626,u+1f62b-1f62e,u+1f636,u+1f642,u+1f644,u+1f6b0,u+1f923,u+1f929,u+1f9ef,u+1fab6}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-493f48.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-493f48.ttf) format("truetype");unicode-range:u+20,u+2698,u+e004,u+e053-e054,u+e174-e17a,u+e17c-e183,u+e186-e18d,u+e2ff-e304,u+e376-e3a9,u+e40a-e40c,u+e481-e485,u+e493,u+e4ec,u+f317-f319,u+f3a0,u+f44c,u+f456,u+f5b9,u+f5f3,u+f659-f65a,u+f65c,u+f6df-f6e1,u+f74b-f74c,u+f79a,u+f7fd-f7fe,u+f800,u+f864-f865,u+f877,u+f8b6-f8ba,u+1f3d1,u+1f526,u+1f6a9,u+1f959,u+1f979,u+1f9c6,u+1fad3,u+1fae0-1fae3}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-910f33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-910f33.ttf) format("truetype");unicode-range:u+20,u+3e,u+47-48,u+67-68,u+23ed,u+2699,u+26bd,u+26fd,u+270a-270c,u+e05c-e05f,u+e061-e064,u+e18f,u+e19a-e19b,u+e1a8,u+e4f4-e503,u+f013,u+f050-f051,u+f085,u+f0a0,u+f0a4-f0a5,u+f0a7,u+f0e3-f0e4,u+f11b,u+f19d,u+f1e3,u+f21e,u+f255-f25b,u+f2a3,u+f2b4,u+f3a5,u+f3fd,u+f425,u+f44e,u+f450,u+f461,u+f4bd-f4be,u+f4c0-f4c2,u+f4c4,u+f4c6,u+f4e6,u+f52e-f52f,u+f531-f533,u+f58d-f58f,u+f624-f625,u+f629-f62a,u+f65e,u+f665,u+f684,u+f6de,u+f6e2,u+f6e6,u+f6e8,u+f79c,u+f7a4-f7a6,u+f7a9,u+f802,u+f806-f807,u+f8c0-f8c1,u+1f393,u+1f3c8,u+1f47b,u+1f48e,u+1f494,u+1f54e,u+1f595-1f596,u+1f5b4,u+1f681,u+1f91a,u+1f91d}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-910f33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-910f33.ttf) format("truetype");unicode-range:u+20,u+2b23,u+e008-e00c,u+e18e,u+e190-e199,u+e19c-e1a7,u+e1a9-e1ad,u+e306-e307,u+e3aa-e3ad,u+e40d-e40e,u+e410-e417,u+e486,u+e495-e498,u+e504,u+e5a2-e5a5,u+f2e3,u+f2e6,u+f307,u+f312-f315,u+f44f,u+f451,u+f47a-f47c,u+f4bc,u+f4bf,u+f4c3,u+f4c5,u+f5f4-f5f5,u+f626-f628,u+f62b-f62d,u+f65f-f661,u+f663,u+f6e4-f6e5,u+f6e7,u+f6ea-f6eb,u+f79d,u+f7a3,u+f7a7-f7a8,u+f803,u+f808-f809,u+f867-f86b,u+f8bc-f8bf,u+f8c2,u+1f35f,u+1f3ae,u+1f3b8,u+1f453,u+1f9c4,u+1fad5}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-25ee0f.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-25ee0f.ttf) format("truetype");unicode-range:u+20,u+3c,u+49-4c,u+69-6c,u+20a4,u+20b4,u+2194,u+221e,u+231b,u+23f3,u+262c,u+267e,u+e00d,u+e012,u+e065-e066,u+e1b0,u+e1bc,u+e1c4,u+e1c8,u+e1d3,u+e3af,u+e3b1-e3b2,u+e507-e51e,u+f033,u+f03c,u+f094,u+f0ae,u+f0ca-f0cb,u+f0fb,u+f124,u+f127,u+f195,u+f1cd,u+f250,u+f252-f254,u+f2c1-f2c3,u+f30a,u+f337,u+f3e0,u+f453,u+f479,u+f47f,u+f534,u+f536-f537,u+f591,u+f593,u+f5fc,u+f601,u+f669,u+f66b,u+f66d,u+f66f,u+f6ed,u+f6f0-f6f2,u+f751-f752,u+f7aa-f7ab,u+f7ad-f7ae,u+f7f2,u+f80b,u+f80d,u+f80f-f810,u+f812,u+1f32d,u+1f34b,u+1f368,u+1f3db,u+1f40e,u+1f54b,u+1f99b}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-25ee0f.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-25ee0f.ttf) format("truetype");unicode-range:u+20,u+2d,u+2015,u+22c2,u+26f8,u+e00e-e00f,u+e011,u+e014-e016,u+e018-e019,u+e1ae-e1af,u+e1b1-e1bb,u+e1bd-e1c3,u+e1c5-e1c7,u+e1c9-e1d2,u+e1d4,u+e30c,u+e3ae,u+e3b0,u+e3b3-e3b6,u+e418-e421,u+e487,u+e505-e506,u+e5a6-e5a7,u+f2e4,u+f2ee,u+f300,u+f30e,u+f310-f311,u+f348,u+f34b,u+f355,u+f3b3,u+f454,u+f4c9,u+f4cb,u+f5f9,u+f5fe-f600,u+f603,u+f605-f606,u+f667-f668,u+f66c,u+f66e,u+f670-f672,u+f6ee-f6ef,u+f6f3-f6f4,u+f6f6-f6f7,u+f74f,u+f7ac,u+f80e,u+f811,u+f86c,u+f86f-f870,u+f87a,u+f8c3-f8c6,u+f8c8-f8c9,u+1f341,u+1f36f,u+1f383,u+1f3dd,u+1f3ed,u+1f444,u+1f4af,u+1f4e4-1f4e5,u+1f579,u+1f5dd,u+1f5e2,u+1f96c,u+1f99e,u+1fa81}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c238fb.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c238fb.ttf) format("truetype");unicode-range:u+20,u+4d-4f,u+6d-6f,u+2604,u+263f,u+2642,u+26a3,u+26a5-26a6,u+26a8-26a9,u+26b2,u+e067,u+e1d5,u+e1d7,u+e1ed,u+e1f3,u+e1f6,u+e51f-e525,u+e527-e52f,u+e532,u+f000,u+f002,u+f00e,u+f010,u+f076,u+f0f4,u+f10b,u+f222-f224,u+f227,u+f229-f22c,u+f247-f24a,u+f276,u+f278-f27a,u+f31e,u+f3c1,u+f3c9,u+f3cd,u+f3cf,u+f3d1,u+f538-f53d,u+f561,u+f57b,u+f59f-f5a0,u+f5a6-f5a7,u+f604,u+f610,u+f613,u+f630,u+f676,u+f678,u+f688-f689,u+f6fc,u+f753,u+f78c,u+f7b5,u+1f378,u+1f399,u+1f3ad,u+1f3d4,u+1f4cd,u+1f50d,u+1f52c,u+1f54c,u+1f5fa,u+1f9f2,u+1fac1}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c238fb.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c238fb.ttf) format("truetype");unicode-range:u+20,u+26f0,u+e1d6,u+e1d8-e1ec,u+e1ee-e1f2,u+e1f4-e1f5,u+e1f7-e205,u+e30f-e313,u+e316,u+e3b7-e3c1,u+e422-e426,u+e49a,u+e49c-e49f,u+e526,u+e531,u+e5a8,u+f2f0,u+f301,u+f306,u+f308,u+f30d,u+f3c2,u+f455,u+f4a2-f4ab,u+f4b6,u+f607-f60e,u+f611,u+f614,u+f650,u+f652,u+f6f8-f6f9,u+f6fb,u+f6fd-f6fe,u+f74a,u+f754,u+f7b4,u+f7b7,u+f7f4,u+f872-f874,u+f8af,u+f8cb,u+f8ce-f8d1,u+1f344,u+1f36d,u+1f3a4,u+1f412,u+1f6d1}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-cbbfb4.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-cbbfb4.ttf) format("truetype");unicode-range:u+20,u+50,u+70,u+b6,u+262e,u+26f7,u+2711-2712,u+e069,u+e209,u+e221-e222,u+e22d,u+e31e,u+e43c,u+e533-e54f,u+e551-e558,u+e55a-e560,u+e5a9-e5aa,u+f03b,u+f044,u+f0ea,u+f182-f183,u+f1b0,u+f1dd,u+f1fc,u+f29d,u+f2ce,u+f304-f305,u+f3dd,u+f470,u+f482,u+f484,u+f4cd-f4ce,u+f4d3,u+f53f,u+f554,u+f5ac-f5af,u+f5c4,u+f679,u+f67c,u+f683,u+f6ec,u+f70c,u+f756,u+f7c5,u+f7c9-f7ca,u+f7ce,u+f815-f816,u+f818,u+f84a,u+f85e,u+f879,u+f87c,u+1f336,u+1f3a8,u+1f3c2-1f3c3,u+1f3ca,u+1f4df,u+1f549,u+1f57d,u+1f58a-1f58c,u+1f6b4,u+1f6b6,u+1f6d0,u+1f6ec,u+1f9cd}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-cbbfb4.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-cbbfb4.ttf) format("truetype");unicode-range:u+20,u+2e,u+7c,u+260e,u+2708,u+e01c-e01d,u+e022-e023,u+e206-e208,u+e20a-e220,u+e223-e229,u+e22b-e22c,u+e22e-e22f,u+e317-e318,u+e31a-e31c,u+e31f,u+e3c2-e3c4,u+e427-e439,u+e43b,u+e43d,u+e4a1,u+e550,u+e559,u+e59e,u+f3de,u+f483,u+f4cf-f4d0,u+f4d2,u+f5a9,u+f618,u+f67a,u+f67e,u+f680,u+f701-f703,u+f705-f706,u+f758-f759,u+f7b8,u+f7c7-f7c8,u+f7cb,u+f7d1,u+f817,u+f84b,u+f876,u+f878,u+f8d3-f8d5,u+1f355,u+1f373,u+1f3b9,u+1f416,u+1f6b5,u+1f958,u+1f95c,u+1f95e,u+1f967,u+1f9c5,u+1fad1}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-aa90b0.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-aa90b0.ttf) format("truetype");unicode-range:u+20,u+51-53,u+71-73,u+201c,u+20a8,u+20aa,u+20bd,u+2696,u+2700,u+2702,u+2704,u+e06a-e06c,u+e070,u+e23d,u+e445,u+e447-e448,u+e4a5,u+e561-e56f,u+e571-e574,u+f022,u+f029,u+f045,u+f074,u+f079,u+f09e,u+f0c4,u+f10d,u+f122,u+f14d,u+f156,u+f158,u+f197,u+f1e0,u+f20b,u+f24e,u+f2d4,u+f2ea,u+f2f1,u+f2f5-f2f6,u+f2f9,u+f2fe,u+f30b,u+f362,u+f3ed,u+f410,u+f485-f486,u+f4d6,u+f4d9,u+f515-f516,u+f546-f547,u+f54a-f54b,u+f54f,u+f553,u+f5b1,u+f619,u+f61f,u+f641,u+f6a0,u+f75a-f75b,u+f75e,u+f7b9,u+f7bf-f7c0,u+f7c2,u+f7d9,u+f81d,u+1f308,u+1f397,u+1f455,u+1f4a9,u+1f4b0,u+1f4e1,u+1f500,u+1f504,u+1f6f0,u+1f990,u+1fa9b}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-aa90b0.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-aa90b0.ttf) format("truetype");unicode-range:u+20,u+3b,u+2211,u+25ac,u+26e8,u+2b95,u+e025-e02c,u+e231,u+e234-e23c,u+e23e-e244,u+e246-e24f,u+e2d2,u+e322-e324,u+e3c5-e3c9,u+e43e-e444,u+e446,u+e449,u+e4a2-e4a4,u+e575,u+e5ab,u+f2f8,u+f2fa-f2fb,u+f347,u+f34c,u+f356,u+f365,u+f367,u+f45a-f45b,u+f463,u+f480,u+f488-f489,u+f4d4,u+f61a-f61e,u+f63d,u+f685-f686,u+f68a-f68b,u+f690-f694,u+f707-f70a,u+f70d,u+f70f-f713,u+f7be,u+f7c1,u+f7c3,u+f819-f81c,u+f81e-f822,u+f87e-f87f,u+f8d8,u+f8da-f8dc,u+f8f3,u+1f372,u+1f37f,u+1f3b7,u+1f407,u+1f40f,u+1f411,u+1f4d0,u+1f502,u+1f680,u+1f954,u+1f957,u+1f968,u+1f96a,u+1f9c2,u+1f9e3}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-9d9a2c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-9d9a2c.ttf) format("truetype");unicode-range:u+20,u+a3,u+2197,u+23f1,u+2603,u+2611,u+2620,u+262a,u+26c4,u+2705,u+2721,u+2744,u+2746,u+274e,u+2b1b-2b1c,u+e06d,u+e06f,u+e071,u+e289,u+e576-e579,u+e5af,u+f046,u+f089,u+f098,u+f0dd-f0de,u+f0f1,u+f0fd-f0fe,u+f123,u+f143,u+f146-f147,u+f14a-f14c,u+f150-f152,u+f154,u+f191,u+f196,u+f199,u+f1b1,u+f1de,u+f1e1,u+f277,u+f2d3,u+f2dc,u+f2e5,u+f2f2,u+f360,u+f45c,u+f48d,u+f540,u+f54c,u+f551,u+f5bb-f5bd,u+f5c0,u+f5d0,u+f67b,u+f681-f682,u+f696,u+f698-f69a,u+f714,u+f717,u+f75f,u+f7c4,u+f7cc,u+f7d0,u+f7d2,u+f87b,u+f891,u+1f17f,u+1f480,u+1f571,u+1f577,u+1f6ac,u+1f7e5-1f7eb,u+1f944,u+1f9e6,u+1fa7a}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-9d9a2c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-9d9a2c.ttf) format("truetype");unicode-range:u+20,u+2f,u+5c,u+2139,u+221a,u+2660,u+2728,u+27a1,u+2b05-2b07,u+e02d-e02e,u+e033-e039,u+e250-e288,u+e28a-e28e,u+e329-e32b,u+e3ca-e3ce,u+e400,u+e44b-e450,u+e488-e489,u+e4a6,u+f2e9,u+f2f3-f2f4,u+f2fd,u+f30f,u+f321,u+f329-f32c,u+f339-f33c,u+f350-f353,u+f3f0-f3f2,u+f49b,u+f49f,u+f4c8,u+f617,u+f620,u+f622-f623,u+f68c-f68f,u+f697,u+f716,u+f718-f71a,u+f760-f761,u+f79b,u+f7cf,u+f7d4,u+f824-f825,u+f880,u+f890,u+f8dd-f8de,u+1f320,u+1f366,u+1f40d,u+1f49f,u+1f4a4,u+1f578,u+1f969,u+1f991}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-f064f7.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-f064f7.ttf) format("truetype");unicode-range:u+20,u+54,u+74,u+20b8,u+2122,u+2600,u+26a0,u+26a7,u+26e9,u+e03f-e041,u+e072,u+e29c,u+e2b7,u+e57a-e587,u+e589-e58f,u+e5b4,u+f009-f00b,u+f014,u+f02b,u+f034-f035,u+f071,u+f088,u+f08d,u+f0db,u+f0f2,u+f0f9-f0fa,u+f10a,u+f120,u+f12b,u+f165,u+f185,u+f1ba,u+f204,u+f225,u+f239,u+f25c,u+f2c7-f2cb,u+f2ed,u+f3fa,u+f3ff,u+f45d,u+f48b,u+f48e,u+f491,u+f4db,u+f4de-f4df,u+f519,u+f552,u+f566,u+f5c1,u+f5c3,u+f5c9,u+f62e-f62f,u+f637,u+f63c,u+f69b,u+f6a1,u+f71e,u+f722,u+f769,u+f76b,u+f76f,u+f7d7-f7d8,u+f829-f82a,u+f87d,u+1f321,u+1f32a,u+1f3d3,u+1f3f7,u+1f44e,u+1f489,u+1f4cc,u+1f54d,u+1f588,u+1f68a,u+1f691,u+1f696,u+1f69c,u+1f6a6,u+1f6bd,u+1f6fb,u+1f9b7,u+1f9f0,u+1f9f3,u+1f9fb}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-f064f7.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-f064f7.ttf) format("truetype");unicode-range:u+20,u+7e,u+2694,u+e03b-e03e,u+e043-e044,u+e28f-e29b,u+e29d-e2b6,u+e2b8-e2ba,u+e32d-e330,u+e3cf-e3d0,u+e451-e454,u+e48a-e48b,u+e588,u+e5b0-e5b3,u+f2eb,u+f3fc,u+f400,u+f45e,u+f48c,u+f4dc-f4dd,u+f4e0,u+f631-f636,u+f638-f63a,u+f69e-f69f,u+f71c-f71d,u+f71f-f721,u+f723-f725,u+f763-f768,u+f76a,u+f7db-f7de,u+f826,u+f82b,u+f85d,u+f86e,u+f892,u+f895-f896,u+f8e2-f8e3,u+1f305,u+1f307,u+1f324,u+1f32e,u+1f333-1f334,u+1f363,u+1f384,u+1f3ba,u+1f3be,u+1f523,u+1f52d,u+1f576,u+1f5e1,u+1faa5-1faa6,u+1fad4}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cf62.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cf62.ttf) format("truetype");unicode-range:u+20,u+55-5a,u+75-7a,u+a5,u+d7,u+20a9,u+2195,u+262f,u+2640,u+26a2,u+26a4,u+2715-2716,u+274c,u+2934-2935,u+2b0d,u+e073,u+e075,u+e085-e086,u+e2bb,u+e2c5,u+e2ca,u+e2cd-e2ce,u+e4a8-e4a9,u+e591-e59a,u+f00d,u+f026-f028,u+f0b2,u+f0cd,u+f0d0,u+f0e9,u+f0f0,u+f0f5,u+f13e,u+f157,u+f159,u+f193,u+f221,u+f226,u+f228,u+f235,u+f26c,u+f29a,u+f2d0-f2d1,u+f2e7,u+f30c,u+f338,u+f35d,u+f3be-f3bf,u+f406,u+f424,u+f45f,u+f492,u+f496-f497,u+f4e3,u+f4fa-f502,u+f504-f507,u+f509,u+f5b6,u+f5c5,u+f5cb,u+f5cd-f5ce,u+f6a7,u+f6a9,u+f6ad,u+f728-f729,u+f72b,u+f770,u+f7a0,u+f83e,u+f8e5,u+1f30b,u+1f374,u+1f377,u+1f3d0,u+1f465,u+1f508,u+1f50a,u+1f5d5-1f5d6,u+1f5d9,u+1f690,u+1f943,u+1f977,u+1f9ea}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cf62.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cf62.ttf) format("truetype");unicode-range:u+20,u+223f,u+22c3,u+e047-e048,u+e04a-e050,u+e058,u+e2bc-e2c4,u+e2c6-e2c9,u+e2cb-e2cc,u+e2cf,u+e2d1,u+e331,u+e333-e334,u+e337-e339,u+e3d1-e3d3,u+e455-e466,u+e4a7,u+e590,u+e59b,u+f2e2,u+f346,u+f34d,u+f357,u+f401,u+f40f,u+f460,u+f495,u+f4bb,u+f4e1,u+f5f8,u+f63e,u+f6a2,u+f6a4-f6a6,u+f6aa-f6ac,u+f726-f727,u+f72a,u+f72c-f72d,u+f771,u+f774-f777,u+f7a1,u+f7e2,u+f82c-f82e,u+f831,u+f898-f89b,u+f8e4,u+f8e6,u+f8e9-f8eb,u+f8ed,u+f8f0-f8f2,u+1f3bb,u+1f40b,u+1f422,u+1f477,u+1f4fa,u+1f507,u+1f6f8,u+1f984,u+1f9c7,u+1fa9f}.fa-solid,.fas{font-family:"Font Awesome 6 Pro";font-weight:900}:host,:root{--fa-font-thin:normal 100 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-d5bbe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-d5bbe9.ttf) format("truetype");unicode-range:u+20-21,u+23,u+2b,u+3f,u+ae,u+d8,u+2013,u+201d,u+2190-2193,u+2205,u+2212,u+2303,u+231a,u+2399,u+23e9-23ea,u+23f8-23f9,u+23fb,u+23fe,u+25a0,u+25b2,u+25b6,u+25cf,u+25fb-25fc,u+2601,u+2615,u+261d,u+2665,u+26aa-26ab,u+26df,u+2709,u+270f,u+2713-2714,u+271d,u+273f,u+2753-2755,u+2757,u+2764,u+2795-2796,u+2b24,u+2b50,u+e017,u+e01f,u+e024,u+e045,u+e060,u+f001,u+f003-f007,u+f00c,u+f011-f012,u+f015-f017,u+f019,u+f023-f024,u+f02c-f02d,u+f02f-f031,u+f03a,u+f03d-f03e,u+f040-f041,u+f04a-f04e,u+f060-f065,u+f067-f068,u+f06b-f06d,u+f072,u+f075,u+f077,u+f07b,u+f084,u+f08a,u+f091,u+f093,u+f095-f096,u+f09d,u+f0a2,u+f0a6,u+f0ac-f0ad,u+f0b0,u+f0c0-f0c2,u+f0c5,u+f0c8-f0c9,u+f0cc,u+f0ce,u+f0d1,u+f0d6-f0d7,u+f0dc,u+f0e0,u+f0e5,u+f0e8,u+f0f3,u+f0f7,u+f106,u+f108-f109,u+f10c,u+f10e,u+f110-f111,u+f114,u+f11d-f11e,u+f121,u+f128-f12a,u+f132-f133,u+f135,u+f145,u+f14e,u+f15b,u+f186,u+f188,u+f1ab,u+f1ad,u+f1bb,u+f1c0,u+f1c2-f1c3,u+f1d8-f1d9,u+f1db,u+f1e4,u+f1ea-f1eb,u+f1f8,u+f205,u+f20a,u+f217,u+f21a,u+f21c-f21d,u+f233,u+f238,u+f251,u+f25d,u+f283,u+f292,u+f29e,u+f2a0,u+f2a7,u+f2bb-f2bc,u+f2c0,u+f2cc,u+f2db,u+f2e1,u+f2ec,u+f2f7,u+f303,u+f316,u+f328,u+f332,u+f335,u+f37e,u+f390,u+f3c5,u+f3ce,u+f3f4,u+f40e,u+f435,u+f481,u+f493,u+f4cc,u+f4d1,u+f4d8,u+f4e2,u+f503,u+f51b,u+f52b,u+f549,u+f54e,u+f555,u+f559,u+f56e-f570,u+f594,u+f5a1,u+f5aa-f5ab,u+f5b7,u+f5db-f5dc,u+f5f6,u+f5fd,u+f621,u+f64a,u+f64f,u+f654,u+f656,u+f673,u+f67d,u+f67f,u+f695,u+f69c,u+f6a8,u+f6e3,u+f6e9,u+f6ff,u+f715,u+f734,u+f755,u+f757,u+f773,u+f781,u+f784,u+f788,u+f7b2,u+f7b6,u+f7bd,u+f7d5,u+f7ee,u+f7ff,u+f804,u+f80a,u+f80c,u+f813,u+f82f,u+f855,u+f858-f859,u+f85c,u+f86d,u+f871,u+f893-f894,u+f8a9,u+f8b2,u+f8d6,u+f8d9,u+f8e7,u+f8ef,u+1f310,u+1f319,u+1f331-1f332,u+1f33c,u+1f381,u+1f39f,u+1f3a5-1f3a6,u+1f3b5,u+1f3c1,u+1f3c6,u+1f3cd,u+1f3d9,u+1f3e0,u+1f3e2,u+1f3e8,u+1f3eb,u+1f3f4,u+1f464,u+1f499-1f49c,u+1f4b3,u+1f4bb,u+1f4c1,u+1f4c4-1f4c6,u+1f4cb,u+1f4d4,u+1f4da,u+1f4de,u+1f4ea,u+1f4f0-1f4f1,u+1f4f6,u+1f509,u+1f511-1f512,u+1f514,u+1f517,u+1f525,u+1f527-1f528,u+1f534-1f535,u+1f547,u+1f553,u+1f57b,u+1f582,u+1f5a4-1f5a5,u+1f5a8,u+1f5b6,u+1f5bf,u+1f5cb,u+1f5d4,u+1f5e9,u+1f686,u+1f69a,u+1f6a2,u+1f6bf,u+1f6e1,u+1f7e0-1f7e4,u+1f90d-1f90e,u+1f95b,u+1f9e0-1f9e1,u+1f9ed,u+1fa99}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-e41116.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-e41116.ttf) format("truetype");unicode-range:u+20,u+24-25,u+a9,u+2328,u+2666,u+2672,u+267a-267b,u+2693,u+26a1,u+26ea,u+e010,u+e01b,u+e020-e021,u+e02f,u+e03a,u+e042,u+e046,u+e068,u+e06e,u+e074,u+e076,u+f008,u+f018,u+f01c,u+f025,u+f02a,u+f02e,u+f05b,u+f06e,u+f078,u+f086-f087,u+f097,u+f09c,u+f0a3,u+f0b1,u+f0c6,u+f0e6-f0e7,u+f0eb,u+f0f8,u+f112,u+f11c,u+f126,u+f12c-f12e,u+f130-f131,u+f13d,u+f140,u+f155,u+f164,u+f1ae,u+f1b2,u+f1b8,u+f1c1,u+f1ce,u+f1dc,u+f1e5-f1e6,u+f1ec,u+f1f9,u+f219,u+f21b,u+f22d,u+f234,u+f246,u+f24d,u+f275,u+f295,u+f2b5,u+f2cd,u+f2d2,u+f2fc,u+f302,u+f31a,u+f363,u+f3e5,u+f3fb,u+f44b,u+f47d,u+f48a,u+f48f-f490,u+f494,u+f498,u+f4b7,u+f4ca,u+f4d7,u+f508,u+f51d-f51e,u+f521-f522,u+f530,u+f535,u+f53e,u+f541,u+f543-f545,u+f548,u+f55d,u+f564,u+f56c,u+f577-f578,u+f590,u+f595,u+f5a2,u+f5b0,u+f5ba,u+f5bf,u+f5ca,u+f5ef,u+f5f2,u+f5fb,u+f63b,u+f649,u+f653,u+f65b,u+f664,u+f675,u+f6bf-f6c0,u+f6d5,u+f6f5,u+f6fa,u+f700,u+f70b,u+f70e,u+f71b,u+f72e-f72f,u+f733,u+f747,u+f75c,u+f762,u+f77c,u+f801,u+f814,u+f830,u+f845-f846,u+f850,u+f866,u+f875,u+f897,u+f89f,u+f8b1,u+f8bb,u+f8c7,u+f8d7,u+f8df-f8e0,u+f8ee,u+f8fd,u+1f337,u+1f356,u+1f39e,u+1f3a7,u+1f3b2,u+1f3c5,u+1f3d6,u+1f3e5,u+1f409,u+1f41f,u+1f441,u+1f44d,u+1f451,u+1f4a1,u+1f4b2,u+1f4bc-1f4bd,u+1f4ce-1f4cf,u+1f4dc,u+1f4e3,u+1f4fb,u+1f501,u+1f50c,u+1f513,u+1f516,u+1f52a,u+1f575,u+1f5a9,u+1f5ea,u+1f6c1,u+1f6e3,u+1f6eb,u+1f916,u+1f9a6,u+1f9e9,u+1f9fc,u+1f9fe,u+1fa90-1fa91}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-bbafe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-bbafe9.ttf) format("truetype");unicode-range:u+20,u+f293,u+f2b4,u+f425,u+f4e6}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-56ba33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-56ba33.ttf) format("truetype");unicode-range:u+20,u+e531}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-c046b6.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-c046b6.ttf) format("truetype");unicode-range:u+20,u+26-27,u+2a,u+30-39,u+40-42,u+60-62,u+ab,u+bb,u+2039-203a,u+21a4-21a7,u+21ba-21bb,u+21c4,u+21e4-21e5,u+2304,u+23ee,u+23f0,u+2625,u+269b,u+2731,u+e059-e05a,u+e089-e08a,u+e08c-e08d,u+e08f-e0ac,u+e2dc,u+e2df,u+e2e1,u+e2e3-e2e6,u+e33a,u+e3d4-e3d8,u+e467-e468,u+e48c-e48f,u+e4aa-e4c2,u+f01e,u+f021,u+f036-f039,u+f047-f049,u+f05e,u+f069,u+f07d-f07e,u+f08b,u+f08e,u+f090,u+f0e2,u+f0ec,u+f100-f105,u+f107,u+f148-f149,u+f15d-f15e,u+f160-f163,u+f175-f178,u+f1fa,u+f245,u+f290,u+f2b9-f2ba,u+f31d,u+f336,u+f33d-f33e,u+f340-f345,u+f34e,u+f361,u+f364,u+f366,u+f462,u+f464,u+f54d,u+f557,u+f5d1-f5d4,u+f616,u+f640,u+f644-f646,u+f666,u+f6ae,u+f6b0,u+f6b2-f6b4,u+f732,u+f779,u+f77d-f77e,u+f7e5,u+f7f9,u+f843-f844,u+f847,u+f881-f88f,u+f8a0-f8a3,u+f8f4-f8f6,u+1f34e-1f34f,u+1f392,u+1f47d-1f47e,u+1f5d8,u+1f6ab,u+1f6ad,u+1f6cd,u+1f953,u+1f956,u+1f96f,u+1f9a1,u+1f9ee,u+1fa79,u+1fa93,u+1fa95}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-792d0c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-792d0c.ttf) format("truetype");unicode-range:u+20,u+28-29,u+43,u+5b,u+5d,u+63,u+7b,u+7d,u+2623,u+26be,u+e05b,u+e0ad-e0ce,u+e2e7-e2eb,u+e2f2,u+e33b-e33f,u+e3da-e3e4,u+e469-e46d,u+e490,u+e4c3-e4dc,u+f032,u+f0a1,u+f0fc,u+f187,u+f19c,u+f1e2,u+f1f6-f1f7,u+f206-f207,u+f236,u+f240-f244,u+f291,u+f293,u+f2a1,u+f376-f377,u+f432-f434,u+f436-f438,u+f458,u+f465-f469,u+f487,u+f499-f49a,u+f49c-f49e,u+f4a0-f4a1,u+f517-f518,u+f51a,u+f550,u+f558,u+f55b-f55c,u+f55e,u+f562,u+f5d5-f5da,u+f5dd,u+f647-f648,u+f64b,u+f66a,u+f677,u+f687,u+f6b5-f6b9,u+f735,u+f77f-f780,u+f782,u+f7e6-f7ed,u+f7f1,u+f805,u+f823,u+f827-f828,u+f848-f849,u+f84c-f84f,u+f851-f854,u+f856-f857,u+f89c-f89d,u+f8a5,u+f8f7-f8fc,u+1f32f,u+1f345,u+1f354,u+1f35e,u+1f367,u+1f3af,u+1f3c0,u+1f3f9,u+1f4a3,u+1f4d5-1f4d9,u+1f4e2,u+1f4e6,u+1f4fe,u+1f50b,u+1f515,u+1f56b,u+1f56d-1f56e,u+1f5c4,u+1f5f3,u+1f68d,u+1f6b2,u+1f6cc,u+1f6ce-1f6cf,u+1f94a,u+1f94e,u+1f963,u+1f966,u+1f97e,u+1f9b4,u+1f9c8,u+1f9f9}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-16f2f9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-16f2f9.ttf) format("truetype");unicode-range:u+20,u+2329-232a,u+265a-265f,u+26fa,u+e000-e001,u+e0cf-e0df,u+e0e1-e105,u+e341-e344,u+e3e5-e3f7,u+e46e-e474,u+e4dd-e4e1,u+e59c-e59d,u+f053-f054,u+f058,u+f05d,u+f073,u+f07a,u+f080,u+f083,u+f0a8-f0ab,u+f0d8-f0da,u+f137-f13a,u+f1b9,u+f1fd-f1fe,u+f200-f201,u+f218,u+f271-f274,u+f322-f325,u+f32d-f32e,u+f330-f331,u+f333-f334,u+f439-f448,u+f46b,u+f474-f476,u+f51c,u+f55f-f560,u+f59d,u+f5de-f5e7,u+f643,u+f64c-f64e,u+f6a3,u+f6ba-f6be,u+f6c1,u+f736,u+f772,u+f783,u+f786-f787,u+f78a-f78b,u+f79e-f79f,u+f7da,u+f7ef-f7f0,u+f832-f833,u+f85a-f85b,u+f8a4,u+f8a7-f8a8,u+f8aa-f8ac,u+f8ec,u+f8fe-f8ff,u+1f330,u+1f335,u+1f36b-1f36c,u+1f370,u+1f382,u+1f408,u+1f4c9,u+1f4f7,u+1f4f9,u+1f4fc,u+1f56f,u+1f5ad,u+1f697-1f698,u+1f6a1,u+1f6d2,u+1f942,u+1f955,u+1f96b,u+1f9c0}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-3eb023.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-3eb023.ttf) format("truetype");unicode-range:u+20,u+2c,u+3a,u+24bd,u+25d0,u+2622,u+2663,u+26b0,u+26c5-26c6,u+e002-e003,u+e030-e032,u+e051,u+e106-e140,u+e142-e14f,u+e2f4-e2f6,u+e345-e35f,u+e361,u+e3f8-e3fd,u+e491-e492,u+e4e2-e4e4,u+f01a-f01b,u+f01d,u+f042,u+f055-f057,u+f059-f05a,u+f05c,u+f066,u+f06a,u+f0ed-f0ee,u+f144,u+f18e,u+f190,u+f192,u+f1da,u+f27b,u+f28b-f28e,u+f29c,u+f2bd-f2be,u+f2e8,u+f327,u+f358-f35b,u+f381-f382,u+f386-f387,u+f46c-f46d,u+f47e,u+f4ac-f4b5,u+f4b9,u+f4c7,u+f51f,u+f568,u+f5e8-f5e9,u+f602,u+f615,u+f651,u+f6c2-f6c4,u+f6c6,u+f737-f746,u+f74e,u+f76c-f76e,u+f7ba,u+f7cd,u+f7f3,u+f7f5,u+f8ad-f8ae,u+f8b0,u+1f326-1f329,u+1f32b,u+1f4ac,u+1f4bf-1f4c0,u+1f518,u+1f5b8}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-b1cb49.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-b1cb49.ttf) format("truetype");unicode-range:u+20,u+22,u+3d,u+44-46,u+64-66,u+f7,u+20ac,u+232b,u+23cf,u+2638-2639,u+2680-2685,u+2797,u+e150-e152,u+e154-e158,u+e15a-e166,u+e168-e173,u+e2fa,u+e2fe,u+e362-e375,u+e3fe-e3ff,u+e401-e409,u+e475-e480,u+e4e5-e4e9,u+e59f,u+f043,u+f052,u+f070,u+f119,u+f125,u+f141-f142,u+f153,u+f1b3,u+f1fb,u+f2a2,u+f2a4,u+f2a8,u+f2b6-f2b7,u+f309,u+f320,u+f326,u+f349-f34a,u+f354,u+f389-f38a,u+f39b-f39c,u+f422,u+f449-f44a,u+f46e-f46f,u+f471-f473,u+f4b8,u+f4ba,u+f520,u+f523-f52a,u+f52c,u+f542,u+f556,u+f55a,u+f563,u+f565,u+f567,u+f569-f56a,u+f579,u+f57c-f57e,u+f5c7,u+f5ea-f5ee,u+f5f0,u+f655,u+f657-f658,u+f674,u+f6b1,u+f6c5,u+f6c7-f6c8,u+f6cb,u+f6cd-f6d4,u+f6d6-f6db,u+f748-f749,u+f750,u+f78e-f78f,u+f792-f796,u+f7a2,u+f7f6-f7f8,u+f7fa-f7fc,u+f85f-f862,u+f8b3-f8b5,u+f8cc-f8cd,u+1f30d-1f30f,u+1f33d,u+1f357,u+1f369-1f36a,u+1f36e,u+1f3cf,u+1f404,u+1f415,u+1f418,u+1f442,u+1f4a7,u+1f54a,u+1f5b1,u+1f620,u+1f633,u+1f6aa,u+1f92d,u+1f941,u+1f94c,u+1f950,u+1f952,u+1f95a,u+1f964,u+1f980,u+1f986,u+1f98c,u+1f9ae,u+1f9c1,u+1f9ec,u+1fae4-1fae5}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-493f48.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-493f48.ttf) format("truetype");unicode-range:u+20,u+2698,u+e004-e006,u+e053-e054,u+e174-e18d,u+e2ff-e304,u+e376-e3a9,u+e40a-e40c,u+e481-e485,u+e493-e494,u+e4ea-e4f3,u+e5a0-e5a1,u+f07c,u+f0c3,u+f0c7,u+f0f6,u+f115,u+f118,u+f11a,u+f134,u+f15c,u+f1ac,u+f1c4-f1c9,u+f317-f319,u+f31c,u+f3a0,u+f44c,u+f456,u+f46a,u+f477-f478,u+f4da,u+f52d,u+f56b,u+f56d,u+f571-f576,u+f57a,u+f57f-f58c,u+f596-f59c,u+f5a4-f5a5,u+f5b3-f5b4,u+f5b8-f5b9,u+f5c2,u+f5c8,u+f5f3,u+f659-f65a,u+f65c-f65d,u+f662,u+f6dd,u+f6df-f6e1,u+f74b-f74d,u+f79a,u+f7e4,u+f7fd-f7fe,u+f800,u+f863-f865,u+f877,u+f8b6-f8ba,u+1f3d1,u+1f4be,u+1f4c2,u+1f4dd,u+1f4e0,u+1f526,u+1f5aa,u+1f5b7,u+1f5b9,u+1f5bb,u+1f5c1,u+1f5ce,u+1f600-1f606,u+1f609-1f60a,u+1f60d,u+1f610,u+1f617-1f619,u+1f61b-1f61d,u+1f622,u+1f626,u+1f62b-1f62e,u+1f636,u+1f642,u+1f644,u+1f6a9,u+1f6b0,u+1f923,u+1f929,u+1f959,u+1f979,u+1f9c6,u+1f9ef,u+1fab6,u+1fad3,u+1fae0-1fae3}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-910f33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-910f33.ttf) format("truetype");unicode-range:u+20,u+3e,u+47-48,u+67-68,u+23ed,u+2699,u+26bd,u+26fd,u+270a-270c,u+2b23,u+e008-e00c,u+e05c-e05f,u+e061-e064,u+e18e-e1ad,u+e306-e307,u+e3aa-e3ad,u+e40d-e40e,u+e410-e417,u+e486,u+e495-e498,u+e4f4-e504,u+e5a2-e5a5,u+f013,u+f050-f051,u+f085,u+f0a0,u+f0a4-f0a5,u+f0a7,u+f0e3-f0e4,u+f11b,u+f19d,u+f1e3,u+f21e,u+f255-f25b,u+f2a3,u+f2b4,u+f2e3,u+f2e6,u+f307,u+f312-f315,u+f3a5,u+f3fd,u+f425,u+f44e-f451,u+f461,u+f47a-f47c,u+f4bc-f4c6,u+f4e6,u+f52e-f52f,u+f531-f533,u+f58d-f58f,u+f5f4-f5f5,u+f624-f62d,u+f65e-f661,u+f663,u+f665,u+f684,u+f6de,u+f6e2,u+f6e4-f6e8,u+f6ea-f6eb,u+f79c-f79d,u+f7a3-f7a9,u+f802-f803,u+f806-f809,u+f867-f86b,u+f8bc-f8c2,u+1f35f,u+1f393,u+1f3ae,u+1f3b8,u+1f3c8,u+1f453,u+1f47b,u+1f48e,u+1f494,u+1f54e,u+1f595-1f596,u+1f5b4,u+1f681,u+1f91a,u+1f91d,u+1f9c4,u+1fad5}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-25ee0f.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-25ee0f.ttf) format("truetype");unicode-range:u+20,u+2d,u+3c,u+49-4c,u+69-6c,u+2015,u+20a4,u+20b4,u+2194,u+221e,u+22c2,u+231b,u+23f3,u+262c,u+267e,u+26f8,u+e00d-e00f,u+e011-e012,u+e014-e016,u+e018-e019,u+e065-e066,u+e1ae-e1d4,u+e30c,u+e3ae-e3b6,u+e418-e421,u+e487,u+e505-e51e,u+e5a6-e5a7,u+f033,u+f03c,u+f094,u+f0ae,u+f0ca-f0cb,u+f0fb,u+f124,u+f127,u+f195,u+f1cd,u+f250,u+f252-f254,u+f2c1-f2c3,u+f2e4,u+f2ee,u+f300,u+f30a,u+f30e,u+f310-f311,u+f337,u+f348,u+f34b,u+f355,u+f3b3,u+f3e0,u+f453-f454,u+f479,u+f47f,u+f4c9,u+f4cb,u+f534,u+f536-f537,u+f591,u+f593,u+f5f9,u+f5fc,u+f5fe-f601,u+f603,u+f605-f606,u+f667-f669,u+f66b-f672,u+f6ed-f6f4,u+f6f6-f6f7,u+f74f,u+f751-f752,u+f7aa-f7ae,u+f7f2,u+f80b,u+f80d-f812,u+f86c,u+f86f-f870,u+f87a,u+f8c3-f8c6,u+f8c8-f8c9,u+1f32d,u+1f341,u+1f34b,u+1f368,u+1f36f,u+1f383,u+1f3db,u+1f3dd,u+1f3ed,u+1f40e,u+1f444,u+1f4af,u+1f4e4-1f4e5,u+1f54b,u+1f579,u+1f5dd,u+1f5e2,u+1f96c,u+1f99b,u+1f99e,u+1fa81}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-c238fb.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-c238fb.ttf) format("truetype");unicode-range:u+20,u+4d-4f,u+6d-6f,u+2604,u+263f,u+2642,u+26a3,u+26a5-26a6,u+26a8-26a9,u+26b2,u+26f0,u+e067,u+e1d5-e205,u+e30f-e313,u+e316,u+e3b7-e3c1,u+e422-e426,u+e49a,u+e49c-e49f,u+e51f-e52f,u+e531-e532,u+e5a8,u+f000,u+f002,u+f00e,u+f010,u+f076,u+f0f4,u+f10b,u+f222-f224,u+f227,u+f229-f22c,u+f247-f24a,u+f276,u+f278-f27a,u+f2f0,u+f301,u+f306,u+f308,u+f30d,u+f31e,u+f3c1-f3c2,u+f3c9,u+f3cd,u+f3cf,u+f3d1,u+f455,u+f4a2-f4ab,u+f4b6,u+f538-f53d,u+f561,u+f57b,u+f59f-f5a0,u+f5a6-f5a7,u+f604,u+f607-f60e,u+f610-f611,u+f613-f614,u+f630,u+f650,u+f652,u+f676,u+f678,u+f688-f689,u+f6f8-f6f9,u+f6fb-f6fe,u+f74a,u+f753-f754,u+f78c,u+f7b4-f7b5,u+f7b7,u+f7f4,u+f872-f874,u+f8af,u+f8cb,u+f8ce-f8d1,u+1f344,u+1f36d,u+1f378,u+1f399,u+1f3a4,u+1f3ad,u+1f3d4,u+1f412,u+1f4cd,u+1f50d,u+1f52c,u+1f54c,u+1f5fa,u+1f6d1,u+1f9f2,u+1fac1}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-cbbfb4.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-cbbfb4.ttf) format("truetype");unicode-range:u+20,u+2e,u+50,u+70,u+7c,u+b6,u+260e,u+262e,u+26f7,u+2708,u+2711-2712,u+e01c-e01d,u+e022-e023,u+e069,u+e206-e229,u+e22b-e22f,u+e317-e318,u+e31a-e31c,u+e31e-e31f,u+e3c2-e3c4,u+e427-e439,u+e43b-e43d,u+e4a1,u+e533-e560,u+e59e,u+e5a9-e5aa,u+f03b,u+f044,u+f0ea,u+f182-f183,u+f1b0,u+f1dd,u+f1fc,u+f29d,u+f2ce,u+f304-f305,u+f3dd-f3de,u+f470,u+f482-f484,u+f4cd-f4d0,u+f4d2-f4d3,u+f53f,u+f554,u+f5a9,u+f5ac-f5af,u+f5c4,u+f618,u+f679-f67a,u+f67c,u+f67e,u+f680,u+f683,u+f6ec,u+f701-f703,u+f705-f706,u+f70c,u+f756,u+f758-f759,u+f7b8,u+f7c5,u+f7c7-f7cb,u+f7ce,u+f7d1,u+f815-f818,u+f84a-f84b,u+f85e,u+f876,u+f878-f879,u+f87c,u+f8d3-f8d5,u+1f336,u+1f355,u+1f373,u+1f3a8,u+1f3b9,u+1f3c2-1f3c3,u+1f3ca,u+1f416,u+1f4df,u+1f549,u+1f57d,u+1f58a-1f58c,u+1f6b4-1f6b6,u+1f6d0,u+1f6ec,u+1f958,u+1f95c,u+1f95e,u+1f967,u+1f9c5,u+1f9cd,u+1fad1}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-aa90b0.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-aa90b0.ttf) format("truetype");unicode-range:u+20,u+3b,u+51-53,u+71-73,u+201c,u+20a8,u+20aa,u+20bd,u+2211,u+25ac,u+2696,u+26e8,u+2700,u+2702,u+2704,u+2b95,u+e025-e02c,u+e06a-e06c,u+e070,u+e231,u+e234-e244,u+e246-e24f,u+e2d2,u+e322-e324,u+e3c5-e3c9,u+e43e-e449,u+e4a2-e4a5,u+e561-e56f,u+e571-e575,u+e5ab,u+f022,u+f029,u+f045,u+f074,u+f079,u+f09e,u+f0c4,u+f10d,u+f122,u+f14d,u+f156,u+f158,u+f197,u+f1e0,u+f20b,u+f24e,u+f2d4,u+f2ea,u+f2f1,u+f2f5-f2f6,u+f2f8-f2fb,u+f2fe,u+f30b,u+f347,u+f34c,u+f356,u+f362,u+f365,u+f367,u+f3ed,u+f410,u+f45a-f45b,u+f463,u+f480,u+f485-f486,u+f488-f489,u+f4d4,u+f4d6,u+f4d9,u+f515-f516,u+f546-f547,u+f54a-f54b,u+f54f,u+f553,u+f5b1,u+f619-f61f,u+f63d,u+f641,u+f685-f686,u+f68a-f68b,u+f690-f694,u+f6a0,u+f707-f70a,u+f70d,u+f70f-f713,u+f75a-f75b,u+f75e,u+f7b9,u+f7be-f7c3,u+f7d9,u+f819-f822,u+f87e-f87f,u+f8d8,u+f8da-f8dc,u+f8f3,u+1f308,u+1f372,u+1f37f,u+1f397,u+1f3b7,u+1f407,u+1f40f,u+1f411,u+1f455,u+1f4a9,u+1f4b0,u+1f4d0,u+1f4e1,u+1f500,u+1f502,u+1f504,u+1f680,u+1f6f0,u+1f954,u+1f957,u+1f968,u+1f96a,u+1f990,u+1f9c2,u+1f9e3,u+1fa9b}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-9d9a2c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-9d9a2c.ttf) format("truetype");unicode-range:u+20,u+2f,u+5c,u+a3,u+2139,u+2197,u+221a,u+23f1,u+2603,u+2611,u+2620,u+262a,u+2660,u+26c4,u+2705,u+2721,u+2728,u+2744,u+2746,u+274e,u+27a1,u+2b05-2b07,u+2b1b-2b1c,u+e02d-e02e,u+e033-e039,u+e06d,u+e06f,u+e071,u+e250-e28e,u+e329-e32b,u+e3ca-e3ce,u+e400,u+e44b-e450,u+e488-e489,u+e4a6,u+e576-e579,u+e5af,u+f046,u+f089,u+f098,u+f0dd-f0de,u+f0f1,u+f0fd-f0fe,u+f123,u+f143,u+f146-f147,u+f14a-f14c,u+f150-f152,u+f154,u+f191,u+f196,u+f199,u+f1b1,u+f1de,u+f1e1,u+f277,u+f2d3,u+f2dc,u+f2e5,u+f2e9,u+f2f2-f2f4,u+f2fd,u+f30f,u+f321,u+f329-f32c,u+f339-f33c,u+f350-f353,u+f360,u+f3f0-f3f2,u+f45c,u+f48d,u+f49b,u+f49f,u+f4c8,u+f540,u+f54c,u+f551,u+f5bb-f5bd,u+f5c0,u+f5d0,u+f617,u+f620,u+f622-f623,u+f67b,u+f681-f682,u+f68c-f68f,u+f696-f69a,u+f714,u+f716-f71a,u+f75f-f761,u+f79b,u+f7c4,u+f7cc,u+f7cf-f7d0,u+f7d2,u+f7d4,u+f824-f825,u+f87b,u+f880,u+f890-f891,u+f8dd-f8de,u+1f17f,u+1f320,u+1f366,u+1f40d,u+1f480,u+1f49f,u+1f4a4,u+1f571,u+1f577-1f578,u+1f6ac,u+1f7e5-1f7eb,u+1f944,u+1f969,u+1f991,u+1f9e6,u+1fa7a}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-f064f7.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-f064f7.ttf) format("truetype");unicode-range:u+20,u+54,u+74,u+7e,u+20b8,u+2122,u+2600,u+2694,u+26a0,u+26a7,u+26e9,u+e03b-e041,u+e043-e044,u+e072,u+e28f-e2ba,u+e32d-e330,u+e3cf-e3d0,u+e451-e454,u+e48a-e48b,u+e57a-e58f,u+e5b0-e5b4,u+f009-f00b,u+f014,u+f02b,u+f034-f035,u+f071,u+f088,u+f08d,u+f0db,u+f0f2,u+f0f9-f0fa,u+f10a,u+f120,u+f12b,u+f165,u+f185,u+f1ba,u+f204,u+f225,u+f239,u+f25c,u+f2c7-f2cb,u+f2eb,u+f2ed,u+f3fa,u+f3fc,u+f3ff-f400,u+f45d-f45e,u+f48b-f48c,u+f48e,u+f491,u+f4db-f4e0,u+f519,u+f552,u+f566,u+f5c1,u+f5c3,u+f5c9,u+f62e-f62f,u+f631-f63a,u+f63c,u+f69b,u+f69e-f69f,u+f6a1,u+f71c-f725,u+f763-f76b,u+f76f,u+f7d7-f7d8,u+f7db-f7de,u+f826,u+f829-f82b,u+f85d,u+f86e,u+f87d,u+f892,u+f895-f896,u+f8e2-f8e3,u+1f305,u+1f307,u+1f321,u+1f324,u+1f32a,u+1f32e,u+1f333-1f334,u+1f363,u+1f384,u+1f3ba,u+1f3be,u+1f3d3,u+1f3f7,u+1f44e,u+1f489,u+1f4cc,u+1f523,u+1f52d,u+1f54d,u+1f576,u+1f588,u+1f5e1,u+1f68a,u+1f691,u+1f696,u+1f69c,u+1f6a6,u+1f6bd,u+1f6fb,u+1f9b7,u+1f9f0,u+1f9f3,u+1f9fb,u+1faa5-1faa6,u+1fad4}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:100;font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-b1cf62.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-thin-100-b1cf62.ttf) format("truetype");unicode-range:u+20,u+55-5a,u+75-7a,u+a5,u+d7,u+20a9,u+2195,u+223f,u+22c3,u+262f,u+2640,u+26a2,u+26a4,u+2715-2716,u+274c,u+2934-2935,u+2b0d,u+e047-e048,u+e04a-e050,u+e058,u+e073,u+e075,u+e085-e086,u+e2bb-e2cf,u+e2d1,u+e331,u+e333-e334,u+e337-e339,u+e3d1-e3d3,u+e455-e466,u+e4a7-e4a9,u+e590-e59b,u+f00d,u+f026-f028,u+f0b2,u+f0cd,u+f0d0,u+f0e9,u+f0f0,u+f0f5,u+f13e,u+f157,u+f159,u+f193,u+f221,u+f226,u+f228,u+f235,u+f26c,u+f29a,u+f2d0-f2d1,u+f2e2,u+f2e7,u+f30c,u+f338,u+f346,u+f34d,u+f357,u+f35d,u+f3be-f3bf,u+f401,u+f406,u+f40f,u+f424,u+f45f-f460,u+f492,u+f495-f497,u+f4bb,u+f4e1,u+f4e3,u+f4fa-f502,u+f504-f507,u+f509,u+f5b6,u+f5c5,u+f5cb,u+f5cd-f5ce,u+f5f8,u+f63e,u+f6a2,u+f6a4-f6a7,u+f6a9-f6ad,u+f726-f72d,u+f770-f771,u+f774-f777,u+f7a0-f7a1,u+f7e2,u+f82c-f82e,u+f831,u+f83e,u+f898-f89b,u+f8e4-f8e6,u+f8e9-f8eb,u+f8ed,u+f8f0-f8f2,u+1f30b,u+1f374,u+1f377,u+1f3bb,u+1f3d0,u+1f40b,u+1f422,u+1f465,u+1f477,u+1f4fa,u+1f507-1f508,u+1f50a,u+1f5d5-1f5d6,u+1f5d9,u+1f690,u+1f6f8,u+1f943,u+1f977,u+1f984,u+1f9c7,u+1f9ea,u+1fa9f}.fa-thin,.fat{font-family:"Font Awesome 6 Pro";font-weight:100}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400.ttf) format("truetype");unicode-range:u+a}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-bbafe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-bbafe9.ttf) format("truetype");unicode-range:u+e007,u+e052,u+e077-e079,u+e07d-e081,u+f0d5,u+f0e1,u+f113,u+f13c,u+f15a,u+f16e,u+f170-f171,u+f17d,u+f180,u+f184,u+f1a5-f1a6,u+f1a9-f1aa,u+f1bd,u+f1cb-f1cc,u+f1d1,u+f1d3-f1d4,u+f1ee,u+f1f2-f1f5,u+f202,u+f208-f209,u+f20d,u+f211-f212,u+f23e,u+f24b-f24c,u+f25e,u+f260-f261,u+f265,u+f268-f269,u+f26d-f26e,u+f27c,u+f27e,u+f280,u+f282,u+f284,u+f286,u+f293-f294,u+f296,u+f2a5,u+f2b3-f2b4,u+f2b8,u+f2d5-f2d8,u+f369-f375,u+f378,u+f37a-f37d,u+f37f-f380,u+f383-f385,u+f388,u+f38b-f38f,u+f391,u+f394-f396,u+f399-f39a,u+f39d-f39e,u+f3a1-f3a4,u+f3a6-f3a8,u+f3aa,u+f3ad-f3ae,u+f3b0-f3b2,u+f3b4-f3b8,u+f3ba-f3bd,u+f415-f417,u+f41c-f41d,u+f420-f421,u+f423,u+f425-f427,u+f42c-f430,u+f44d,u+f452,u+f4e6-f4f5,u+f50a-f50e,u+f592,u+f5f1,u+f5f7,u+f5fa,u+f642,u+f6ca,u+f6cc,u+f6dc,u+f77a,u+f785,u+f789,u+f78d,u+f790-f791,u+f797-f799,u+f7b0-f7b1,u+f834-f83a,u+f841,u+f89e,u+f8a6}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-f6b769.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-f6b769.ttf) format("truetype");unicode-range:u+e013,u+e07b,u+e084,u+f08c,u+f099-f09b,u+f0d2,u+f13b,u+f167,u+f16b-f16d,u+f179-f17c,u+f17e,u+f18c,u+f19a-f19b,u+f1a0,u+f1b4,u+f1bc,u+f1be,u+f1e8,u+f1ed,u+f1f0-f1f1,u+f20e,u+f210,u+f213-f214,u+f232,u+f23a,u+f26b,u+f270,u+f288,u+f299,u+f2a6,u+f2b0,u+f2c5-f2c6,u+f2e0,u+f368,u+f379,u+f392-f393,u+f39f,u+f3a9,u+f3ab-f3ac,u+f3c0,u+f3c7,u+f3ca,u+f3e2,u+f3eb-f3ec,u+f3f8,u+f3fe,u+f419,u+f41b,u+f4d5,u+f4e4,u+f4f8-f4f9,u+f514,u+f5b5,u+f6c9,u+f731,u+f77b,u+f7af,u+f7e1,u+f83b}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-56ba33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-56ba33.ttf) format("truetype");unicode-range:u+e01a,u+e01e,u+e049,u+e055-e057,u+e07a,u+e07c,u+e082-e083,u+e087-e088,u+f081-f082,u+f092,u+f0d3-f0d4,u+f136,u+f168-f169,u+f173-f174,u+f181,u+f189-f18b,u+f18d,u+f194,u+f198,u+f19e,u+f1a1-f1a4,u+f1a7-f1a8,u+f1b5-f1b7,u+f1ca,u+f1d0,u+f1d2,u+f1d5-f1d7,u+f1e7,u+f1e9,u+f203,u+f215-f216,u+f231,u+f237,u+f23b-f23d,u+f263-f264,u+f266-f267,u+f26a,u+f27d,u+f281,u+f285,u+f287,u+f289-f28a,u+f297-f298,u+f2a9-f2ae,u+f2b1-f2b2,u+f2c4,u+f2d9-f2da,u+f2dd-f2de,u+f35c,u+f397,u+f3af,u+f3b9,u+f3c3-f3c4,u+f3c6,u+f3c8,u+f3cb-f3cc,u+f3d0,u+f3d2-f3dc,u+f3df,u+f3e1,u+f3e3-f3e4,u+f3e6-f3ea,u+f3ee-f3ef,u+f3f3,u+f3f5-f3f7,u+f3f9,u+f402-f405,u+f407-f40d,u+f411-f414,u+f41a,u+f41e-f41f,u+f428-f42b,u+f431,u+f457,u+f459,u+f4e5,u+f4f6-f4f7,u+f50f-f513,u+f59e,u+f5a3,u+f5a8,u+f5b2,u+f5be,u+f5c6,u+f5cc,u+f5cf,u+f60f,u+f612,u+f63f,u+f69d,u+f730,u+f75d,u+f7b3,u+f7bb-f7bc,u+f7c6,u+f7d3,u+f7d6,u+f7df-f7e0,u+f7e3,u+f83c-f83d,u+f83f-f840,u+f842,u+f8ca,u+f8d2,u+f8e1,u+f8e8}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c046b6.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c046b6.ttf) format("truetype");unicode-range:u+e059-e05a,u+f01e,u+f021,u+f036-f039,u+f047-f049,u+f05e,u+f069,u+f07d-f07e,u+f08b,u+f08e,u+f090,u+f0e2,u+f0ec,u+f100-f105,u+f107,u+f148-f149,u+f15d-f15e,u+f160-f163,u+f175-f178,u+f1fa,u+f245,u+f290,u+f2b9,u+f31d,u+f336,u+f33d-f33e,u+f340-f345,u+f34e,u+f361,u+f364,u+f366,u+f462,u+f464,u+f54d,u+f557,u+f5d1-f5d4,u+f616,u+f640,u+f644-f646,u+f666,u+f6ae,u+f6b0,u+f6b2-f6b4,u+f732,u+f779,u+f77d-f77e,u+f7e5,u+f7f9,u+f843-f844,u+f847,u+f881-f88f,u+f8a0-f8a3,u+f8f4-f8f6}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-aa90b0.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-aa90b0.ttf) format("truetype");unicode-range:u+e025-e02c,u+e06a-e06c,u+e070,u+f022,u+f029,u+f074,u+f079,u+f09e,u+f0c4,u+f10d,u+f122,u+f14d,u+f156,u+f158,u+f197,u+f1e0,u+f20b,u+f24e,u+f2ea,u+f2f1,u+f2f5-f2f6,u+f2f8-f2fb,u+f2fe,u+f30b,u+f347,u+f34c,u+f356,u+f362,u+f365,u+f367,u+f3ed,u+f410,u+f45a-f45b,u+f463,u+f480,u+f485-f486,u+f488-f489,u+f4d4,u+f4d6,u+f4d9,u+f515-f516,u+f546-f547,u+f54a-f54b,u+f54f,u+f553,u+f5b1,u+f619-f61f,u+f63d,u+f641,u+f685-f686,u+f68a-f68b,u+f690-f694,u+f6a0,u+f707-f70a,u+f70d,u+f70f-f713,u+f75a-f75b,u+f75e,u+f7b9,u+f7be-f7c3,u+f7d9,u+f819-f822,u+f87e-f87f,u+f8d8,u+f8da-f8dc,u+f8f3}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-d5bbe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-d5bbe9.ttf) format("truetype");unicode-range:u+e017,u+e01f,u+e024,u+e045,u+e060,u+f001,u+f004-f005,u+f007,u+f00c,u+f011-f012,u+f015,u+f017,u+f019,u+f023-f024,u+f02c-f02d,u+f02f-f031,u+f03a,u+f03d-f03e,u+f040-f041,u+f04a-f04e,u+f060-f065,u+f067-f068,u+f06b-f06d,u+f072,u+f075,u+f077,u+f07b,u+f084,u+f091,u+f093,u+f095,u+f09d,u+f0a6,u+f0ac-f0ad,u+f0b0,u+f0c0-f0c2,u+f0c5,u+f0c8-f0c9,u+f0cc,u+f0ce,u+f0d1,u+f0d6-f0d7,u+f0dc,u+f0e0,u+f0e8,u+f0f3,u+f106,u+f108-f109,u+f10e,u+f110-f111,u+f11e,u+f121,u+f128-f12a,u+f132-f133,u+f135,u+f145,u+f14e,u+f15b,u+f186,u+f188,u+f1ab,u+f1ad,u+f1bb,u+f1c0,u+f1c2-f1c3,u+f1d8,u+f1e4,u+f1ea-f1eb,u+f1f8,u+f205,u+f20a,u+f217,u+f21a,u+f21c-f21d,u+f233,u+f238,u+f251,u+f25d,u+f292,u+f29e,u+f2a0,u+f2a7,u+f2bb,u+f2cc,u+f2db,u+f2e1,u+f2ec,u+f2f7,u+f303,u+f316,u+f328,u+f332,u+f335,u+f37e,u+f390,u+f3c5,u+f3ce,u+f3f4,u+f40e,u+f435,u+f481,u+f493,u+f4cc,u+f4d1,u+f4d8,u+f4e2,u+f503,u+f51b,u+f52b,u+f549,u+f54e,u+f555,u+f559,u+f56e-f570,u+f594,u+f5a1,u+f5aa-f5ab,u+f5b7,u+f5db-f5dc,u+f5f6,u+f5fd,u+f621,u+f64a,u+f64f,u+f654,u+f656,u+f673,u+f67d,u+f67f,u+f695,u+f69c,u+f6a8,u+f6e3,u+f6e9,u+f6ff,u+f715,u+f734,u+f755,u+f757,u+f773,u+f781,u+f784,u+f788,u+f7b2,u+f7b6,u+f7bd,u+f7d5,u+f7ee,u+f7ff,u+f804,u+f80a,u+f80c,u+f813,u+f82f,u+f855,u+f858-f859,u+f85c,u+f86d,u+f871,u+f893-f894,u+f8a9,u+f8b2,u+f8d6,u+f8d9,u+f8e7,u+f8ef}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-3eb023.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-3eb023.ttf) format("truetype");unicode-range:u+e002-e003,u+e030-e032,u+e051,u+f042,u+f055-f057,u+f059-f05a,u+f066,u+f06a,u+f0ed-f0ee,u+f144,u+f192,u+f1da,u+f28b,u+f28d,u+f2bd,u+f2e8,u+f327,u+f358-f35b,u+f381-f382,u+f386-f387,u+f46c-f46d,u+f47e,u+f4ac-f4b5,u+f4b9,u+f4c7,u+f51f,u+f568,u+f5e8-f5e9,u+f602,u+f615,u+f651,u+f6c2-f6c4,u+f6c6,u+f737-f746,u+f74e,u+f76c-f76e,u+f7ba,u+f7cd,u+f7f3,u+f7f5,u+f8ad-f8ae,u+f8b0}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-9d9a2c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-9d9a2c.ttf) format("truetype");unicode-range:u+e02d-e02e,u+e033-e039,u+e06d,u+e06f,u+e071,u+f089,u+f098,u+f0dd-f0de,u+f0f1,u+f0fd-f0fe,u+f143,u+f146,u+f14a-f14c,u+f150-f152,u+f154,u+f191,u+f199,u+f1de,u+f1e1,u+f277,u+f2d3,u+f2dc,u+f2e5,u+f2e9,u+f2f2-f2f4,u+f2fd,u+f30f,u+f321,u+f329-f32c,u+f339-f33c,u+f350-f353,u+f360,u+f3f0-f3f2,u+f45c,u+f48d,u+f49b,u+f49f,u+f4c8,u+f540,u+f54c,u+f551,u+f5bb-f5bd,u+f5c0,u+f5d0,u+f617,u+f620,u+f622-f623,u+f67b,u+f681-f682,u+f68c-f68f,u+f696-f69a,u+f714,u+f716-f71a,u+f75f-f761,u+f79b,u+f7c4,u+f7cc,u+f7cf-f7d0,u+f7d2,u+f7d4,u+f824-f825,u+f87b,u+f880,u+f890-f891,u+f8dd-f8de}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-e41116.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-e41116.ttf) format("truetype");unicode-range:u+e010,u+e01b,u+e020-e021,u+e02f,u+e03a,u+e042,u+e046,u+e068,u+e06e,u+e074,u+e076,u+f008,u+f018,u+f01c,u+f025,u+f02a,u+f02e,u+f05b,u+f06e,u+f078,u+f086,u+f09c,u+f0a3,u+f0b1,u+f0c6,u+f0e7,u+f0eb,u+f0f8,u+f11c,u+f126,u+f12c-f12e,u+f130-f131,u+f13d,u+f140,u+f155,u+f164,u+f1ae,u+f1b2,u+f1b8,u+f1c1,u+f1ce,u+f1dc,u+f1e5-f1e6,u+f1ec,u+f1f9,u+f219,u+f21b,u+f22d,u+f234,u+f246,u+f24d,u+f275,u+f295,u+f2b5,u+f2cd,u+f2d2,u+f2fc,u+f302,u+f31a,u+f363,u+f3e5,u+f3fb,u+f44b,u+f47d,u+f48a,u+f48f-f490,u+f494,u+f498,u+f4b7,u+f4ca,u+f4d7,u+f508,u+f51d-f51e,u+f521-f522,u+f530,u+f535,u+f53e,u+f541,u+f543-f545,u+f548,u+f55d,u+f564,u+f56c,u+f577-f578,u+f590,u+f595,u+f5a2,u+f5b0,u+f5ba,u+f5bf,u+f5ca,u+f5ef,u+f5f2,u+f5fb,u+f63b,u+f649,u+f653,u+f65b,u+f664,u+f675,u+f6bf-f6c0,u+f6d5,u+f6f5,u+f6fa,u+f700,u+f70b,u+f70e,u+f71b,u+f72e-f72f,u+f733,u+f747,u+f75c,u+f762,u+f77c,u+f801,u+f814,u+f830,u+f845-f846,u+f850,u+f866,u+f875,u+f897,u+f89f,u+f8b1,u+f8bb,u+f8c7,u+f8d7,u+f8df-f8e0,u+f8ee,u+f8fd}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-910f33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-910f33.ttf) format("truetype");unicode-range:u+e008-e00c,u+e05c-e05f,u+e061-e064,u+f013,u+f050-f051,u+f085,u+f0a0,u+f0a4-f0a5,u+f0a7,u+f0e3-f0e4,u+f11b,u+f19d,u+f1e3,u+f21e,u+f255-f25b,u+f2a3,u+f2e3,u+f2e6,u+f307,u+f312-f315,u+f3a5,u+f3fd,u+f44e-f451,u+f461,u+f47a-f47c,u+f4bc-f4c6,u+f52e-f52f,u+f531-f533,u+f58d-f58f,u+f5f4-f5f5,u+f624-f62d,u+f65e-f661,u+f663,u+f665,u+f684,u+f6de,u+f6e2,u+f6e4-f6e8,u+f6ea-f6eb,u+f79c-f79d,u+f7a3-f7a9,u+f802-f803,u+f806-f809,u+f867-f86b,u+f8bc-f8c2}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-f064f7.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-f064f7.ttf) format("truetype");unicode-range:u+e03b-e041,u+e043-e044,u+e072,u+f009-f00b,u+f02b,u+f034-f035,u+f071,u+f08d,u+f0db,u+f0f2,u+f0f9-f0fa,u+f10a,u+f120,u+f12b,u+f165,u+f185,u+f1ba,u+f204,u+f225,u+f239,u+f25c,u+f2c7-f2cb,u+f2eb,u+f2ed,u+f3fa,u+f3fc,u+f3ff-f400,u+f45d-f45e,u+f48b-f48c,u+f48e,u+f491,u+f4db-f4e0,u+f519,u+f552,u+f566,u+f5c1,u+f5c3,u+f5c9,u+f62e-f62f,u+f631-f63a,u+f63c,u+f69b,u+f69e-f69f,u+f6a1,u+f71c-f725,u+f763-f76b,u+f76f,u+f7d7-f7d8,u+f7db-f7de,u+f826,u+f829-f82b,u+f85d,u+f86e,u+f87d,u+f892,u+f895-f896,u+f8e2-f8e3}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-16f2f9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-16f2f9.ttf) format("truetype");unicode-range:u+e000-e001,u+f053-f054,u+f058,u+f073,u+f07a,u+f080,u+f083,u+f0a8-f0ab,u+f0d8-f0da,u+f137-f13a,u+f1b9,u+f1fd-f1fe,u+f200-f201,u+f218,u+f271-f274,u+f322-f325,u+f32d-f32e,u+f330-f331,u+f333-f334,u+f439-f448,u+f46b,u+f474-f476,u+f51c,u+f55f-f560,u+f59d,u+f5de-f5e7,u+f643,u+f64c-f64e,u+f6a3,u+f6ba-f6be,u+f6c1,u+f736,u+f772,u+f783,u+f786-f787,u+f78a-f78b,u+f79e-f79f,u+f7da,u+f7ef-f7f0,u+f832-f833,u+f85a-f85b,u+f8a4,u+f8a7-f8a8,u+f8aa-f8ac,u+f8ec,u+f8fe-f8ff}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cb49.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cb49.ttf) format("truetype");unicode-range:u+f043,u+f052,u+f070,u+f119,u+f125,u+f141-f142,u+f153,u+f1b3,u+f1fb,u+f2a2,u+f2a4,u+f2a8,u+f2b6,u+f309,u+f320,u+f326,u+f349-f34a,u+f354,u+f389-f38a,u+f39b-f39c,u+f422,u+f449-f44a,u+f46e-f46f,u+f471-f473,u+f4b8,u+f4ba,u+f520,u+f523-f52a,u+f52c,u+f542,u+f556,u+f55a,u+f563,u+f565,u+f567,u+f569-f56a,u+f579,u+f57c-f57e,u+f5c7,u+f5ea-f5ee,u+f5f0,u+f655,u+f657-f658,u+f674,u+f6b1,u+f6c5,u+f6c7-f6c8,u+f6cb,u+f6cd-f6d4,u+f6d6-f6db,u+f748-f749,u+f750,u+f78e-f78f,u+f792-f796,u+f7a2,u+f7f6-f7f8,u+f7fa-f7fc,u+f85f-f862,u+f8b3-f8b5,u+f8cc-f8cd}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-792d0c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-792d0c.ttf) format("truetype");unicode-range:u+e05b,u+f032,u+f0a1,u+f0fc,u+f187,u+f19c,u+f1e2,u+f1f6,u+f206-f207,u+f236,u+f240-f244,u+f291,u+f2a1,u+f376-f377,u+f432-f434,u+f436-f438,u+f458,u+f465-f469,u+f487,u+f499-f49a,u+f49c-f49e,u+f4a0-f4a1,u+f517-f518,u+f51a,u+f550,u+f558,u+f55b-f55c,u+f55e,u+f562,u+f5d5-f5da,u+f5dd,u+f647-f648,u+f64b,u+f66a,u+f677,u+f687,u+f6b5-f6b9,u+f735,u+f77f-f780,u+f782,u+f7e6-f7ed,u+f7f1,u+f805,u+f823,u+f827-f828,u+f848-f849,u+f84c-f84f,u+f851-f854,u+f856-f857,u+f89c-f89d,u+f8a5,u+f8f7-f8fc}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cf62.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cf62.ttf) format("truetype");unicode-range:u+e047-e048,u+e04a-e050,u+e058,u+e073,u+e075,u+e085-e086,u+f00d,u+f026-f028,u+f0b2,u+f0cd,u+f0d0,u+f0e9,u+f0f0,u+f13e,u+f157,u+f159,u+f193,u+f221,u+f226,u+f228,u+f235,u+f26c,u+f29a,u+f2d0-f2d1,u+f2e2,u+f2e7,u+f30c,u+f338,u+f346,u+f34d,u+f357,u+f35d,u+f3be-f3bf,u+f401,u+f406,u+f40f,u+f424,u+f45f-f460,u+f492,u+f495-f497,u+f4bb,u+f4e1,u+f4e3,u+f4fa-f502,u+f504-f507,u+f509,u+f5b6,u+f5c5,u+f5cb,u+f5cd-f5ce,u+f5f8,u+f63e,u+f6a2,u+f6a4-f6a7,u+f6a9-f6ad,u+f726-f72d,u+f770-f771,u+f774-f777,u+f7a0-f7a1,u+f7e2,u+f82c-f82e,u+f831,u+f83e,u+f898-f89b,u+f8e4-f8e6,u+f8e9-f8eb,u+f8ed,u+f8f0-f8f2}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-25ee0f.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-25ee0f.ttf) format("truetype");unicode-range:u+e00d-e00f,u+e011-e012,u+e014-e016,u+e018-e019,u+e065-e066,u+f033,u+f03c,u+f094,u+f0ae,u+f0ca-f0cb,u+f0fb,u+f124,u+f127,u+f195,u+f1cd,u+f252-f254,u+f2c1-f2c2,u+f2e4,u+f2ee,u+f300,u+f30a,u+f30e,u+f310-f311,u+f337,u+f348,u+f34b,u+f355,u+f3b3,u+f3e0,u+f453-f454,u+f479,u+f47f,u+f4c9,u+f4cb,u+f534,u+f536-f537,u+f591,u+f593,u+f5f9,u+f5fc,u+f5fe-f601,u+f603,u+f605-f606,u+f667-f669,u+f66b-f672,u+f6ed-f6f4,u+f6f6-f6f7,u+f74f,u+f751-f752,u+f7aa-f7ae,u+f7f2,u+f80b,u+f80d-f812,u+f86c,u+f86f-f870,u+f87a,u+f8c3-f8c6,u+f8c8-f8c9}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-cbbfb4.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-cbbfb4.ttf) format("truetype");unicode-range:u+e01c-e01d,u+e022-e023,u+e069,u+f03b,u+f044,u+f0ea,u+f182-f183,u+f1b0,u+f1dd,u+f1fc,u+f29d,u+f2ce,u+f304-f305,u+f3dd-f3de,u+f470,u+f482-f484,u+f4cd-f4d0,u+f4d2-f4d3,u+f53f,u+f554,u+f5a9,u+f5ac-f5af,u+f5c4,u+f618,u+f679-f67a,u+f67c,u+f67e,u+f680,u+f683,u+f6ec,u+f701-f703,u+f705-f706,u+f70c,u+f756,u+f758-f759,u+f7b8,u+f7c5,u+f7c7-f7cb,u+f7ce,u+f7d1,u+f815-f818,u+f84a-f84b,u+f85e,u+f876,u+f878-f879,u+f87c,u+f8d3-f8d5}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-493f48.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-493f48.ttf) format("truetype");unicode-range:u+e004-e006,u+e053-e054,u+f07c,u+f0c3,u+f0c7,u+f118,u+f11a,u+f134,u+f15c,u+f1ac,u+f1c4-f1c9,u+f317-f319,u+f31c,u+f3a0,u+f44c,u+f456,u+f46a,u+f477-f478,u+f4da,u+f52d,u+f56b,u+f56d,u+f571-f576,u+f57a,u+f57f-f58c,u+f596-f59c,u+f5a4-f5a5,u+f5b3-f5b4,u+f5b8-f5b9,u+f5c2,u+f5c8,u+f5f3,u+f659-f65a,u+f65c-f65d,u+f662,u+f6dd,u+f6df-f6e1,u+f74b-f74d,u+f79a,u+f7e4,u+f7fd-f7fe,u+f800,u+f863-f865,u+f877,u+f8b6-f8ba}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c238fb.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c238fb.ttf) format("truetype");unicode-range:u+e067,u+f000,u+f002,u+f00e,u+f010,u+f076,u+f0f4,u+f10b,u+f222-f224,u+f227,u+f229-f22c,u+f247-f249,u+f276,u+f279-f27a,u+f2f0,u+f301,u+f306,u+f308,u+f30d,u+f31e,u+f3c1-f3c2,u+f3c9,u+f3cd,u+f3cf,u+f3d1,u+f455,u+f4a2-f4ab,u+f4b6,u+f538-f53d,u+f561,u+f57b,u+f59f-f5a0,u+f5a6-f5a7,u+f604,u+f607-f60e,u+f610-f611,u+f613-f614,u+f630,u+f650,u+f652,u+f676,u+f678,u+f688-f689,u+f6f8-f6f9,u+f6fb-f6fe,u+f74a,u+f753-f754,u+f78c,u+f7b4-f7b5,u+f7b7,u+f7f4,u+f872-f874,u+f8af,u+f8cb,u+f8ce-f8d1}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-bbafe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-bbafe9.ttf) format("truetype");unicode-range:u+f4e6}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c046b6.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c046b6.ttf) format("truetype");unicode-range:u+e059-e05a,u+f01e,u+f021,u+f036-f039,u+f047-f049,u+f05e,u+f069,u+f07d-f07e,u+f08b,u+f08e,u+f090,u+f0e2,u+f0ec,u+f100-f105,u+f107,u+f148-f149,u+f15d-f15e,u+f160-f163,u+f175-f178,u+f1fa,u+f245,u+f290,u+f2b9,u+f31d,u+f336,u+f33d-f33e,u+f340-f345,u+f34e,u+f361,u+f364,u+f366,u+f462,u+f464,u+f54d,u+f557,u+f5d1-f5d4,u+f616,u+f640,u+f644-f646,u+f666,u+f6ae,u+f6b0,u+f6b2-f6b4,u+f732,u+f779,u+f77d-f77e,u+f7e5,u+f7f9,u+f843-f844,u+f847,u+f881-f88f,u+f8a0-f8a3,u+f8f4-f8f6}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-aa90b0.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-aa90b0.ttf) format("truetype");unicode-range:u+e025-e02c,u+e06a-e06c,u+e070,u+f022,u+f029,u+f074,u+f079,u+f09e,u+f0c4,u+f10d,u+f122,u+f14d,u+f156,u+f158,u+f197,u+f1e0,u+f20b,u+f24e,u+f2ea,u+f2f1,u+f2f5-f2f6,u+f2f8-f2fb,u+f2fe,u+f30b,u+f347,u+f34c,u+f356,u+f362,u+f365,u+f367,u+f3ed,u+f410,u+f45a-f45b,u+f463,u+f480,u+f485-f486,u+f488-f489,u+f4d4,u+f4d6,u+f4d9,u+f515-f516,u+f546-f547,u+f54a-f54b,u+f54f,u+f553,u+f5b1,u+f619-f61f,u+f63d,u+f641,u+f685-f686,u+f68a-f68b,u+f690-f694,u+f6a0,u+f707-f70a,u+f70d,u+f70f-f713,u+f75a-f75b,u+f75e,u+f7b9,u+f7be-f7c3,u+f7d9,u+f819-f822,u+f87e-f87f,u+f8d8,u+f8da-f8dc,u+f8f3}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-d5bbe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-d5bbe9.ttf) format("truetype");unicode-range:u+e017,u+e01f,u+e024,u+e045,u+e060,u+f001,u+f004-f005,u+f007,u+f00c,u+f011-f012,u+f015,u+f017,u+f019,u+f023-f024,u+f02c-f02d,u+f02f-f031,u+f03a,u+f03d-f03e,u+f040-f041,u+f04a-f04e,u+f060-f065,u+f067-f068,u+f06b-f06d,u+f072,u+f075,u+f077,u+f07b,u+f084,u+f091,u+f093,u+f095,u+f09d,u+f0a6,u+f0ac-f0ad,u+f0b0,u+f0c0-f0c2,u+f0c5,u+f0c8-f0c9,u+f0cc,u+f0ce,u+f0d1,u+f0d6-f0d7,u+f0dc,u+f0e0,u+f0e8,u+f0f3,u+f106,u+f108-f109,u+f10e,u+f110-f111,u+f11e,u+f121,u+f128-f12a,u+f132-f133,u+f135,u+f145,u+f14e,u+f15b,u+f186,u+f188,u+f1ab,u+f1ad,u+f1bb,u+f1c0,u+f1c2-f1c3,u+f1d8,u+f1e4,u+f1ea-f1eb,u+f1f8,u+f205,u+f20a,u+f217,u+f21a,u+f21c-f21d,u+f233,u+f238,u+f251,u+f25d,u+f292,u+f29e,u+f2a0,u+f2a7,u+f2bb,u+f2cc,u+f2db,u+f2e1,u+f2ec,u+f2f7,u+f303,u+f316,u+f328,u+f332,u+f335,u+f37e,u+f390,u+f3c5,u+f3ce,u+f3f4,u+f40e,u+f435,u+f481,u+f493,u+f4cc,u+f4d1,u+f4d8,u+f4e2,u+f503,u+f51b,u+f52b,u+f549,u+f54e,u+f555,u+f559,u+f56e-f570,u+f594,u+f5a1,u+f5aa-f5ab,u+f5b7,u+f5db-f5dc,u+f5f6,u+f5fd,u+f621,u+f64a,u+f64f,u+f654,u+f656,u+f673,u+f67d,u+f67f,u+f695,u+f69c,u+f6a8,u+f6e3,u+f6e9,u+f6ff,u+f715,u+f734,u+f755,u+f757,u+f773,u+f781,u+f784,u+f788,u+f7b2,u+f7b6,u+f7bd,u+f7d5,u+f7ee,u+f7ff,u+f804,u+f80a,u+f80c,u+f813,u+f82f,u+f855,u+f858-f859,u+f85c,u+f86d,u+f871,u+f893-f894,u+f8a9,u+f8b2,u+f8d6,u+f8d9,u+f8e7,u+f8ef}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-3eb023.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-3eb023.ttf) format("truetype");unicode-range:u+e002-e003,u+e030-e032,u+e051,u+f042,u+f055-f057,u+f059-f05a,u+f066,u+f06a,u+f0ed-f0ee,u+f144,u+f192,u+f1da,u+f28b,u+f28d,u+f2bd,u+f2e8,u+f327,u+f358-f35b,u+f381-f382,u+f386-f387,u+f46c-f46d,u+f47e,u+f4ac-f4b5,u+f4b9,u+f4c7,u+f51f,u+f568,u+f5e8-f5e9,u+f602,u+f615,u+f651,u+f6c2-f6c4,u+f6c6,u+f737-f746,u+f74e,u+f76c-f76e,u+f7ba,u+f7cd,u+f7f3,u+f7f5,u+f8ad-f8ae,u+f8b0}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-9d9a2c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-9d9a2c.ttf) format("truetype");unicode-range:u+e02d-e02e,u+e033-e039,u+e06d,u+e06f,u+e071,u+f089,u+f098,u+f0dd-f0de,u+f0f1,u+f0fd-f0fe,u+f143,u+f146,u+f14a-f14c,u+f150-f152,u+f154,u+f191,u+f199,u+f1de,u+f1e1,u+f277,u+f2d3,u+f2dc,u+f2e5,u+f2e9,u+f2f2-f2f4,u+f2fd,u+f30f,u+f321,u+f329-f32c,u+f339-f33c,u+f350-f353,u+f360,u+f3f0-f3f2,u+f45c,u+f48d,u+f49b,u+f49f,u+f4c8,u+f540,u+f54c,u+f551,u+f5bb-f5bd,u+f5c0,u+f5d0,u+f617,u+f620,u+f622-f623,u+f67b,u+f681-f682,u+f68c-f68f,u+f696-f69a,u+f714,u+f716-f71a,u+f75f-f761,u+f79b,u+f7c4,u+f7cc,u+f7cf-f7d0,u+f7d2,u+f7d4,u+f824-f825,u+f87b,u+f880,u+f890-f891,u+f8dd-f8de}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-e41116.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-e41116.ttf) format("truetype");unicode-range:u+e010,u+e01b,u+e020-e021,u+e02f,u+e03a,u+e042,u+e046,u+e068,u+e06e,u+e074,u+e076,u+f008,u+f018,u+f01c,u+f025,u+f02a,u+f02e,u+f05b,u+f06e,u+f078,u+f086,u+f09c,u+f0a3,u+f0b1,u+f0c6,u+f0e7,u+f0eb,u+f0f8,u+f11c,u+f126,u+f12c-f12e,u+f130-f131,u+f13d,u+f140,u+f155,u+f164,u+f1ae,u+f1b2,u+f1b8,u+f1c1,u+f1ce,u+f1dc,u+f1e5-f1e6,u+f1ec,u+f1f9,u+f219,u+f21b,u+f22d,u+f234,u+f246,u+f24d,u+f275,u+f295,u+f2b5,u+f2cd,u+f2d2,u+f2fc,u+f302,u+f31a,u+f363,u+f3e5,u+f3fb,u+f44b,u+f47d,u+f48a,u+f48f-f490,u+f494,u+f498,u+f4b7,u+f4ca,u+f4d7,u+f508,u+f51d-f51e,u+f521-f522,u+f530,u+f535,u+f53e,u+f541,u+f543-f545,u+f548,u+f55d,u+f564,u+f56c,u+f577-f578,u+f590,u+f595,u+f5a2,u+f5b0,u+f5ba,u+f5bf,u+f5ca,u+f5ef,u+f5f2,u+f5fb,u+f63b,u+f649,u+f653,u+f65b,u+f664,u+f675,u+f6bf-f6c0,u+f6d5,u+f6f5,u+f6fa,u+f700,u+f70b,u+f70e,u+f71b,u+f72e-f72f,u+f733,u+f747,u+f75c,u+f762,u+f77c,u+f801,u+f814,u+f830,u+f845-f846,u+f850,u+f866,u+f875,u+f897,u+f89f,u+f8b1,u+f8bb,u+f8c7,u+f8d7,u+f8df-f8e0,u+f8ee,u+f8fd}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-910f33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-910f33.ttf) format("truetype");unicode-range:u+e008-e00c,u+e05c-e05f,u+e061-e064,u+f013,u+f050-f051,u+f085,u+f0a0,u+f0a4-f0a5,u+f0a7,u+f0e3-f0e4,u+f11b,u+f19d,u+f1e3,u+f21e,u+f255-f25b,u+f2a3,u+f2e3,u+f2e6,u+f307,u+f312-f315,u+f3a5,u+f3fd,u+f44e-f451,u+f461,u+f47a-f47c,u+f4bc-f4c6,u+f52e-f52f,u+f531-f533,u+f58d-f58f,u+f5f4-f5f5,u+f624-f62d,u+f65e-f661,u+f663,u+f665,u+f684,u+f6de,u+f6e2,u+f6e4-f6e8,u+f6ea-f6eb,u+f79c-f79d,u+f7a3-f7a9,u+f802-f803,u+f806-f809,u+f867-f86b,u+f8bc-f8c2}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-f064f7.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-f064f7.ttf) format("truetype");unicode-range:u+e03b-e041,u+e043-e044,u+e072,u+f009-f00b,u+f02b,u+f034-f035,u+f071,u+f08d,u+f0db,u+f0f2,u+f0f9-f0fa,u+f10a,u+f120,u+f12b,u+f165,u+f185,u+f1ba,u+f204,u+f225,u+f239,u+f25c,u+f2c7-f2cb,u+f2eb,u+f2ed,u+f3fa,u+f3fc,u+f3ff-f400,u+f45d-f45e,u+f48b-f48c,u+f48e,u+f491,u+f4db-f4e0,u+f519,u+f552,u+f566,u+f5c1,u+f5c3,u+f5c9,u+f62e-f62f,u+f631-f63a,u+f63c,u+f69b,u+f69e-f69f,u+f6a1,u+f71c-f725,u+f763-f76b,u+f76f,u+f7d7-f7d8,u+f7db-f7de,u+f826,u+f829-f82b,u+f85d,u+f86e,u+f87d,u+f892,u+f895-f896,u+f8e2-f8e3}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-16f2f9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-16f2f9.ttf) format("truetype");unicode-range:u+e000-e001,u+f053-f054,u+f058,u+f073,u+f07a,u+f080,u+f083,u+f0a8-f0ab,u+f0d8-f0da,u+f137-f13a,u+f1b9,u+f1fd-f1fe,u+f200-f201,u+f218,u+f271-f274,u+f322-f325,u+f32d-f32e,u+f330-f331,u+f333-f334,u+f439-f448,u+f46b,u+f474-f476,u+f51c,u+f55f-f560,u+f59d,u+f5de-f5e7,u+f643,u+f64c-f64e,u+f6a3,u+f6ba-f6be,u+f6c1,u+f736,u+f772,u+f783,u+f786-f787,u+f78a-f78b,u+f79e-f79f,u+f7da,u+f7ef-f7f0,u+f832-f833,u+f85a-f85b,u+f8a4,u+f8a7-f8a8,u+f8aa-f8ac,u+f8ec,u+f8fe-f8ff}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cb49.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cb49.ttf) format("truetype");unicode-range:u+f043,u+f052,u+f070,u+f119,u+f125,u+f141-f142,u+f153,u+f1b3,u+f1fb,u+f2a2,u+f2a4,u+f2a8,u+f2b6,u+f309,u+f320,u+f326,u+f349-f34a,u+f354,u+f389-f38a,u+f39b-f39c,u+f422,u+f449-f44a,u+f46e-f46f,u+f471-f473,u+f4b8,u+f4ba,u+f520,u+f523-f52a,u+f52c,u+f542,u+f556,u+f55a,u+f563,u+f565,u+f567,u+f569-f56a,u+f579,u+f57c-f57e,u+f5c7,u+f5ea-f5ee,u+f5f0,u+f655,u+f657-f658,u+f674,u+f6b1,u+f6c5,u+f6c7-f6c8,u+f6cb,u+f6cd-f6d4,u+f6d6-f6db,u+f748-f749,u+f750,u+f78e-f78f,u+f792-f796,u+f7a2,u+f7f6-f7f8,u+f7fa-f7fc,u+f85f-f862,u+f8b3-f8b5,u+f8cc-f8cd}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-792d0c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-792d0c.ttf) format("truetype");unicode-range:u+e05b,u+f032,u+f0a1,u+f0fc,u+f187,u+f19c,u+f1e2,u+f1f6,u+f206-f207,u+f236,u+f240-f244,u+f291,u+f2a1,u+f376-f377,u+f432-f434,u+f436-f438,u+f458,u+f465-f469,u+f487,u+f499-f49a,u+f49c-f49e,u+f4a0-f4a1,u+f517-f518,u+f51a,u+f550,u+f558,u+f55b-f55c,u+f55e,u+f562,u+f5d5-f5da,u+f5dd,u+f647-f648,u+f64b,u+f66a,u+f677,u+f687,u+f6b5-f6b9,u+f735,u+f77f-f780,u+f782,u+f7e6-f7ed,u+f7f1,u+f805,u+f823,u+f827-f828,u+f848-f849,u+f84c-f84f,u+f851-f854,u+f856-f857,u+f89c-f89d,u+f8a5,u+f8f7-f8fc}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cf62.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cf62.ttf) format("truetype");unicode-range:u+e047-e048,u+e04a-e050,u+e058,u+e073,u+e075,u+e085-e086,u+f00d,u+f026-f028,u+f0b2,u+f0cd,u+f0d0,u+f0e9,u+f0f0,u+f13e,u+f157,u+f159,u+f193,u+f221,u+f226,u+f228,u+f235,u+f26c,u+f29a,u+f2d0-f2d1,u+f2e2,u+f2e7,u+f30c,u+f338,u+f346,u+f34d,u+f357,u+f35d,u+f3be-f3bf,u+f401,u+f406,u+f40f,u+f424,u+f45f-f460,u+f492,u+f495-f497,u+f4bb,u+f4e1,u+f4e3,u+f4fa-f502,u+f504-f507,u+f509,u+f5b6,u+f5c5,u+f5cb,u+f5cd-f5ce,u+f5f8,u+f63e,u+f6a2,u+f6a4-f6a7,u+f6a9-f6ad,u+f726-f72d,u+f770-f771,u+f774-f777,u+f7a0-f7a1,u+f7e2,u+f82c-f82e,u+f831,u+f83e,u+f898-f89b,u+f8e4-f8e6,u+f8e9-f8eb,u+f8ed,u+f8f0-f8f2}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-25ee0f.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-25ee0f.ttf) format("truetype");unicode-range:u+e00d-e00f,u+e011-e012,u+e014-e016,u+e018-e019,u+e065-e066,u+f033,u+f03c,u+f094,u+f0ae,u+f0ca-f0cb,u+f0fb,u+f124,u+f127,u+f195,u+f1cd,u+f252-f254,u+f2c1-f2c2,u+f2e4,u+f2ee,u+f300,u+f30a,u+f30e,u+f310-f311,u+f337,u+f348,u+f34b,u+f355,u+f3b3,u+f3e0,u+f453-f454,u+f479,u+f47f,u+f4c9,u+f4cb,u+f534,u+f536-f537,u+f591,u+f593,u+f5f9,u+f5fc,u+f5fe-f601,u+f603,u+f605-f606,u+f667-f669,u+f66b-f672,u+f6ed-f6f4,u+f6f6-f6f7,u+f74f,u+f751-f752,u+f7aa-f7ae,u+f7f2,u+f80b,u+f80d-f812,u+f86c,u+f86f-f870,u+f87a,u+f8c3-f8c6,u+f8c8-f8c9}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-cbbfb4.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-cbbfb4.ttf) format("truetype");unicode-range:u+e01c-e01d,u+e022-e023,u+e069,u+f03b,u+f044,u+f0ea,u+f182-f183,u+f1b0,u+f1dd,u+f1fc,u+f29d,u+f2ce,u+f304-f305,u+f3dd-f3de,u+f470,u+f482-f484,u+f4cd-f4d0,u+f4d2-f4d3,u+f53f,u+f554,u+f5a9,u+f5ac-f5af,u+f5c4,u+f618,u+f679-f67a,u+f67c,u+f67e,u+f680,u+f683,u+f6ec,u+f701-f703,u+f705-f706,u+f70c,u+f756,u+f758-f759,u+f7b8,u+f7c5,u+f7c7-f7cb,u+f7ce,u+f7d1,u+f815-f818,u+f84a-f84b,u+f85e,u+f876,u+f878-f879,u+f87c,u+f8d3-f8d5}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-493f48.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-493f48.ttf) format("truetype");unicode-range:u+e004-e006,u+e053-e054,u+f07c,u+f0c3,u+f0c7,u+f118,u+f11a,u+f134,u+f15c,u+f1ac,u+f1c4-f1c9,u+f317-f319,u+f31c,u+f3a0,u+f44c,u+f456,u+f46a,u+f477-f478,u+f4da,u+f52d,u+f56b,u+f56d,u+f571-f576,u+f57a,u+f57f-f58c,u+f596-f59c,u+f5a4-f5a5,u+f5b3-f5b4,u+f5b8-f5b9,u+f5c2,u+f5c8,u+f5f3,u+f659-f65a,u+f65c-f65d,u+f662,u+f6dd,u+f6df-f6e1,u+f74b-f74d,u+f79a,u+f7e4,u+f7fd-f7fe,u+f800,u+f863-f865,u+f877,u+f8b6-f8ba}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c238fb.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c238fb.ttf) format("truetype");unicode-range:u+e067,u+f000,u+f002,u+f00e,u+f010,u+f076,u+f0f4,u+f10b,u+f222-f224,u+f227,u+f229-f22c,u+f247-f249,u+f276,u+f279-f27a,u+f2f0,u+f301,u+f306,u+f308,u+f30d,u+f31e,u+f3c1-f3c2,u+f3c9,u+f3cd,u+f3cf,u+f3d1,u+f455,u+f4a2-f4ab,u+f4b6,u+f538-f53d,u+f561,u+f57b,u+f59f-f5a0,u+f5a6-f5a7,u+f604,u+f607-f60e,u+f610-f611,u+f613-f614,u+f630,u+f650,u+f652,u+f676,u+f678,u+f688-f689,u+f6f8-f6f9,u+f6fb-f6fe,u+f74a,u+f753-f754,u+f78c,u+f7b4-f7b5,u+f7b7,u+f7f4,u+f872-f874,u+f8af,u+f8cb,u+f8ce-f8d1}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:400;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-bbafe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-bbafe9.ttf) format("truetype");unicode-range:u+f4e6}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-c046b6.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-c046b6.ttf) format("truetype");unicode-range:u+e059-e05a,u+f01e,u+f021,u+f036-f039,u+f047-f049,u+f05e,u+f069,u+f07d-f07e,u+f08b,u+f08e,u+f090,u+f0e2,u+f0ec,u+f100-f105,u+f107,u+f148-f149,u+f15d-f15e,u+f160-f163,u+f175-f178,u+f1fa,u+f245,u+f290,u+f2b9,u+f31d,u+f336,u+f33d-f33e,u+f340-f345,u+f34e,u+f361,u+f364,u+f366,u+f462,u+f464,u+f54d,u+f557,u+f5d1-f5d4,u+f616,u+f640,u+f644-f646,u+f666,u+f6ae,u+f6b0,u+f6b2-f6b4,u+f732,u+f779,u+f77d-f77e,u+f7e5,u+f7f9,u+f843-f844,u+f847,u+f881-f88f,u+f8a0-f8a3,u+f8f4-f8f6}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-aa90b0.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-aa90b0.ttf) format("truetype");unicode-range:u+e025-e02c,u+e06a-e06c,u+e070,u+f022,u+f029,u+f074,u+f079,u+f09e,u+f0c4,u+f10d,u+f122,u+f14d,u+f156,u+f158,u+f197,u+f1e0,u+f20b,u+f24e,u+f2ea,u+f2f1,u+f2f5-f2f6,u+f2f8-f2fb,u+f2fe,u+f30b,u+f347,u+f34c,u+f356,u+f362,u+f365,u+f367,u+f3ed,u+f410,u+f45a-f45b,u+f463,u+f480,u+f485-f486,u+f488-f489,u+f4d4,u+f4d6,u+f4d9,u+f515-f516,u+f546-f547,u+f54a-f54b,u+f54f,u+f553,u+f5b1,u+f619-f61f,u+f63d,u+f641,u+f685-f686,u+f68a-f68b,u+f690-f694,u+f6a0,u+f707-f70a,u+f70d,u+f70f-f713,u+f75a-f75b,u+f75e,u+f7b9,u+f7be-f7c3,u+f7d9,u+f819-f822,u+f87e-f87f,u+f8d8,u+f8da-f8dc,u+f8f3}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-d5bbe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-d5bbe9.ttf) format("truetype");unicode-range:u+e017,u+e01f,u+e024,u+e045,u+e060,u+f001,u+f004-f005,u+f007,u+f00c,u+f011-f012,u+f015,u+f017,u+f019,u+f023-f024,u+f02c-f02d,u+f02f-f031,u+f03a,u+f03d-f03e,u+f040-f041,u+f04a-f04e,u+f060-f065,u+f067-f068,u+f06b-f06d,u+f072,u+f075,u+f077,u+f07b,u+f084,u+f091,u+f093,u+f095,u+f09d,u+f0a6,u+f0ac-f0ad,u+f0b0,u+f0c0-f0c2,u+f0c5,u+f0c8-f0c9,u+f0cc,u+f0ce,u+f0d1,u+f0d6-f0d7,u+f0dc,u+f0e0,u+f0e8,u+f0f3,u+f106,u+f108-f109,u+f10e,u+f110-f111,u+f11e,u+f121,u+f128-f12a,u+f132-f133,u+f135,u+f145,u+f14e,u+f15b,u+f186,u+f188,u+f1ab,u+f1ad,u+f1bb,u+f1c0,u+f1c2-f1c3,u+f1d8,u+f1e4,u+f1ea-f1eb,u+f1f8,u+f205,u+f20a,u+f217,u+f21a,u+f21c-f21d,u+f233,u+f238,u+f251,u+f25d,u+f292,u+f29e,u+f2a0,u+f2a7,u+f2bb,u+f2cc,u+f2db,u+f2e1,u+f2ec,u+f2f7,u+f303,u+f316,u+f328,u+f332,u+f335,u+f37e,u+f390,u+f3c5,u+f3ce,u+f3f4,u+f40e,u+f435,u+f481,u+f493,u+f4cc,u+f4d1,u+f4d8,u+f4e2,u+f503,u+f51b,u+f52b,u+f549,u+f54e,u+f555,u+f559,u+f56e-f570,u+f594,u+f5a1,u+f5aa-f5ab,u+f5b7,u+f5db-f5dc,u+f5f6,u+f5fd,u+f621,u+f64a,u+f64f,u+f654,u+f656,u+f673,u+f67d,u+f67f,u+f695,u+f69c,u+f6a8,u+f6e3,u+f6e9,u+f6ff,u+f715,u+f734,u+f755,u+f757,u+f773,u+f781,u+f784,u+f788,u+f7b2,u+f7b6,u+f7bd,u+f7d5,u+f7ee,u+f7ff,u+f804,u+f80a,u+f80c,u+f813,u+f82f,u+f855,u+f858-f859,u+f85c,u+f86d,u+f871,u+f893-f894,u+f8a9,u+f8b2,u+f8d6,u+f8d9,u+f8e7,u+f8ef}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-3eb023.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-3eb023.ttf) format("truetype");unicode-range:u+e002-e003,u+e030-e032,u+e051,u+f042,u+f055-f057,u+f059-f05a,u+f066,u+f06a,u+f0ed-f0ee,u+f144,u+f192,u+f1da,u+f28b,u+f28d,u+f2bd,u+f2e8,u+f327,u+f358-f35b,u+f381-f382,u+f386-f387,u+f46c-f46d,u+f47e,u+f4ac-f4b5,u+f4b9,u+f4c7,u+f51f,u+f568,u+f5e8-f5e9,u+f602,u+f615,u+f651,u+f6c2-f6c4,u+f6c6,u+f737-f746,u+f74e,u+f76c-f76e,u+f7ba,u+f7cd,u+f7f3,u+f7f5,u+f8ad-f8ae,u+f8b0}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-9d9a2c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-9d9a2c.ttf) format("truetype");unicode-range:u+e02d-e02e,u+e033-e039,u+e06d,u+e06f,u+e071,u+f089,u+f098,u+f0dd-f0de,u+f0f1,u+f0fd-f0fe,u+f143,u+f146,u+f14a-f14c,u+f150-f152,u+f154,u+f191,u+f199,u+f1de,u+f1e1,u+f277,u+f2d3,u+f2dc,u+f2e5,u+f2e9,u+f2f2-f2f4,u+f2fd,u+f30f,u+f321,u+f329-f32c,u+f339-f33c,u+f350-f353,u+f360,u+f3f0-f3f2,u+f45c,u+f48d,u+f49b,u+f49f,u+f4c8,u+f540,u+f54c,u+f551,u+f5bb-f5bd,u+f5c0,u+f5d0,u+f617,u+f620,u+f622-f623,u+f67b,u+f681-f682,u+f68c-f68f,u+f696-f69a,u+f714,u+f716-f71a,u+f75f-f761,u+f79b,u+f7c4,u+f7cc,u+f7cf-f7d0,u+f7d2,u+f7d4,u+f824-f825,u+f87b,u+f880,u+f890-f891,u+f8dd-f8de}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-e41116.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-e41116.ttf) format("truetype");unicode-range:u+e010,u+e01b,u+e020-e021,u+e02f,u+e03a,u+e042,u+e046,u+e068,u+e06e,u+e074,u+e076,u+f008,u+f018,u+f01c,u+f025,u+f02a,u+f02e,u+f05b,u+f06e,u+f078,u+f086,u+f09c,u+f0a3,u+f0b1,u+f0c6,u+f0e7,u+f0eb,u+f0f8,u+f11c,u+f126,u+f12c-f12e,u+f130-f131,u+f13d,u+f140,u+f155,u+f164,u+f1ae,u+f1b2,u+f1b8,u+f1c1,u+f1ce,u+f1dc,u+f1e5-f1e6,u+f1ec,u+f1f9,u+f219,u+f21b,u+f22d,u+f234,u+f246,u+f24d,u+f275,u+f295,u+f2b5,u+f2cd,u+f2d2,u+f2fc,u+f302,u+f31a,u+f363,u+f3e5,u+f3fb,u+f44b,u+f47d,u+f48a,u+f48f-f490,u+f494,u+f498,u+f4b7,u+f4ca,u+f4d7,u+f508,u+f51d-f51e,u+f521-f522,u+f530,u+f535,u+f53e,u+f541,u+f543-f545,u+f548,u+f55d,u+f564,u+f56c,u+f577-f578,u+f590,u+f595,u+f5a2,u+f5b0,u+f5ba,u+f5bf,u+f5ca,u+f5ef,u+f5f2,u+f5fb,u+f63b,u+f649,u+f653,u+f65b,u+f664,u+f675,u+f6bf-f6c0,u+f6d5,u+f6f5,u+f6fa,u+f700,u+f70b,u+f70e,u+f71b,u+f72e-f72f,u+f733,u+f747,u+f75c,u+f762,u+f77c,u+f801,u+f814,u+f830,u+f845-f846,u+f850,u+f866,u+f875,u+f897,u+f89f,u+f8b1,u+f8bb,u+f8c7,u+f8d7,u+f8df-f8e0,u+f8ee,u+f8fd}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-910f33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-910f33.ttf) format("truetype");unicode-range:u+e008-e00c,u+e05c-e05f,u+e061-e064,u+f013,u+f050-f051,u+f085,u+f0a0,u+f0a4-f0a5,u+f0a7,u+f0e3-f0e4,u+f11b,u+f19d,u+f1e3,u+f21e,u+f255-f25b,u+f2a3,u+f2e3,u+f2e6,u+f307,u+f312-f315,u+f3a5,u+f3fd,u+f44e-f451,u+f461,u+f47a-f47c,u+f4bc-f4c6,u+f52e-f52f,u+f531-f533,u+f58d-f58f,u+f5f4-f5f5,u+f624-f62d,u+f65e-f661,u+f663,u+f665,u+f684,u+f6de,u+f6e2,u+f6e4-f6e8,u+f6ea-f6eb,u+f79c-f79d,u+f7a3-f7a9,u+f802-f803,u+f806-f809,u+f867-f86b,u+f8bc-f8c2}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-f064f7.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-f064f7.ttf) format("truetype");unicode-range:u+e03b-e041,u+e043-e044,u+e072,u+f009-f00b,u+f02b,u+f034-f035,u+f071,u+f08d,u+f0db,u+f0f2,u+f0f9-f0fa,u+f10a,u+f120,u+f12b,u+f165,u+f185,u+f1ba,u+f204,u+f225,u+f239,u+f25c,u+f2c7-f2cb,u+f2eb,u+f2ed,u+f3fa,u+f3fc,u+f3ff-f400,u+f45d-f45e,u+f48b-f48c,u+f48e,u+f491,u+f4db-f4e0,u+f519,u+f552,u+f566,u+f5c1,u+f5c3,u+f5c9,u+f62e-f62f,u+f631-f63a,u+f63c,u+f69b,u+f69e-f69f,u+f6a1,u+f71c-f725,u+f763-f76b,u+f76f,u+f7d7-f7d8,u+f7db-f7de,u+f826,u+f829-f82b,u+f85d,u+f86e,u+f87d,u+f892,u+f895-f896,u+f8e2-f8e3}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-16f2f9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-16f2f9.ttf) format("truetype");unicode-range:u+e000-e001,u+f053-f054,u+f058,u+f073,u+f07a,u+f080,u+f083,u+f0a8-f0ab,u+f0d8-f0da,u+f137-f13a,u+f1b9,u+f1fd-f1fe,u+f200-f201,u+f218,u+f271-f274,u+f322-f325,u+f32d-f32e,u+f330-f331,u+f333-f334,u+f439-f448,u+f46b,u+f474-f476,u+f51c,u+f55f-f560,u+f59d,u+f5de-f5e7,u+f643,u+f64c-f64e,u+f6a3,u+f6ba-f6be,u+f6c1,u+f736,u+f772,u+f783,u+f786-f787,u+f78a-f78b,u+f79e-f79f,u+f7da,u+f7ef-f7f0,u+f832-f833,u+f85a-f85b,u+f8a4,u+f8a7-f8a8,u+f8aa-f8ac,u+f8ec,u+f8fe-f8ff}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-b1cb49.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-b1cb49.ttf) format("truetype");unicode-range:u+f043,u+f052,u+f070,u+f119,u+f125,u+f141-f142,u+f153,u+f1b3,u+f1fb,u+f2a2,u+f2a4,u+f2a8,u+f2b6,u+f309,u+f320,u+f326,u+f349-f34a,u+f354,u+f389-f38a,u+f39b-f39c,u+f422,u+f449-f44a,u+f46e-f46f,u+f471-f473,u+f4b8,u+f4ba,u+f520,u+f523-f52a,u+f52c,u+f542,u+f556,u+f55a,u+f563,u+f565,u+f567,u+f569-f56a,u+f579,u+f57c-f57e,u+f5c7,u+f5ea-f5ee,u+f5f0,u+f655,u+f657-f658,u+f674,u+f6b1,u+f6c5,u+f6c7-f6c8,u+f6cb,u+f6cd-f6d4,u+f6d6-f6db,u+f748-f749,u+f750,u+f78e-f78f,u+f792-f796,u+f7a2,u+f7f6-f7f8,u+f7fa-f7fc,u+f85f-f862,u+f8b3-f8b5,u+f8cc-f8cd}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-792d0c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-792d0c.ttf) format("truetype");unicode-range:u+e05b,u+f032,u+f0a1,u+f0fc,u+f187,u+f19c,u+f1e2,u+f1f6,u+f206-f207,u+f236,u+f240-f244,u+f291,u+f2a1,u+f376-f377,u+f432-f434,u+f436-f438,u+f458,u+f465-f469,u+f487,u+f499-f49a,u+f49c-f49e,u+f4a0-f4a1,u+f517-f518,u+f51a,u+f550,u+f558,u+f55b-f55c,u+f55e,u+f562,u+f5d5-f5da,u+f5dd,u+f647-f648,u+f64b,u+f66a,u+f677,u+f687,u+f6b5-f6b9,u+f735,u+f77f-f780,u+f782,u+f7e6-f7ed,u+f7f1,u+f805,u+f823,u+f827-f828,u+f848-f849,u+f84c-f84f,u+f851-f854,u+f856-f857,u+f89c-f89d,u+f8a5,u+f8f7-f8fc}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-b1cf62.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-b1cf62.ttf) format("truetype");unicode-range:u+e047-e048,u+e04a-e050,u+e058,u+e073,u+e075,u+e085-e086,u+f00d,u+f026-f028,u+f0b2,u+f0cd,u+f0d0,u+f0e9,u+f0f0,u+f13e,u+f157,u+f159,u+f193,u+f221,u+f226,u+f228,u+f235,u+f26c,u+f29a,u+f2d0-f2d1,u+f2e2,u+f2e7,u+f30c,u+f338,u+f346,u+f34d,u+f357,u+f35d,u+f3be-f3bf,u+f401,u+f406,u+f40f,u+f424,u+f45f-f460,u+f492,u+f495-f497,u+f4bb,u+f4e1,u+f4e3,u+f4fa-f502,u+f504-f507,u+f509,u+f5b6,u+f5c5,u+f5cb,u+f5cd-f5ce,u+f5f8,u+f63e,u+f6a2,u+f6a4-f6a7,u+f6a9-f6ad,u+f726-f72d,u+f770-f771,u+f774-f777,u+f7a0-f7a1,u+f7e2,u+f82c-f82e,u+f831,u+f83e,u+f898-f89b,u+f8e4-f8e6,u+f8e9-f8eb,u+f8ed,u+f8f0-f8f2}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-25ee0f.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-25ee0f.ttf) format("truetype");unicode-range:u+e00d-e00f,u+e011-e012,u+e014-e016,u+e018-e019,u+e065-e066,u+f033,u+f03c,u+f094,u+f0ae,u+f0ca-f0cb,u+f0fb,u+f124,u+f127,u+f195,u+f1cd,u+f252-f254,u+f2c1-f2c2,u+f2e4,u+f2ee,u+f300,u+f30a,u+f30e,u+f310-f311,u+f337,u+f348,u+f34b,u+f355,u+f3b3,u+f3e0,u+f453-f454,u+f479,u+f47f,u+f4c9,u+f4cb,u+f534,u+f536-f537,u+f591,u+f593,u+f5f9,u+f5fc,u+f5fe-f601,u+f603,u+f605-f606,u+f667-f669,u+f66b-f672,u+f6ed-f6f4,u+f6f6-f6f7,u+f74f,u+f751-f752,u+f7aa-f7ae,u+f7f2,u+f80b,u+f80d-f812,u+f86c,u+f86f-f870,u+f87a,u+f8c3-f8c6,u+f8c8-f8c9}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-cbbfb4.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-cbbfb4.ttf) format("truetype");unicode-range:u+e01c-e01d,u+e022-e023,u+e069,u+f03b,u+f044,u+f0ea,u+f182-f183,u+f1b0,u+f1dd,u+f1fc,u+f29d,u+f2ce,u+f304-f305,u+f3dd-f3de,u+f470,u+f482-f484,u+f4cd-f4d0,u+f4d2-f4d3,u+f53f,u+f554,u+f5a9,u+f5ac-f5af,u+f5c4,u+f618,u+f679-f67a,u+f67c,u+f67e,u+f680,u+f683,u+f6ec,u+f701-f703,u+f705-f706,u+f70c,u+f756,u+f758-f759,u+f7b8,u+f7c5,u+f7c7-f7cb,u+f7ce,u+f7d1,u+f815-f818,u+f84a-f84b,u+f85e,u+f876,u+f878-f879,u+f87c,u+f8d3-f8d5}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-493f48.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-493f48.ttf) format("truetype");unicode-range:u+e004-e006,u+e053-e054,u+f07c,u+f0c3,u+f0c7,u+f118,u+f11a,u+f134,u+f15c,u+f1ac,u+f1c4-f1c9,u+f317-f319,u+f31c,u+f3a0,u+f44c,u+f456,u+f46a,u+f477-f478,u+f4da,u+f52d,u+f56b,u+f56d,u+f571-f576,u+f57a,u+f57f-f58c,u+f596-f59c,u+f5a4-f5a5,u+f5b3-f5b4,u+f5b8-f5b9,u+f5c2,u+f5c8,u+f5f3,u+f659-f65a,u+f65c-f65d,u+f662,u+f6dd,u+f6df-f6e1,u+f74b-f74d,u+f79a,u+f7e4,u+f7fd-f7fe,u+f800,u+f863-f865,u+f877,u+f8b6-f8ba}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-c238fb.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-c238fb.ttf) format("truetype");unicode-range:u+e067,u+f000,u+f002,u+f00e,u+f010,u+f076,u+f0f4,u+f10b,u+f222-f224,u+f227,u+f229-f22c,u+f247-f249,u+f276,u+f279-f27a,u+f2f0,u+f301,u+f306,u+f308,u+f30d,u+f31e,u+f3c1-f3c2,u+f3c9,u+f3cd,u+f3cf,u+f3d1,u+f455,u+f4a2-f4ab,u+f4b6,u+f538-f53d,u+f561,u+f57b,u+f59f-f5a0,u+f5a6-f5a7,u+f604,u+f607-f60e,u+f610-f611,u+f613-f614,u+f630,u+f650,u+f652,u+f676,u+f678,u+f688-f689,u+f6f8-f6f9,u+f6fb-f6fe,u+f74a,u+f753-f754,u+f78c,u+f7b4-f7b5,u+f7b7,u+f7f4,u+f872-f874,u+f8af,u+f8cb,u+f8ce-f8d1}@font-face{font-family:"Font Awesome 5 Pro";font-display:block;font-weight:300;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-bbafe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-light-300-bbafe9.ttf) format("truetype");unicode-range:u+f4e6}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-c046b6.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-c046b6.ttf) format("truetype");unicode-range:u+e059-e05a,u+f01e,u+f021,u+f036-f039,u+f047-f049,u+f05e,u+f069,u+f07d-f07e,u+f08b,u+f08e,u+f090,u+f0e2,u+f0ec,u+f100-f105,u+f107,u+f148-f149,u+f15d-f15e,u+f160-f163,u+f175-f178,u+f1fa,u+f245,u+f290,u+f2b9,u+f31d,u+f336,u+f33d-f33e,u+f340-f345,u+f34e,u+f361,u+f364,u+f366,u+f462,u+f464,u+f54d,u+f557,u+f5d1-f5d4,u+f616,u+f640,u+f644-f646,u+f666,u+f6ae,u+f6b0,u+f6b2-f6b4,u+f732,u+f779,u+f77d-f77e,u+f7e5,u+f7f9,u+f843-f844,u+f847,u+f881-f88f,u+f8a0-f8a3,u+f8f4-f8f6,u+10e059-10e05a,u+10f01e,u+10f021,u+10f036-10f039,u+10f047-10f049,u+10f05e,u+10f069,u+10f07d-10f07e,u+10f08b,u+10f08e,u+10f090,u+10f0e2,u+10f0ec,u+10f100-10f105,u+10f107,u+10f148-10f149,u+10f15d-10f15e,u+10f160-10f163,u+10f175-10f178,u+10f1fa,u+10f245,u+10f290,u+10f2b9,u+10f31d,u+10f336,u+10f33d-10f33e,u+10f340-10f345,u+10f34e,u+10f361,u+10f364,u+10f366,u+10f462,u+10f464,u+10f54d,u+10f557,u+10f5d1-10f5d4,u+10f616,u+10f640,u+10f644-10f646,u+10f666,u+10f6ae,u+10f6b0,u+10f6b2-10f6b4,u+10f732,u+10f779,u+10f77d-10f77e,u+10f7e5,u+10f7f9,u+10f843-10f844,u+10f847,u+10f881-10f88f,u+10f8a0-10f8a3,u+10f8f4-10f8f6}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-aa90b0.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-aa90b0.ttf) format("truetype");unicode-range:u+e025-e02c,u+e06a-e06c,u+e070,u+f022,u+f029,u+f074,u+f079,u+f09e,u+f0c4,u+f10d,u+f122,u+f14d,u+f156,u+f158,u+f197,u+f1e0,u+f20b,u+f24e,u+f2ea,u+f2f1,u+f2f5-f2f6,u+f2f8-f2fb,u+f2fe,u+f30b,u+f347,u+f34c,u+f356,u+f362,u+f365,u+f367,u+f3ed,u+f410,u+f45a-f45b,u+f463,u+f480,u+f485-f486,u+f488-f489,u+f4d4,u+f4d6,u+f4d9,u+f515-f516,u+f546-f547,u+f54a-f54b,u+f54f,u+f553,u+f5b1,u+f619-f61f,u+f63d,u+f641,u+f685-f686,u+f68a-f68b,u+f690-f694,u+f6a0,u+f707-f70a,u+f70d,u+f70f-f713,u+f75a-f75b,u+f75e,u+f7b9,u+f7be-f7c3,u+f7d9,u+f819-f822,u+f87e-f87f,u+f8d8,u+f8da-f8dc,u+f8f3,u+10e025-10e02c,u+10e06a-10e06c,u+10e070,u+10f022,u+10f029,u+10f074,u+10f079,u+10f09e,u+10f0c4,u+10f10d,u+10f122,u+10f14d,u+10f156,u+10f158,u+10f197,u+10f1e0,u+10f20b,u+10f24e,u+10f2ea,u+10f2f1,u+10f2f5-10f2f6,u+10f2f8-10f2fb,u+10f2fe,u+10f30b,u+10f347,u+10f34c,u+10f356,u+10f362,u+10f365,u+10f367,u+10f3ed,u+10f410,u+10f45a-10f45b,u+10f463,u+10f480,u+10f485-10f486,u+10f488-10f489,u+10f4d4,u+10f4d6,u+10f4d9,u+10f515-10f516,u+10f546-10f547,u+10f54a-10f54b,u+10f54f,u+10f553,u+10f5b1,u+10f619-10f61f,u+10f63d,u+10f641,u+10f685-10f686,u+10f68a-10f68b,u+10f690-10f694,u+10f6a0,u+10f707-10f70a,u+10f70d,u+10f70f-10f713,u+10f75a-10f75b,u+10f75e,u+10f7b9,u+10f7be-10f7c3,u+10f7d9,u+10f819-10f822,u+10f87e-10f87f,u+10f8d8,u+10f8da-10f8dc,u+10f8f3}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-d5bbe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-d5bbe9.ttf) format("truetype");unicode-range:u+e017,u+e01f,u+e024,u+e045,u+e060,u+f001,u+f004-f005,u+f007,u+f00c,u+f011-f012,u+f015,u+f017,u+f019,u+f023-f024,u+f02c-f02d,u+f02f-f031,u+f03a,u+f03d-f03e,u+f040-f041,u+f04a-f04e,u+f060-f065,u+f067-f068,u+f06b-f06d,u+f072,u+f075,u+f077,u+f07b,u+f084,u+f091,u+f093,u+f095,u+f09d,u+f0a6,u+f0ac-f0ad,u+f0b0,u+f0c0-f0c2,u+f0c5,u+f0c8-f0c9,u+f0cc,u+f0ce,u+f0d1,u+f0d6-f0d7,u+f0dc,u+f0e0,u+f0e8,u+f0f3,u+f106,u+f108-f109,u+f10e,u+f110-f111,u+f11e,u+f121,u+f128-f12a,u+f132-f133,u+f135,u+f145,u+f14e,u+f15b,u+f186,u+f188,u+f1ab,u+f1ad,u+f1bb,u+f1c0,u+f1c2-f1c3,u+f1d8,u+f1e4,u+f1ea-f1eb,u+f1f8,u+f205,u+f20a,u+f217,u+f21a,u+f21c-f21d,u+f233,u+f238,u+f251,u+f25d,u+f292,u+f29e,u+f2a0,u+f2a7,u+f2bb,u+f2cc,u+f2db,u+f2e1,u+f2ec,u+f2f7,u+f303,u+f316,u+f328,u+f332,u+f335,u+f37e,u+f390,u+f3c5,u+f3ce,u+f3f4,u+f40e,u+f435,u+f481,u+f493,u+f4cc,u+f4d1,u+f4d8,u+f4e2,u+f503,u+f51b,u+f52b,u+f549,u+f54e,u+f555,u+f559,u+f56e-f570,u+f594,u+f5a1,u+f5aa-f5ab,u+f5b7,u+f5db-f5dc,u+f5f6,u+f5fd,u+f621,u+f64a,u+f64f,u+f654,u+f656,u+f673,u+f67d,u+f67f,u+f695,u+f69c,u+f6a8,u+f6e3,u+f6e9,u+f6ff,u+f715,u+f734,u+f755,u+f757,u+f773,u+f781,u+f784,u+f788,u+f7b2,u+f7b6,u+f7bd,u+f7d5,u+f7ee,u+f7ff,u+f804,u+f80a,u+f80c,u+f813,u+f82f,u+f855,u+f858-f859,u+f85c,u+f86d,u+f871,u+f893-f894,u+f8a9,u+f8b2,u+f8d6,u+f8d9,u+f8e7,u+f8ef,u+10e017,u+10e01f,u+10e024,u+10e045,u+10e060,u+10f001,u+10f004-10f005,u+10f007,u+10f00c,u+10f011-10f012,u+10f015,u+10f017,u+10f019,u+10f023-10f024,u+10f02c-10f02d,u+10f02f-10f031,u+10f03a,u+10f03d-10f03e,u+10f040-10f041,u+10f04a-10f04e,u+10f060-10f065,u+10f067-10f068,u+10f06b-10f06d,u+10f072,u+10f075,u+10f077,u+10f07b,u+10f084,u+10f091,u+10f093,u+10f095,u+10f09d,u+10f0a6,u+10f0ac-10f0ad,u+10f0b0,u+10f0c0-10f0c2,u+10f0c5,u+10f0c8-10f0c9,u+10f0cc,u+10f0ce,u+10f0d1,u+10f0d6-10f0d7,u+10f0dc,u+10f0e0,u+10f0e8,u+10f0f3,u+10f106,u+10f108-10f109,u+10f10e,u+10f110-10f111,u+10f11e,u+10f121,u+10f128-10f12a,u+10f132-10f133,u+10f135,u+10f145,u+10f14e,u+10f15b,u+10f186,u+10f188,u+10f1ab,u+10f1ad,u+10f1bb,u+10f1c0,u+10f1c2-10f1c3,u+10f1d8,u+10f1e4,u+10f1ea-10f1eb,u+10f1f8,u+10f205,u+10f20a,u+10f217,u+10f21a,u+10f21c-10f21d,u+10f233,u+10f238,u+10f251,u+10f25d,u+10f292,u+10f29e,u+10f2a0,u+10f2a7,u+10f2bb,u+10f2cc,u+10f2db,u+10f2e1,u+10f2ec,u+10f2f7,u+10f303,u+10f316,u+10f328,u+10f332,u+10f335,u+10f37e,u+10f390,u+10f3c5,u+10f3ce,u+10f3f4,u+10f40e,u+10f435,u+10f481,u+10f493,u+10f4cc,u+10f4d1,u+10f4d8,u+10f4e2,u+10f503,u+10f51b,u+10f52b,u+10f549,u+10f54e,u+10f555,u+10f559,u+10f56e-10f570,u+10f594,u+10f5a1,u+10f5aa-10f5ab,u+10f5b7,u+10f5db-10f5dc,u+10f5f6,u+10f5fd,u+10f621,u+10f64a,u+10f64f,u+10f654,u+10f656,u+10f673,u+10f67d,u+10f67f,u+10f695,u+10f69c,u+10f6a8,u+10f6e3,u+10f6e9,u+10f6ff,u+10f715,u+10f734,u+10f755,u+10f757,u+10f773,u+10f781,u+10f784,u+10f788,u+10f7b2,u+10f7b6,u+10f7bd,u+10f7d5,u+10f7ee,u+10f7ff,u+10f804,u+10f80a,u+10f80c,u+10f813,u+10f82f,u+10f855,u+10f858-10f859,u+10f85c,u+10f86d,u+10f871,u+10f893-10f894,u+10f8a9,u+10f8b2,u+10f8d6,u+10f8d9,u+10f8e7,u+10f8ef}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-3eb023.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-3eb023.ttf) format("truetype");unicode-range:u+e002-e003,u+e030-e032,u+e051,u+f042,u+f055-f057,u+f059-f05a,u+f066,u+f06a,u+f0ed-f0ee,u+f144,u+f192,u+f1da,u+f28b,u+f28d,u+f2bd,u+f2e8,u+f327,u+f358-f35b,u+f381-f382,u+f386-f387,u+f46c-f46d,u+f47e,u+f4ac-f4b5,u+f4b9,u+f4c7,u+f51f,u+f568,u+f5e8-f5e9,u+f602,u+f615,u+f651,u+f6c2-f6c4,u+f6c6,u+f737-f746,u+f74e,u+f76c-f76e,u+f7ba,u+f7cd,u+f7f3,u+f7f5,u+f8ad-f8ae,u+f8b0,u+10e002-10e003,u+10e030-10e032,u+10e051,u+10f042,u+10f055-10f057,u+10f059-10f05a,u+10f066,u+10f06a,u+10f0ed-10f0ee,u+10f144,u+10f192,u+10f1da,u+10f28b,u+10f28d,u+10f2bd,u+10f2e8,u+10f327,u+10f358-10f35b,u+10f381-10f382,u+10f386-10f387,u+10f46c-10f46d,u+10f47e,u+10f4ac-10f4b5,u+10f4b9,u+10f4c7,u+10f51f,u+10f568,u+10f5e8-10f5e9,u+10f602,u+10f615,u+10f651,u+10f6c2-10f6c4,u+10f6c6,u+10f737-10f746,u+10f74e,u+10f76c-10f76e,u+10f7ba,u+10f7cd,u+10f7f3,u+10f7f5,u+10f8ad-10f8ae,u+10f8b0}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-9d9a2c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-9d9a2c.ttf) format("truetype");unicode-range:u+e02d-e02e,u+e033-e039,u+e06d,u+e06f,u+e071,u+f089,u+f098,u+f0dd-f0de,u+f0f1,u+f0fd-f0fe,u+f143,u+f146,u+f14a-f14c,u+f150-f152,u+f154,u+f191,u+f199,u+f1de,u+f1e1,u+f277,u+f2d3,u+f2dc,u+f2e5,u+f2e9,u+f2f2-f2f4,u+f2fd,u+f30f,u+f321,u+f329-f32c,u+f339-f33c,u+f350-f353,u+f360,u+f3f0-f3f2,u+f45c,u+f48d,u+f49b,u+f49f,u+f4c8,u+f540,u+f54c,u+f551,u+f5bb-f5bd,u+f5c0,u+f5d0,u+f617,u+f620,u+f622-f623,u+f67b,u+f681-f682,u+f68c-f68f,u+f696-f69a,u+f714,u+f716-f71a,u+f75f-f761,u+f79b,u+f7c4,u+f7cc,u+f7cf-f7d0,u+f7d2,u+f7d4,u+f824-f825,u+f87b,u+f880,u+f890-f891,u+f8dd-f8de,u+10e02d-10e02e,u+10e033-10e039,u+10e06d,u+10e06f,u+10e071,u+10f089,u+10f098,u+10f0dd-10f0de,u+10f0f1,u+10f0fd-10f0fe,u+10f143,u+10f146,u+10f14a-10f14c,u+10f150-10f152,u+10f154,u+10f191,u+10f199,u+10f1de,u+10f1e1,u+10f277,u+10f2d3,u+10f2dc,u+10f2e5,u+10f2e9,u+10f2f2-10f2f4,u+10f2fd,u+10f30f,u+10f321,u+10f329-10f32c,u+10f339-10f33c,u+10f350-10f353,u+10f360,u+10f3f0-10f3f2,u+10f45c,u+10f48d,u+10f49b,u+10f49f,u+10f4c8,u+10f540,u+10f54c,u+10f551,u+10f5bb-10f5bd,u+10f5c0,u+10f5d0,u+10f617,u+10f620,u+10f622-10f623,u+10f67b,u+10f681-10f682,u+10f68c-10f68f,u+10f696-10f69a,u+10f714,u+10f716-10f71a,u+10f75f-10f761,u+10f79b,u+10f7c4,u+10f7cc,u+10f7cf-10f7d0,u+10f7d2,u+10f7d4,u+10f824-10f825,u+10f87b,u+10f880,u+10f890-10f891,u+10f8dd-10f8de}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-e41116.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-e41116.ttf) format("truetype");unicode-range:u+e010,u+e01b,u+e020-e021,u+e02f,u+e03a,u+e042,u+e046,u+e068,u+e06e,u+e074,u+e076,u+f008,u+f018,u+f01c,u+f025,u+f02a,u+f02e,u+f05b,u+f06e,u+f078,u+f086,u+f09c,u+f0a3,u+f0b1,u+f0c6,u+f0e7,u+f0eb,u+f0f8,u+f11c,u+f126,u+f12c-f12e,u+f130-f131,u+f13d,u+f140,u+f155,u+f164,u+f1ae,u+f1b2,u+f1b8,u+f1c1,u+f1ce,u+f1dc,u+f1e5-f1e6,u+f1ec,u+f1f9,u+f219,u+f21b,u+f22d,u+f234,u+f246,u+f24d,u+f275,u+f295,u+f2b5,u+f2cd,u+f2d2,u+f2fc,u+f302,u+f31a,u+f363,u+f3e5,u+f3fb,u+f44b,u+f47d,u+f48a,u+f48f-f490,u+f494,u+f498,u+f4b7,u+f4ca,u+f4d7,u+f508,u+f51d-f51e,u+f521-f522,u+f530,u+f535,u+f53e,u+f541,u+f543-f545,u+f548,u+f55d,u+f564,u+f56c,u+f577-f578,u+f590,u+f595,u+f5a2,u+f5b0,u+f5ba,u+f5bf,u+f5ca,u+f5ef,u+f5f2,u+f5fb,u+f63b,u+f649,u+f653,u+f65b,u+f664,u+f675,u+f6bf-f6c0,u+f6d5,u+f6f5,u+f6fa,u+f700,u+f70b,u+f70e,u+f71b,u+f72e-f72f,u+f733,u+f747,u+f75c,u+f762,u+f77c,u+f801,u+f814,u+f830,u+f845-f846,u+f850,u+f866,u+f875,u+f897,u+f89f,u+f8b1,u+f8bb,u+f8c7,u+f8d7,u+f8df-f8e0,u+f8ee,u+f8fd,u+10e010,u+10e01b,u+10e020-10e021,u+10e02f,u+10e03a,u+10e042,u+10e046,u+10e068,u+10e06e,u+10e074,u+10e076,u+10f008,u+10f018,u+10f01c,u+10f025,u+10f02a,u+10f02e,u+10f05b,u+10f06e,u+10f078,u+10f086,u+10f09c,u+10f0a3,u+10f0b1,u+10f0c6,u+10f0e7,u+10f0eb,u+10f0f8,u+10f11c,u+10f126,u+10f12c-10f12e,u+10f130-10f131,u+10f13d,u+10f140,u+10f155,u+10f164,u+10f1ae,u+10f1b2,u+10f1b8,u+10f1c1,u+10f1ce,u+10f1dc,u+10f1e5-10f1e6,u+10f1ec,u+10f1f9,u+10f219,u+10f21b,u+10f22d,u+10f234,u+10f246,u+10f24d,u+10f275,u+10f295,u+10f2b5,u+10f2cd,u+10f2d2,u+10f2fc,u+10f302,u+10f31a,u+10f363,u+10f3e5,u+10f3fb,u+10f44b,u+10f47d,u+10f48a,u+10f48f-10f490,u+10f494,u+10f498,u+10f4b7,u+10f4ca,u+10f4d7,u+10f508,u+10f51d-10f51e,u+10f521-10f522,u+10f530,u+10f535,u+10f53e,u+10f541,u+10f543-10f545,u+10f548,u+10f55d,u+10f564,u+10f56c,u+10f577-10f578,u+10f590,u+10f595,u+10f5a2,u+10f5b0,u+10f5ba,u+10f5bf,u+10f5ca,u+10f5ef,u+10f5f2,u+10f5fb,u+10f63b,u+10f649,u+10f653,u+10f65b,u+10f664,u+10f675,u+10f6bf-10f6c0,u+10f6d5,u+10f6f5,u+10f6fa,u+10f700,u+10f70b,u+10f70e,u+10f71b,u+10f72e-10f72f,u+10f733,u+10f747,u+10f75c,u+10f762,u+10f77c,u+10f801,u+10f814,u+10f830,u+10f845-10f846,u+10f850,u+10f866,u+10f875,u+10f897,u+10f89f,u+10f8b1,u+10f8bb,u+10f8c7,u+10f8d7,u+10f8df-10f8e0,u+10f8ee,u+10f8fd}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-910f33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-910f33.ttf) format("truetype");unicode-range:u+e008-e00c,u+e05c-e05f,u+e061-e064,u+f013,u+f050-f051,u+f085,u+f0a0,u+f0a4-f0a5,u+f0a7,u+f0e3-f0e4,u+f11b,u+f19d,u+f1e3,u+f21e,u+f255-f25b,u+f2a3,u+f2e3,u+f2e6,u+f307,u+f312-f315,u+f3a5,u+f3fd,u+f44e-f451,u+f461,u+f47a-f47c,u+f4bc-f4c6,u+f52e-f52f,u+f531-f533,u+f58d-f58f,u+f5f4-f5f5,u+f624-f62d,u+f65e-f661,u+f663,u+f665,u+f684,u+f6de,u+f6e2,u+f6e4-f6e8,u+f6ea-f6eb,u+f79c-f79d,u+f7a3-f7a9,u+f802-f803,u+f806-f809,u+f867-f86b,u+f8bc-f8c2,u+10e008-10e00c,u+10e05c-10e05f,u+10e061-10e064,u+10f013,u+10f050-10f051,u+10f085,u+10f0a0,u+10f0a4-10f0a5,u+10f0a7,u+10f0e3-10f0e4,u+10f11b,u+10f19d,u+10f1e3,u+10f21e,u+10f255-10f25b,u+10f2a3,u+10f2e3,u+10f2e6,u+10f307,u+10f312-10f315,u+10f3a5,u+10f3fd,u+10f44e-10f451,u+10f461,u+10f47a-10f47c,u+10f4bc-10f4c6,u+10f52e-10f52f,u+10f531-10f533,u+10f58d-10f58f,u+10f5f4-10f5f5,u+10f624-10f62d,u+10f65e-10f661,u+10f663,u+10f665,u+10f684,u+10f6de,u+10f6e2,u+10f6e4-10f6e8,u+10f6ea-10f6eb,u+10f79c-10f79d,u+10f7a3-10f7a9,u+10f802-10f803,u+10f806-10f809,u+10f867-10f86b,u+10f8bc-10f8c2}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-f064f7.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-f064f7.ttf) format("truetype");unicode-range:u+e03b-e041,u+e043-e044,u+e072,u+f009-f00b,u+f02b,u+f034-f035,u+f071,u+f08d,u+f0db,u+f0f2,u+f0f9-f0fa,u+f10a,u+f120,u+f12b,u+f165,u+f185,u+f1ba,u+f204,u+f225,u+f239,u+f25c,u+f2c7-f2cb,u+f2eb,u+f2ed,u+f3fa,u+f3fc,u+f3ff-f400,u+f45d-f45e,u+f48b-f48c,u+f48e,u+f491,u+f4db-f4e0,u+f519,u+f552,u+f566,u+f5c1,u+f5c3,u+f5c9,u+f62e-f62f,u+f631-f63a,u+f63c,u+f69b,u+f69e-f69f,u+f6a1,u+f71c-f725,u+f763-f76b,u+f76f,u+f7d7-f7d8,u+f7db-f7de,u+f826,u+f829-f82b,u+f85d,u+f86e,u+f87d,u+f892,u+f895-f896,u+f8e2-f8e3,u+10e03b-10e041,u+10e043-10e044,u+10e072,u+10f009-10f00b,u+10f02b,u+10f034-10f035,u+10f071,u+10f08d,u+10f0db,u+10f0f2,u+10f0f9-10f0fa,u+10f10a,u+10f120,u+10f12b,u+10f165,u+10f185,u+10f1ba,u+10f204,u+10f225,u+10f239,u+10f25c,u+10f2c7-10f2cb,u+10f2eb,u+10f2ed,u+10f3fa,u+10f3fc,u+10f3ff-10f400,u+10f45d-10f45e,u+10f48b-10f48c,u+10f48e,u+10f491,u+10f4db-10f4e0,u+10f519,u+10f552,u+10f566,u+10f5c1,u+10f5c3,u+10f5c9,u+10f62e-10f62f,u+10f631-10f63a,u+10f63c,u+10f69b,u+10f69e-10f69f,u+10f6a1,u+10f71c-10f725,u+10f763-10f76b,u+10f76f,u+10f7d7-10f7d8,u+10f7db-10f7de,u+10f826,u+10f829-10f82b,u+10f85d,u+10f86e,u+10f87d,u+10f892,u+10f895-10f896,u+10f8e2-10f8e3}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-16f2f9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-16f2f9.ttf) format("truetype");unicode-range:u+e000-e001,u+f053-f054,u+f058,u+f073,u+f07a,u+f080,u+f083,u+f0a8-f0ab,u+f0d8-f0da,u+f137-f13a,u+f1b9,u+f1fd-f1fe,u+f200-f201,u+f218,u+f271-f274,u+f322-f325,u+f32d-f32e,u+f330-f331,u+f333-f334,u+f439-f448,u+f46b,u+f474-f476,u+f51c,u+f55f-f560,u+f59d,u+f5de-f5e7,u+f643,u+f64c-f64e,u+f6a3,u+f6ba-f6be,u+f6c1,u+f736,u+f772,u+f783,u+f786-f787,u+f78a-f78b,u+f79e-f79f,u+f7da,u+f7ef-f7f0,u+f832-f833,u+f85a-f85b,u+f8a4,u+f8a7-f8a8,u+f8aa-f8ac,u+f8ec,u+f8fe-f8ff,u+10e000-10e001,u+10f053-10f054,u+10f058,u+10f073,u+10f07a,u+10f080,u+10f083,u+10f0a8-10f0ab,u+10f0d8-10f0da,u+10f137-10f13a,u+10f1b9,u+10f1fd-10f1fe,u+10f200-10f201,u+10f218,u+10f271-10f274,u+10f322-10f325,u+10f32d-10f32e,u+10f330-10f331,u+10f333-10f334,u+10f439-10f448,u+10f46b,u+10f474-10f476,u+10f51c,u+10f55f-10f560,u+10f59d,u+10f5de-10f5e7,u+10f643,u+10f64c-10f64e,u+10f6a3,u+10f6ba-10f6be,u+10f6c1,u+10f736,u+10f772,u+10f783,u+10f786-10f787,u+10f78a-10f78b,u+10f79e-10f79f,u+10f7da,u+10f7ef-10f7f0,u+10f832-10f833,u+10f85a-10f85b,u+10f8a4,u+10f8a7-10f8a8,u+10f8aa-10f8ac,u+10f8ec,u+10f8fe-10f8ff}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-b1cb49.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-b1cb49.ttf) format("truetype");unicode-range:u+f043,u+f052,u+f070,u+f119,u+f125,u+f141-f142,u+f153,u+f1b3,u+f1fb,u+f2a2,u+f2a4,u+f2a8,u+f2b6,u+f309,u+f320,u+f326,u+f349-f34a,u+f354,u+f389-f38a,u+f39b-f39c,u+f422,u+f449-f44a,u+f46e-f46f,u+f471-f473,u+f4b8,u+f4ba,u+f520,u+f523-f52a,u+f52c,u+f542,u+f556,u+f55a,u+f563,u+f565,u+f567,u+f569-f56a,u+f579,u+f57c-f57e,u+f5c7,u+f5ea-f5ee,u+f5f0,u+f655,u+f657-f658,u+f674,u+f6b1,u+f6c5,u+f6c7-f6c8,u+f6cb,u+f6cd-f6d4,u+f6d6-f6db,u+f748-f749,u+f750,u+f78e-f78f,u+f792-f796,u+f7a2,u+f7f6-f7f8,u+f7fa-f7fc,u+f85f-f862,u+f8b3-f8b5,u+f8cc-f8cd,u+10f043,u+10f052,u+10f070,u+10f119,u+10f125,u+10f141-10f142,u+10f153,u+10f1b3,u+10f1fb,u+10f2a2,u+10f2a4,u+10f2a8,u+10f2b6,u+10f309,u+10f320,u+10f326,u+10f349-10f34a,u+10f354,u+10f389-10f38a,u+10f39b-10f39c,u+10f422,u+10f449-10f44a,u+10f46e-10f46f,u+10f471-10f473,u+10f4b8,u+10f4ba,u+10f520,u+10f523-10f52a,u+10f52c,u+10f542,u+10f556,u+10f55a,u+10f563,u+10f565,u+10f567,u+10f569-10f56a,u+10f579,u+10f57c-10f57e,u+10f5c7,u+10f5ea-10f5ee,u+10f5f0,u+10f655,u+10f657-10f658,u+10f674,u+10f6b1,u+10f6c5,u+10f6c7-10f6c8,u+10f6cb,u+10f6cd-10f6d4,u+10f6d6-10f6db,u+10f748-10f749,u+10f750,u+10f78e-10f78f,u+10f792-10f796,u+10f7a2,u+10f7f6-10f7f8,u+10f7fa-10f7fc,u+10f85f-10f862,u+10f8b3-10f8b5,u+10f8cc-10f8cd}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-792d0c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-792d0c.ttf) format("truetype");unicode-range:u+e05b,u+f032,u+f0a1,u+f0fc,u+f187,u+f19c,u+f1e2,u+f1f6,u+f206-f207,u+f236,u+f240-f244,u+f291,u+f2a1,u+f376-f377,u+f432-f434,u+f436-f438,u+f458,u+f465-f469,u+f487,u+f499-f49a,u+f49c-f49e,u+f4a0-f4a1,u+f517-f518,u+f51a,u+f550,u+f558,u+f55b-f55c,u+f55e,u+f562,u+f5d5-f5da,u+f5dd,u+f647-f648,u+f64b,u+f66a,u+f677,u+f687,u+f6b5-f6b9,u+f735,u+f77f-f780,u+f782,u+f7e6-f7ed,u+f7f1,u+f805,u+f823,u+f827-f828,u+f848-f849,u+f84c-f84f,u+f851-f854,u+f856-f857,u+f89c-f89d,u+f8a5,u+f8f7-f8fc,u+10e05b,u+10f032,u+10f0a1,u+10f0fc,u+10f187,u+10f19c,u+10f1e2,u+10f1f6,u+10f206-10f207,u+10f236,u+10f240-10f244,u+10f291,u+10f2a1,u+10f376-10f377,u+10f432-10f434,u+10f436-10f438,u+10f458,u+10f465-10f469,u+10f487,u+10f499-10f49a,u+10f49c-10f49e,u+10f4a0-10f4a1,u+10f517-10f518,u+10f51a,u+10f550,u+10f558,u+10f55b-10f55c,u+10f55e,u+10f562,u+10f5d5-10f5da,u+10f5dd,u+10f647-10f648,u+10f64b,u+10f66a,u+10f677,u+10f687,u+10f6b5-10f6b9,u+10f735,u+10f77f-10f780,u+10f782,u+10f7e6-10f7ed,u+10f7f1,u+10f805,u+10f823,u+10f827-10f828,u+10f848-10f849,u+10f84c-10f84f,u+10f851-10f854,u+10f856-10f857,u+10f89c-10f89d,u+10f8a5,u+10f8f7-10f8fc}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-b1cf62.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-b1cf62.ttf) format("truetype");unicode-range:u+e047-e048,u+e04a-e050,u+e058,u+e073,u+e075,u+e085-e086,u+f00d,u+f026-f028,u+f0b2,u+f0cd,u+f0d0,u+f0e9,u+f0f0,u+f13e,u+f157,u+f159,u+f193,u+f221,u+f226,u+f228,u+f235,u+f26c,u+f29a,u+f2d0-f2d1,u+f2e2,u+f2e7,u+f30c,u+f338,u+f346,u+f34d,u+f357,u+f35d,u+f3be-f3bf,u+f401,u+f406,u+f40f,u+f424,u+f45f-f460,u+f492,u+f495-f497,u+f4bb,u+f4e1,u+f4e3,u+f4fa-f502,u+f504-f507,u+f509,u+f5b6,u+f5c5,u+f5cb,u+f5cd-f5ce,u+f5f8,u+f63e,u+f6a2,u+f6a4-f6a7,u+f6a9-f6ad,u+f726-f72d,u+f770-f771,u+f774-f777,u+f7a0-f7a1,u+f7e2,u+f82c-f82e,u+f831,u+f83e,u+f898-f89b,u+f8e4-f8e6,u+f8e9-f8eb,u+f8ed,u+f8f0-f8f2,u+10e047-10e048,u+10e04a-10e050,u+10e058,u+10e073,u+10e075,u+10e085-10e086,u+10f00d,u+10f026-10f028,u+10f0b2,u+10f0cd,u+10f0d0,u+10f0e9,u+10f0f0,u+10f13e,u+10f157,u+10f159,u+10f193,u+10f221,u+10f226,u+10f228,u+10f235,u+10f26c,u+10f29a,u+10f2d0-10f2d1,u+10f2e2,u+10f2e7,u+10f30c,u+10f338,u+10f346,u+10f34d,u+10f357,u+10f35d,u+10f3be-10f3bf,u+10f401,u+10f406,u+10f40f,u+10f424,u+10f45f-10f460,u+10f492,u+10f495-10f497,u+10f4bb,u+10f4e1,u+10f4e3,u+10f4fa-10f502,u+10f504-10f507,u+10f509,u+10f5b6,u+10f5c5,u+10f5cb,u+10f5cd-10f5ce,u+10f5f8,u+10f63e,u+10f6a2,u+10f6a4-10f6a7,u+10f6a9-10f6ad,u+10f726-10f72d,u+10f770-10f771,u+10f774-10f777,u+10f7a0-10f7a1,u+10f7e2,u+10f82c-10f82e,u+10f831,u+10f83e,u+10f898-10f89b,u+10f8e4-10f8e6,u+10f8e9-10f8eb,u+10f8ed,u+10f8f0-10f8f2}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-25ee0f.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-25ee0f.ttf) format("truetype");unicode-range:u+e00d-e00f,u+e011-e012,u+e014-e016,u+e018-e019,u+e065-e066,u+f033,u+f03c,u+f094,u+f0ae,u+f0ca-f0cb,u+f0fb,u+f124,u+f127,u+f195,u+f1cd,u+f252-f254,u+f2c1-f2c2,u+f2e4,u+f2ee,u+f300,u+f30a,u+f30e,u+f310-f311,u+f337,u+f348,u+f34b,u+f355,u+f3b3,u+f3e0,u+f453-f454,u+f479,u+f47f,u+f4c9,u+f4cb,u+f534,u+f536-f537,u+f591,u+f593,u+f5f9,u+f5fc,u+f5fe-f601,u+f603,u+f605-f606,u+f667-f669,u+f66b-f672,u+f6ed-f6f4,u+f6f6-f6f7,u+f74f,u+f751-f752,u+f7aa-f7ae,u+f7f2,u+f80b,u+f80d-f812,u+f86c,u+f86f-f870,u+f87a,u+f8c3-f8c6,u+f8c8-f8c9,u+10e00d-10e00f,u+10e011-10e012,u+10e014-10e016,u+10e018-10e019,u+10e065-10e066,u+10f033,u+10f03c,u+10f094,u+10f0ae,u+10f0ca-10f0cb,u+10f0fb,u+10f124,u+10f127,u+10f195,u+10f1cd,u+10f252-10f254,u+10f2c1-10f2c2,u+10f2e4,u+10f2ee,u+10f300,u+10f30a,u+10f30e,u+10f310-10f311,u+10f337,u+10f348,u+10f34b,u+10f355,u+10f3b3,u+10f3e0,u+10f453-10f454,u+10f479,u+10f47f,u+10f4c9,u+10f4cb,u+10f534,u+10f536-10f537,u+10f591,u+10f593,u+10f5f9,u+10f5fc,u+10f5fe-10f601,u+10f603,u+10f605-10f606,u+10f667-10f669,u+10f66b-10f672,u+10f6ed-10f6f4,u+10f6f6-10f6f7,u+10f74f,u+10f751-10f752,u+10f7aa-10f7ae,u+10f7f2,u+10f80b,u+10f80d-10f812,u+10f86c,u+10f86f-10f870,u+10f87a,u+10f8c3-10f8c6,u+10f8c8-10f8c9}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-cbbfb4.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-cbbfb4.ttf) format("truetype");unicode-range:u+e01c-e01d,u+e022-e023,u+e069,u+f03b,u+f044,u+f0ea,u+f182-f183,u+f1b0,u+f1dd,u+f1fc,u+f29d,u+f2ce,u+f304-f305,u+f3dd-f3de,u+f470,u+f482-f484,u+f4cd-f4d0,u+f4d2-f4d3,u+f53f,u+f554,u+f5a9,u+f5ac-f5af,u+f5c4,u+f618,u+f679-f67a,u+f67c,u+f67e,u+f680,u+f683,u+f6ec,u+f701-f703,u+f705-f706,u+f70c,u+f756,u+f758-f759,u+f7b8,u+f7c5,u+f7c7-f7cb,u+f7ce,u+f7d1,u+f815-f818,u+f84a-f84b,u+f85e,u+f876,u+f878-f879,u+f87c,u+f8d3-f8d5,u+10e01c-10e01d,u+10e022-10e023,u+10e069,u+10f03b,u+10f044,u+10f0ea,u+10f182-10f183,u+10f1b0,u+10f1dd,u+10f1fc,u+10f29d,u+10f2ce,u+10f304-10f305,u+10f3dd-10f3de,u+10f470,u+10f482-10f484,u+10f4cd-10f4d0,u+10f4d2-10f4d3,u+10f53f,u+10f554,u+10f5a9,u+10f5ac-10f5af,u+10f5c4,u+10f618,u+10f679-10f67a,u+10f67c,u+10f67e,u+10f680,u+10f683,u+10f6ec,u+10f701-10f703,u+10f705-10f706,u+10f70c,u+10f756,u+10f758-10f759,u+10f7b8,u+10f7c5,u+10f7c7-10f7cb,u+10f7ce,u+10f7d1,u+10f815-10f818,u+10f84a-10f84b,u+10f85e,u+10f876,u+10f878-10f879,u+10f87c,u+10f8d3-10f8d5}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-493f48.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-493f48.ttf) format("truetype");unicode-range:u+e004-e006,u+e053-e054,u+f07c,u+f0c3,u+f0c7,u+f118,u+f11a,u+f134,u+f15c,u+f1ac,u+f1c4-f1c9,u+f317-f319,u+f31c,u+f3a0,u+f44c,u+f456,u+f46a,u+f477-f478,u+f4da,u+f52d,u+f56b,u+f56d,u+f571-f576,u+f57a,u+f57f-f58c,u+f596-f59c,u+f5a4-f5a5,u+f5b3-f5b4,u+f5b8-f5b9,u+f5c2,u+f5c8,u+f5f3,u+f659-f65a,u+f65c-f65d,u+f662,u+f6dd,u+f6df-f6e1,u+f74b-f74d,u+f79a,u+f7e4,u+f7fd-f7fe,u+f800,u+f863-f865,u+f877,u+f8b6-f8ba,u+10e004-10e006,u+10e053-10e054,u+10f07c,u+10f0c3,u+10f0c7,u+10f118,u+10f11a,u+10f134,u+10f15c,u+10f1ac,u+10f1c4-10f1c9,u+10f317-10f319,u+10f31c,u+10f3a0,u+10f44c,u+10f456,u+10f46a,u+10f477-10f478,u+10f4da,u+10f52d,u+10f56b,u+10f56d,u+10f571-10f576,u+10f57a,u+10f57f-10f58c,u+10f596-10f59c,u+10f5a4-10f5a5,u+10f5b3-10f5b4,u+10f5b8-10f5b9,u+10f5c2,u+10f5c8,u+10f5f3,u+10f659-10f65a,u+10f65c-10f65d,u+10f662,u+10f6dd,u+10f6df-10f6e1,u+10f74b-10f74d,u+10f79a,u+10f7e4,u+10f7fd-10f7fe,u+10f800,u+10f863-10f865,u+10f877,u+10f8b6-10f8ba}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-c238fb.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-c238fb.ttf) format("truetype");unicode-range:u+e067,u+f000,u+f002,u+f00e,u+f010,u+f076,u+f0f4,u+f10b,u+f222-f224,u+f227,u+f229-f22c,u+f247-f249,u+f276,u+f279-f27a,u+f2f0,u+f301,u+f306,u+f308,u+f30d,u+f31e,u+f3c1-f3c2,u+f3c9,u+f3cd,u+f3cf,u+f3d1,u+f455,u+f4a2-f4ab,u+f4b6,u+f538-f53d,u+f561,u+f57b,u+f59f-f5a0,u+f5a6-f5a7,u+f604,u+f607-f60e,u+f610-f611,u+f613-f614,u+f630,u+f650,u+f652,u+f676,u+f678,u+f688-f689,u+f6f8-f6f9,u+f6fb-f6fe,u+f74a,u+f753-f754,u+f78c,u+f7b4-f7b5,u+f7b7,u+f7f4,u+f872-f874,u+f8af,u+f8cb,u+f8ce-f8d1,u+10e067,u+10f000,u+10f002,u+10f00e,u+10f010,u+10f076,u+10f0f4,u+10f10b,u+10f222-10f224,u+10f227,u+10f229-10f22c,u+10f247-10f249,u+10f276,u+10f279-10f27a,u+10f2f0,u+10f301,u+10f306,u+10f308,u+10f30d,u+10f31e,u+10f3c1-10f3c2,u+10f3c9,u+10f3cd,u+10f3cf,u+10f3d1,u+10f455,u+10f4a2-10f4ab,u+10f4b6,u+10f538-10f53d,u+10f561,u+10f57b,u+10f59f-10f5a0,u+10f5a6-10f5a7,u+10f604,u+10f607-10f60e,u+10f610-10f611,u+10f613-10f614,u+10f630,u+10f650,u+10f652,u+10f676,u+10f678,u+10f688-10f689,u+10f6f8-10f6f9,u+10f6fb-10f6fe,u+10f74a,u+10f753-10f754,u+10f78c,u+10f7b4-10f7b5,u+10f7b7,u+10f7f4,u+10f872-10f874,u+10f8af,u+10f8cb,u+10f8ce-10f8d1}@font-face{font-family:"Font Awesome 5 Duotone";font-display:block;font-weight:900;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-bbafe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-duotone-900-bbafe9.ttf) format("truetype");unicode-range:u+f4e6,u+10f4e6}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c238fb.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c238fb.ttf) format("truetype");unicode-range:u+f000,u+f002,u+f00e,u+f010,u+f076,u+f0f4,u+f222-f224,u+f227,u+f229-f22c,u+f249,u+f276,u+f279}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-d5bbe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-d5bbe9.ttf) format("truetype");unicode-range:u+f001,u+f004-f005,u+f007,u+f00c,u+f011-f012,u+f015,u+f019,u+f023-f024,u+f02c-f02d,u+f02f-f031,u+f03a,u+f03d,u+f040,u+f04a-f04e,u+f060-f064,u+f067-f068,u+f06b-f06d,u+f072,u+f075,u+f077,u+f07b,u+f084,u+f091,u+f093,u+f095,u+f0ad,u+f0b0,u+f0c0-f0c2,u+f0c8-f0c9,u+f0cc,u+f0ce,u+f0d1,u+f0d7,u+f0dc,u+f0e0,u+f0e8,u+f0f3,u+f106,u+f108-f109,u+f10e,u+f110-f111,u+f11e,u+f121,u+f128-f12a,u+f132,u+f135,u+f145,u+f15b,u+f188,u+f1ab,u+f1ad,u+f1bb,u+f1c0,u+f1d8,u+f1e4,u+f1eb,u+f205,u+f217,u+f21a,u+f21c-f21d,u+f233,u+f238,u+f251,u+f283,u+f292,u+f29e,u+f2a0,u+f2a7,u+f2bb,u+f2cc,u+f2db}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-e41116.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-e41116.ttf) format("truetype");unicode-range:u+f008,u+f018,u+f01c,u+f025,u+f02a,u+f02e,u+f05b,u+f078,u+f086,u+f09c,u+f0a3,u+f0b1,u+f0c6,u+f0e7,u+f112,u+f126,u+f12c-f12e,u+f130-f131,u+f13d,u+f140,u+f155,u+f164,u+f1ae,u+f1b2,u+f1b8,u+f1ce,u+f1dc,u+f1e5-f1e6,u+f1ec,u+f21b,u+f22d,u+f234,u+f246,u+f275,u+f295,u+f2cd}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-f064f7.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-f064f7.ttf) format("truetype");unicode-range:u+f009-f00b,u+f02b,u+f034-f035,u+f071,u+f08d,u+f0db,u+f0f2,u+f0f9-f0fa,u+f120,u+f12b,u+f165,u+f1ba,u+f204,u+f225,u+f239,u+f25c,u+f2c7-f2cb}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cf62.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cf62.ttf) format("truetype");unicode-range:u+f00d,u+f026-f028,u+f0cd,u+f0e9,u+f0f0,u+f0f5,u+f157,u+f159,u+f193,u+f221,u+f226,u+f228,u+f235,u+f26c,u+f29a,u+f2d1}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-910f33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-910f33.ttf) format("truetype");unicode-range:u+f013,u+f050-f051,u+f085,u+f0e3,u+f11b,u+f19d,u+f21e,u+f2a3}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c046b6.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-c046b6.ttf) format("truetype");unicode-range:u+f01e,u+f021,u+f036-f039,u+f048-f049,u+f05e,u+f069,u+f0e2,u+f100-f105,u+f107,u+f15d,u+f162,u+f1fa,u+f245,u+f290,u+f2b9}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-aa90b0.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-aa90b0.ttf) format("truetype");unicode-range:u+f029,u+f045,u+f074,u+f079,u+f09e,u+f0c4,u+f10d,u+f122,u+f14d,u+f158,u+f197,u+f1e0,u+f20b,u+f24e}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-792d0c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-792d0c.ttf) format("truetype");unicode-range:u+f032,u+f0a1,u+f0fc,u+f187,u+f19c,u+f1e2,u+f1f6,u+f206-f207,u+f236,u+f240-f244,u+f291,u+f2a1}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-25ee0f.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-25ee0f.ttf) format("truetype");unicode-range:u+f033,u+f03c,u+f0ca-f0cb,u+f0fb,u+f124,u+f127,u+f1cd,u+f250,u+f252-f254,u+f2c2}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-cbbfb4.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-cbbfb4.ttf) format("truetype");unicode-range:u+f03b,u+f0ea,u+f182-f183,u+f1b0,u+f1dd,u+f1fc,u+f29d,u+f2ce}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-3eb023.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-3eb023.ttf) format("truetype");unicode-range:u+f042,u+f055-f057,u+f059-f05a,u+f06a,u+f0ed-f0ee,u+f144,u+f1da,u+f28b,u+f28d,u+f2bd}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cb49.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-b1cb49.ttf) format("truetype");unicode-range:u+f043,u+f052,u+f125,u+f141-f142,u+f153,u+f1b3,u+f1fb,u+f2a2,u+f2a4,u+f2a8,u+f2b6}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-16f2f9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-16f2f9.ttf) format("truetype");unicode-range:u+f053-f054,u+f058,u+f073,u+f07a,u+f083,u+f0a8-f0ab,u+f0d8-f0da,u+f137-f13a,u+f1b9,u+f1fd-f1fe,u+f200-f201,u+f218}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-493f48.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-493f48.ttf) format("truetype");unicode-range:u+f07c,u+f0c3,u+f134,u+f15c,u+f1ac}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-9d9a2c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-solid-900-9d9a2c.ttf) format("truetype");unicode-range:u+f089,u+f098,u+f0dd-f0de,u+f0f1,u+f0fd-f0fe,u+f143,u+f146,u+f14a-f14b,u+f154,u+f199,u+f1b1,u+f1de,u+f1e1,u+f277,u+f2d3}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-56ba33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-56ba33.ttf) format("truetype");unicode-range:u+f081-f082,u+f092,u+f0d3-f0d4,u+f136,u+f166,u+f168-f169,u+f173-f174,u+f181,u+f189-f18b,u+f18d,u+f194,u+f198,u+f19e,u+f1a1-f1a4,u+f1a7-f1a8,u+f1b5-f1b7,u+f1ca,u+f1d0,u+f1d2,u+f1d5-f1d7,u+f1e7,u+f1e9,u+f203,u+f215-f216,u+f231,u+f237,u+f23b-f23d,u+f263-f264,u+f266-f267,u+f26a,u+f27d,u+f281,u+f285,u+f287,u+f289-f28a,u+f297-f298,u+f2a9-f2ae,u+f2b1-f2b2,u+f2c4,u+f2d9-f2da,u+f2dd-f2de}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-f6b769.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-f6b769.ttf) format("truetype");unicode-range:u+f08c,u+f099,u+f09b,u+f0d2,u+f13b,u+f167,u+f16a-f16d,u+f179-f17c,u+f17e,u+f18c,u+f19a-f19b,u+f1a0,u+f1b4,u+f1bc,u+f1be,u+f1e8,u+f1ed,u+f1f0-f1f1,u+f20e,u+f210,u+f213-f214,u+f230,u+f232,u+f23a,u+f26b,u+f270,u+f288,u+f299,u+f29b,u+f2a6,u+f2b0,u+f2c5-f2c6,u+f2e0}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-bbafe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-brands-400-bbafe9.ttf) format("truetype");unicode-range:u+f0d5,u+f0e1,u+f113,u+f13c,u+f15a,u+f16e,u+f170-f172,u+f17d,u+f180,u+f184,u+f1a5-f1a6,u+f1a9-f1aa,u+f1bd,u+f1cb-f1cc,u+f1d1,u+f1d3-f1d4,u+f1ee,u+f1f2-f1f5,u+f202,u+f208-f209,u+f20d,u+f211-f212,u+f23e,u+f24b-f24c,u+f25e,u+f260-f261,u+f265,u+f268-f269,u+f26d-f26e,u+f27c,u+f27e,u+f280,u+f282,u+f284,u+f286,u+f293-f294,u+f296,u+f2a5,u+f2b3-f2b4,u+f2b8,u+f2d5-f2d8}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-d5bbe9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-d5bbe9.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f016-f017,u+f03e,u+f08a,u+f096,u+f09d,u+f0a2,u+f0a6,u+f0c5,u+f0e5,u+f0f7,u+f10c,u+f114,u+f11d,u+f133,u+f14e,u+f186,u+f1c2-f1c3,u+f1d9,u+f1db,u+f1ea,u+f20a,u+f25d,u+f2bc,u+f2c0}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-f064f7.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-f064f7.ttf) format("truetype");unicode-range:u+f014,u+f088,u+f185}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-3eb023.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-3eb023.ttf) format("truetype");unicode-range:u+f01a-f01b,u+f01d,u+f05c,u+f18e,u+f190,u+f192,u+f27b,u+f28c,u+f28e,u+f29c,u+f2be}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-aa90b0.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-aa90b0.ttf) format("truetype");unicode-range:u+f022,u+f2d4}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-cbbfb4.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-cbbfb4.ttf) format("truetype");unicode-range:u+f044}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-9d9a2c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-9d9a2c.ttf) format("truetype");unicode-range:u+f046,u+f147,u+f150-f152,u+f191,u+f196,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-16f2f9.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-16f2f9.ttf) format("truetype");unicode-range:u+f05d,u+f271-f274}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-e41116.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-e41116.ttf) format("truetype");unicode-range:u+f06e,u+f087,u+f097,u+f0e6,u+f0eb,u+f0f8,u+f11c,u+f1c1,u+f1f9,u+f24d,u+f2b5,u+f2d2}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cb49.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cb49.ttf) format("truetype");unicode-range:u+f070,u+f119,u+f2b7}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-25ee0f.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-25ee0f.ttf) format("truetype");unicode-range:u+f094,u+f2c1,u+f2c3}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-910f33.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-910f33.ttf) format("truetype");unicode-range:u+f0a0,u+f0a4-f0a5,u+f0a7,u+f1e3,u+f255-f25b}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-493f48.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-493f48.ttf) format("truetype");unicode-range:u+f0c7,u+f0f6,u+f115,u+f118,u+f11a,u+f1c4-f1c9}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-792d0c.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-792d0c.ttf) format("truetype");unicode-range:u+f1f7}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c238fb.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c238fb.ttf) format("truetype");unicode-range:u+f247-f248,u+f24a,u+f278}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c046b6.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-c046b6.ttf) format("truetype");unicode-range:u+f2ba}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cf62.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-regular-400-b1cf62.ttf) format("truetype");unicode-range:u+f2d0}@font-face{font-family:"FontAwesome";font-display:block;src:url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-v4compatibility.woff2) format("woff2"),url(https://kit-pro.fontawesome.com/releases/v6.1.2/webfonts/pro-fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} diff --git a/resources/flags/ClientAppSettings/2012.json b/resources/flags/ClientAppSettings/2012.json new file mode 100644 index 0000000..f1b6536 --- /dev/null +++ b/resources/flags/ClientAppSettings/2012.json @@ -0,0 +1,4 @@ +{ + "FFlagThereAreNo2012Flags": "True", + "FFlagPleaseAddThemLater": "True" +} \ No newline at end of file diff --git a/resources/flags/ClientAppSettings/2016.json b/resources/flags/ClientAppSettings/2016.json new file mode 100644 index 0000000..b76b13e --- /dev/null +++ b/resources/flags/ClientAppSettings/2016.json @@ -0,0 +1,1141 @@ +{ + "AllowVideoPreRoll": "True", + "FLogAsserts": "0", + "FLogCloseDataModel": "3", + "CaptureQTStudioCountersEnabled": "True", + "CaptureMFCStudioCountersEnabled": "True", + "CaptureCountersIntervalInMinutes": "5", + "FLogServiceVectorResize": "4", + "FLogServiceCreation": "4", + "AxisAdornmentGrabSize": "12", + "FFlagTadahResetTypesetterOnResize": "True", + "FFlagProcessAllPacketsPerStep": "True", + "FFlagUS14116": "True", + "FFlagBlockBlockNarrowPhaseRefactor": "True", + "FFlagEnableRubberBandSelection": "True", + "FFlagQtStudioScreenshotEnabled": "True", + "FFlagFixNoPhysicsGlitchWithGyro": "True", + "FLogFullRenderObjects": "0", + "PublishedProjectsPageHeight": "535", + "PublishedProjectsPageUrl": "/ide/publish", + "StartPageUrl": "/ide/welcome", + "FFlagOpenNewWindowsInDefaultBrowser": "True", + "FFlagOnScreenProfiler": "True", + "FFlagInitializeNewPlace": "True", + "PrizeAssetIDs": "0=110718551=Congratulations! Your success at publishing a place has earned you the Eggcellent Builder hat. You can find this in your inventory on the website. Keep building to find more ROBLOX Studio Eggs!;1=110719580=Congratulations! Your exploration of ROBLOX Studio's models has led you to the Eggstreme Builder hat. You can find this in your inventory on the website. Keep building to find more ROBLOX Studio Eggs!;2=110720049=Congratulations! Your contribution to ROBLOX's content catalog has earned you the Eggsultant Contributor hat. You can find this in your inventory on the website. Keep building to find more ROBLOX Studio Eggs!;3=110790044=Congratulations! Your large experience in scripting has earned you the rare Eggscruciatingly Deviled Scripter hat. You can find this in your inventory on the website. Keep building to find more ROBLOX Studio Eggs!;4=110790072=Congratulations! Your flexibility at finding eggs has led you to the Yolk's on Us hat! You can find this in your inventory on the website. Keep building to find more ROBLOX Studio Eggs!;5=110790103=Congratulations! You've found the Eggsplosion hat! You can find this in your inventory on the website. Keep building to find more ROBLOX Studio Eggs!", + "PrizeAwarderURL": "/ostara/boon", + "MinNumberScriptExecutionsToGetPrize": "500", + "FFlagDebugCrashEnabled": "False", + "FLogHangDetection": "3", + "FFlagCharAnimationStats": "False", + "FFlagRenderOpenGLForcePOTTextures": "True", + "FFlagUseNewCameraZoomPath": "True", + "FFlagQTStudioPublishFailure": "True", + "ExcludeContactWithInteriorTerrainMinusYFace": "True", + "FFlagFixUphillClimb": "True", + "FFlagUseAveragedFloorHeight": "True", + "FFlagScaleExplosionLifetime": "True", + "PublishedProjectsPageWidth": "950", + "FFlagRenderFastClusterEverywhere": "True", + "FLogPlayerShutdownLuaTimeoutSeconds": "1", + "FFlagQtFixToolDragging": "True", + "FFlagSelectPartOnUndoRedo": "True", + "FFlagStatusBarProgress": "True", + "FFlagStudioCheckForUpgrade": "True", + "FFlagStudioInsertModelCounterEnabled": "True", + "FFlagStudioAuthenticationFailureCounterEnabled": "True", + "FFlagRenderCheckTextureContentProvider": "True", + "FFlagRenderLightGridEnabled": "True", + "FFlagStudioLightGridAPIVisible": "True", + "FFlagBetterSleepingJobErrorComputation": "True", + "FLogDXVideoMemory": "4", + "FFlagRenderNoLegacy": "True", + "FFlagStudioLightGridOnForNewPlaces": "True", + "FFlagPhysicsSkipRedundantJoinAll": "True", + "FFlagTerrainOptimizedLoad": "True", + "FFlagTerrainOptimizedStorage": "True", + "FFlagTerrainOptimizedCHS": "True", + "FFlagRenderGLES2": "True", + "FFlagStudioMacAddressValidationEnabled": "True", + "FFlagDoNotPassSunkEventsToPlayerMouse": "True", + "FFlagQtAutoSave": "True", + "FFlagRenderLoopExplicit": "True", + "FFlagStudioUseBinaryFormatForPlay": "True", + "FFlagPhysicsRemoveWorldAssemble_US16512": "True", + "FFlagNativeSafeChatRendering": "True", + "FFlagRenderNewMegaCluster": "True", + "FFlagAutoJumpForTouchDevices": "True", + "FLogOutlineBrightnessMin": "50", + "FLogOutlineBrightnessMax": "160", + "FLogOutlineThickness": "40", + "FFlagDE5511FixEnabled": "True", + "FFlagDE4423Fixed": "True", + "FFlagSymmetricContact": "True", + "FFlagLocalMD5": "True", + "FFlagStudioCookieParsingDisabled": "False", + "FFlagLastWakeTimeSleepingJobError": "True", + "FFlagPhysicsAllowAutoJointsWithSmallParts_DE6056": "True", + "FFlagPhysicsLockGroupDraggerHitPointOntoSurface_DE6174": "True", + "FFlagOutlineControlEnabled": "True", + "FFlagAllowCommentedScriptSigs": "True", + "FFlagDataModelUseBinaryFormatForSave": "True", + "FFlagStudioUseBinaryFormatForSave": "True", + "FFlagDebugAdornableCrash": "True", + "FFlagOverlayDataModelEnabled": "True", + "DFFlagFixInstanceParentDesyncBug": "True", + "FFlagPromoteAssemblyModifications": "False", + "FFlagFontSourceSans": "True", + "DFFlagCreateHumanoidRootNode": "True", + "FFlagRenderNewFonts": "True", + "FFlagStudioCookieDesegregation": "True", + "FFlagResponsiveJump": "True", + "FFlagGoogleAnalyticsTrackingEnabled": "True", + "FFlagNoCollideLadderFilter": "True", + "FFlagFlexibleTipping": "True", + "FFlagUseStrongerBalancer": "True", + "FFlagClampControllerVelocityMag": "True", + "DFFlagUseSaferChatMetadataLoading": "True", + "FFlagSinkActiveGuiObjectMouseEvents": "False", + "FLogLuaBridge": "2", + "DFFlagPromoteAssemblyModifications": "True", + "FFlagDeferredContacts": "True", + "FFlagFRMUse60FPSLockstepTable": "True", + "FFlagFRMAdjustForMultiCore": "True", + "FFlagPhysics60HZ": "True", + "FFlagQtRightClickContextMenu": "True", + "FFlagUseTopmostSettingToBringWindowToFront": "True", + "FFlagNewLightAPI": "True", + "FFlagRenderLightGridShadows": "True", + "FFlagRenderLightGridShadowsSmooth": "True", + "DFFlagSanitizeKeyframeUrl": "True", + "DFFlagDisableGetKeyframeSequence": "False", + "FFlagCreateServerScriptServiceInStudio": "True", + "FFlagCreateServerStorageInStudio": "True", + "FFlagCreateReplicatedStorageInStudio": "True", + "FFlagFilterEmoteChat": "True", + "DFFlagUseCharacterRootforCameraTarget": "True", + "FFlagImageRectEnabled": "True", + "FFlagNewWaterMaterialEnable": "True", + "DFFlagUserHttpAPIEnabled": "True", + "DFIntUserHttpAccessUserId0": "0", + "FFlagUserHttpAPIVisible": "True", + "FFlagCameraChangeHistory": "True", + "FFlagDE4640Fixed": "True", + "FFlagShowStreamingEnabledProp": "True", + "FFlagOptimizedDragger": "True", + "FFlagRenderNewMaterials": "True", + "FFlagRenderAnisotropy": "True", + "FFlagStudioInitializeViewOnPaint": "True", + "DFFlagPartsStreamingEnabled": "True", + "FFlagStudioLuaDebugger": "True", + "FFlagStudioLocalSpaceDragger": "True", + "FFlagGuiRotationEnabled": "True", + "FFlagDataStoreEnabled": "True", + "DFFlagDisableTeleportConfirmation": "True", + "DFFlagAllowTeleportFromServer": "True", + "DFFlagNonBlockingTeleport": "True", + "FFlagD3D9CrashOnError": "False", + "FFlagRibbonBarEnabled": "True", + "SFFlagInfiniteTerrain": "True", + "FFlagStudioScriptBlockAutocomplete": "True", + "FFlagRenderFixAnchoredLag": "True", + "DFFlagAllowAllUsersToUseHttpService": "True", + "GoogleAnalyticsAccountPropertyIDClient": "", + "FFlagSurfaceGuiVisible": "True", + "FFlagStudioIntellesenseEnabled": "True", + "FFlagAsyncPostMachineInfo": "True", + "FFlagModuleScriptsVisible": "True", + "FFlagModelPluginsEnabled": "True", + "FFlagGetUserIdFromPluginEnabled": "True", + "FFlagStudioPluginUIActionEnabled": "True", + "DFFlagRemoveAdornFromBucketInDtor": "True", + "FFlagRapidJSONEnabled": "True", + "DFFlagDE6959Fixed": "True", + "DFFlagScopedMutexOnJSONParser": "True", + "FFlagSupressNavOnTextBoxFocus": "True", + "DFFlagExplicitPostContentType": "True", + "DFFlagAddPlaceIdToAnimationRequests": "True", + "FFlagCreatePlaceEnabled": "True", + "DFFlagClientAdditionalPOSTHeaders": "True", + "FFlagEnableAnimationExport": "True", + "DFFlagAnimationAllowProdUrls": "True", + "FFlagGetUserIDFromPluginEnabled": "True", + "FFlagStudioContextualHelpEnabled": "True", + "FFlagLogServiceEnabled": "True", + "FFlagQtPlaySoloOptimization": "True", + "FFlagStudioBuildGui": "True", + "DFFlagListenForZVectorChanges": "True", + "DFFlagUserInputServiceProcessOnRender": "True", + "FFlagDE7421Fixed": "True", + "FFlagStudioExplorerActionsEnabledInScriptView": "True", + "FFlagHumanoidNetworkOptEnabled": "False", + "DFFlagEnableNPCServerAnimation": "True", + "DFFlagDataStoreUseUForGlobalDataStore": "True", + "DFFlagDataStoreAllowedForEveryone": "True", + "DFFlagBadTypeOnConnectErrorEnabled": "True", + "FFlagStudioRemoveUpdateUIThread": "True", + "FFlagPhysicsSkipUnnecessaryContactCreation": "False", + "FFlagUseNewHumanoidCache": "True", + "FFlagSecureReceiptsBackendEnabled": "True", + "FFlagOrderedDataStoreEnabled": "True", + "FFlagStudioLuaDebuggerGA": "True", + "FFlagNPSSetScriptDocsReadOnly": "True", + "FFlagRDBGHashStringComparison": "True", + "FFlagStudioDebuggerVisitDescendants": "True", + "FFlagDeprecateScriptInfoService": "True", + "FFlagIntellisenseScriptContextDatamodelSearchingEnabled": "True", + "FFlagSecureReceiptsFrontendEnabled": "True", + "DFFlagCreatePlaceEnabledForEveryone": "True", + "FFlagCreatePlaceInPlayerInventoryEnabled": "True", + "DFFlagAddRequestIdToDeveloperProductPurchases": "True", + "DFFlagUseYPCallInsteadOfPCallEnabled": "True", + "FFlagStudioMouseOffsetFixEnabled": "True", + "DFFlagPlaceValidation": "True", + "FFlagReconstructAssetUrl": "False", + "FFlagUseNewSoundEngine": "True", + "FIntMinMillisecondLengthForLongSoundChannel": "5000", + "FFlagStudioHideInsertedServices": "True", + "FFlagStudioAlwaysSetActionEnabledState": "True", + "FFlagRenderNew": "True", + "FIntRenderNewPercentWin": "100", + "FIntRenderNewPercentMac": "100", + "FLogGraphics": "6", + "FFlagStudioInSyncWebKitAuthentication": "False", + "DFFlagDisallowHopperServerScriptReplication": "True", + "FFlagInterpolationFix": "False", + "FFlagHeartbeatAt60Hz": "False", + "DFFlagFixProcessReceiptValueTypes": "True", + "DFFlagPhysicsSkipUnnecessaryContactCreation": "True", + "FFlagStudioLiveCoding": "True", + "FFlagPlayerHumanoidStep60Hz": "True", + "DFFlagCrispFilteringEnabled": "False", + "SFFlagProtocolSynchronization": "True", + "FFlagUserInputServicePipelineStudio": "True", + "FFlagUserInputServicePipelineWindowsClient": "True", + "FFlagUserInputServicePipelineMacClient": "True", + "FFlagStudioKeyboardMouseConfig": "True", + "DFFlagLogServiceEnabled": "True", + "DFFlagLoadAnimationsThroughInsertService": "True", + "FFlagFRMFogEnabled": "True", + "FLogBrowserActivity": "3", + "DFFlagPhysicsPacketAlwaysUseCurrentTime": "True", + "FFlagFixedStudioRotateTool": "True", + "FFlagRibbonBarEnabledGA": "True", + "FFlagRenderSafeChat": "False", + "DFFlagPhysicsAllowSimRadiusToDecreaseToOne": "True", + "DFFlagPhysicsAggressiveSimRadiusReduction": "True", + "DFFlagLuaYieldErrorNoResumeEnabled": "True", + "DFFlagEnableJointCache": "False", + "DFFlagOnCloseTimeoutEnabled": "True", + "FFlagStudioQuickInsertEnabled": "True", + "FFlagStudioPropertiesRespectCollisionToggle": "True", + "FFlagTweenServiceUsesRenderStep": "True", + "FFlagUseNewSoundEngine3dFix": "True", + "FFlagDebugUseDefaultGlobalSettings": "True", + "FFlagStudioMiddleMouseTrackCamera": "False", + "FFlagTurnOffiOSNativeControls": "True", + "DFFlagUseNewHumanoidHealthGui": "True", + "DFFlagLoggingConsoleEnabled": "True", + "DFFlagAllowModuleLoadingFromAssetId": "True", + "FFlagStudioZoomExtentsExplorerFixEnabled": "True", + "FFlagStudioPropertySearchDisabled": "False", + "FFlagLuaDebuggerBreakOnError": "True", + "FFlagRetentionTrackingEnabled": "True", + "FFlagShowAlmostAllItemsInExplorer": "True", + "FFlagStudioFindInAllScriptsEnabled": "True", + "FFlagImprovedNameOcclusion": "True", + "FFlagHumanoidMoveToDefaultValueEnabled": "True", + "FFlagEnableDisplayDistances": "True", + "FFlagUseMinMaxZoomDistance": "True", + "SFFlagAllowPhysicsPacketCompression": "False", + "FFlagStudioOneClickColorPickerEnabled": "True", + "DFFlagHumanoidMoveToDefaultValueEnabled": "True", + "VideoPreRollWaitTimeSeconds": "45", + "FFlagBalancingRateLimit": "True", + "FFlagLadderCheckRate": "True", + "FFlagStateSpecificAutoJump": "True", + "SFFlagOneWaySimRadiusReplication": "True", + "DFFlagApiDictionaryCompression": "True", + "SFFlagPathBasedPartMovement": "True", + "FFlagEnsureInputIsCorrectState": "False", + "DFFlagLuaLoadStringStrictSecurity": "True", + "DFFlagCrossPacketCompression": "True", + "FFlagWorkspaceLoadStringEnabledHidden": "True", + "FFlagStudioPasteAsSiblingEnabled": "True", + "FFlagStudioDuplicateActionEnabled": "True", + "FFlagPreventInterpolationOnCFrameChange": "True", + "FLogNetworkPacketsReceive": "5", + "FFlagPlayPauseFix": "True", + "DFFlagCrashOnNetworkPacketError": "False", + "FFlagHumanoidStateInterfaces": "True", + "FFlagRenderDownloadAssets": "True", + "FFlagBreakOnErrorConfirmationDialog": "True", + "FFlagStudioAnalyticsEnabled": "True", + "FFlagAutoRotateFlag": "True", + "DFFlagUseImprovedLadderClimb": "True", + "FFlagUseCameraOffset": "True", + "FFlagRenderBlobShadows": "True", + "DFFlagWebParserDisableInstances": "False", + "FFlagStudioNewWiki": "True", + "DFFlagLogPacketErrorDetails": "False", + "FFlagLimitHorizontalDragForce": "True", + "FFlagEnableNonleathalExplosions": "True", + "DFFlagCreateSeatWeldOnServer": "True", + "FFlagGraphicsUseRetina": "True", + "FFlagDynamicEnvmapEnabled": "True", + "DFFlagDeferredTouchReplication": "True", + "DFFlagCreatePlayerGuiEarlier": "True", + "DFFlagProjectileOwnershipOptimization": "True", + "DFFlagLoadSourceForCoreScriptsBeforeInserting": "False", + "GoogleAnalyticsLoadStudio": "1", + "DFFlagTaskSchedulerFindJobOpt": "True", + "SFFlagPreventInterpolationOnCFrameChange": "True", + "DFIntNumPhysicsPacketsPerStep": "2", + "DFFlagDataStoreUrlEncodingEnabled": "True", + "FFlagShowWebPlaceNameOnTabWhenOpeningFromWeb": "True", + "DFFlagTrackTimesScriptLoadedFromLinkedSource": "True", + "FFlagToggleDevConsoleThroughChatCommandEnabled": "True", + "FFlagEnableFullMonitorsResolution": "True", + "DFFlagAlwaysUseHumanoidMass": "True", + "DFFlagUseStrongerGroundControl": "True", + "DFFlagCorrectlyReportSpeedOnRunStart": "True", + "FFlagLuaDebuggerImprovedToolTip": "True", + "FFlagLuaDebuggerPopulateFuncName": "True", + "FFlagLuaDebuggerNewCodeFlow": "True", + "DFFlagValidateCharacterAppearanceUrl": "False", + "FFlagStudioQuickAccessCustomization": "True", + "DFFlagTaskSchedulerUpdateJobPriorityOnWake": "True", + "DFFlagTaskSchedulerNotUpdateErrorOnPreStep": "True", + "FFlagWikiSelectionSearch": "True", + "DFIntTaskSchedularBatchErrorCalcFPS": "1200", + "FFlagSuppressNavOnTextBoxFocus": "False", + "FFlagEnabledMouseIconStack": "True", + "DFFlagFastClone": "True", + "DFFlagLuaNoTailCalls": "True", + "DFFlagFilterStreamingProps": "True", + "DFFlagNetworkOwnerOptEnabled": "True", + "DFFlagPathfindingEnabled": "True", + "FFlagEnableiOSSettingsLeave": "True", + "FFlagUseFollowCamera": "True", + "FFlagDefaultToFollowCameraOnTouch": "True", + "DFFlagAllowMoveToInMouseLookMove": "True", + "DFFlagAllowHumanoidDecalTransparency": "True", + "DFFlagSupportCsrfHeaders": "True", + "DFFlagConfigureInsertServiceFromSettings": "True", + "FFlagPathfindingClientComputeEnabled": "True", + "DFFlagLuaResumeSupportsCeeCalls": "True", + "DFFlagPhysicsSenderErrorCalcOpt": "True", + "DFFlagClearPlayerReceivingServerLogsOnLeave": "True", + "DFFlagConsoleCodeExecutionEnabled": "True", + "DFFlagCSGDictionaryReplication": "True", + "FFlagCSGToolsEnabled": "True", + "FFlagCSGDictionaryServiceEnabled": "True", + "FFlagCSGMeshRenderEnable": "True", + "FFlagCSGChangeHistory": "True", + "FFlagCSGMeshColorEnable": "True", + "FFlagCSGMeshColorToolsEnabled": "True", + "FFlagCSGScaleEnabled": "True", + "FFlagCylinderUsesConstantTessellation": "True", + "FFlagStudioDraggersScaleFixes": "True", + "FFlagCSGDecalsEnabled": "True", + "FFlagCSGMigrateChildData": "True", + "SFFlagBinaryStringReplicationFix": "True", + "FFlagHummanoidScaleEnable": "True", + "FFlagStudioDataModelIsStudioFix": "True", + "DFFlagWebParserEnforceASCIIEnabled": "True", + "DFFlagScriptDefaultSourceIsEmpty": "True", + "FFlagFixCaptureFocusInput": "True", + "FFlagFireUserInputServiceEventsAfterDMEvents": "True", + "FFlagVectorErrorOnNilArithmetic": "True", + "FFlagFontSmoothScalling": "True", + "DFFlagUseImageColor": "True", + "FFlagStopNoPhysicsStrafe": "True", + "DFFlagDebugLogNetworkErrorToDB": "False", + "FFlagLowQMaterialsEnable": "True", + "FFLagEnableFullMonitorsResolution": "True", + "FFlagStudioChildProcessCleanEnabled": "True", + "DFFlagAllowFullModelsWhenLoadingModules": "True", + "DFFlagRealWinInetHttpCacheBypassingEnabled": "True", + "FFlagNewUniverseInfoEndpointEnabled": "True", + "FFlagGameExplorerEnabled": "True", + "FFlagStudioUseBinaryFormatForModelPublish": "True", + "FFlagGraphicsFeatureLvlStatsEnable": "True", + "FFlagStudioEnableWebKitPlugins": "True", + "DFFlagSendHumanoidTouchedSignal": "True", + "DFFlagReduceHumanoidBounce": "True", + "DFFlagUseNewSounds": "True", + "FFlagFixHumanoidRootPartCollision": "True", + "FFlagEnableAndroidMenuLeave": "True", + "FFlagOnlyProcessGestureEventsWhenSunk": "True", + "FFlagAdServiceReportImpressions": "True", + "FFlagStudioUseExtendedHTTPTimeout": "True", + "FFlagStudioSeparateActionByActivationMethod": "False", + "DFFlagPhysicsSenderThrottleBasedOnBufferHealth": "True", + "FFlagCSGExportFailure": "False", + "DFFlagGetGroupInfoEnabled": "True", + "DFFlagGetGroupRelationsEnabled": "True", + "FStringPlaceFilter_StateBasedAnimationReplication": "True;175953385;174810327;181219650", + "SFFlagTopRepContSync": "True", + "FFlagStudioUseBinaryFormatForModelSave": "True", + "EnableFullMonitorsResolution": "True", + "DFFlagRenderSteppedServerExceptionEnabled": "True", + "FFlagUseWindowSizeFromGameSettings": "True", + "DFFlagCheckStudioApiAccess": "True", + "FFlagGameExplorerPublishEnabled": "True", + "DFFlagKeepXmlIdsBetweenLoads": "True", + "DFFlagReadXmlCDataEnabled": "True", + "FFlagStudioRemoveToolSounds": "True", + "FFlagStudioOneStudGridDefault": "True", + "FFlagStudioPartSymmetricByDefault": "True", + "FFlagStudioIncreasedBaseplateSize": "True", + "FFlagSkipSilentAudioOps": "True", + "SFFlagGuid64Bit": "False", + "FIntValidateLauncherPercent": "100", + "FFlagCSGDataLossFixEnabled": "True", + "DFStringRobloxAnalyticsURL": "http://ecsv2.roblox.com/", + "DFFlagRobloxAnalyticsTrackingEnabled": "True", + "FFlagStudioOpenLastSaved": "False", + "FFlagStudioShowTutorialsByDefault": "True", + "FFlagStudioForceToolboxSize": "True", + "FFlagStudioExplorerDisabledByDefault": "True", + "FFlagStudioDefaultWidgetSizeChangesEnabled": "True", + "FFlagStudioUseScriptAnalyzer": "True", + "FFlagNoClimbPeople": "True", + "DFFlagAnimationFormatAssetId": "True", + "FFlagGetCorrectScreenResolutionFaster": "True", + "DFFlagFixTouchEndedReporting": "False", + "FFlagStudioTeleportPlaySolo": "True", + "FFlagCSGRemoveScriptScaleRestriction": "True", + "FFlagStudioDE7928FixEnabled": "True", + "FFlagDE8768FixEnabled": "True", + "FFlagStudioDE9108FixEnabled": "True", + "FFlagStudioPlaySoloMapDebuggerData": "True", + "FFlagLuaDebuggerCloneDebugger": "True", + "FFlagRenderLightgridInPerformEnable": "True", + "SFFlagStateBasedAnimationReplication": "True", + "FFlagVolumeControlInGameEnabled": "True", + "FFlagGameConfigurerUseStatsService": "True", + "FFlagStudioUseHttpAuthentication": "True", + "FFlagDetectTemplatesWhenSettingUpGameExplorerEnabled": "True", + "FFlagEntityNameEditingEnabled": "True", + "FFlagNewCreatePlaceFlowEnabled": "True", + "FFlagFakePlayableDevices": "False", + "FFlagMutePreRollSoundService": "True", + "DFFlagBodyMoverParentingFix": "True", + "DFFlagBroadcastServerOnAllInterfaces": "True", + "HttpUseCurlPercentageWinClient": "100", + "HttpUseCurlPercentageMacClient": "100", + "HttpUseCurlPercentageWinStudio": "100", + "HttpUseCurlPercentageMacStudio": "100", + "SFFlagReplicatedFirstEnabled": "True", + "DFFlagCSGShrinkForMargin": "True", + "FFlagPhysicsBulletConnectorPointRecalc": "True", + "DFIntBulletContactBreakThresholdPercent": "200", + "DFIntBulletContactBreakOrthogonalThresholdPercent": "200", + "FFlagPhysicsBulletConnectorMatching": "True", + "FFlagPhysicsBulletUseProximityMatching": "False", + "FFlagPhysicsCSGUsesBullet": "True", + "DFFlagCSGPhysicsDeserializeRefactor": "True", + "FFlagWedgeEnableDecalOnTop": "True", + "FFlagFrustumTestGUI": "True", + "FFlagFeatureLvlsDX11BeforeDeviceCreate": "True", + "FFlagStudioPasteSyncEnabled": "True", + "FFlagResetMouseCursorOnToolUnequip": "True", + "DFFlagUpdateCameraTarget": "True", + "DFFlagFixGhostClimb": "True", + "DFFlagUseStarterPlayer": "True", + "FFlagStudioFindCrashFixEnabled": "True", + "FFlagFixPartOffset": "True", + "DFFlagLuaCloseUpvalues": "True", + "FFlagRenderTextureCompositorUseBudgetForSize": "True", + "FFlagAllowOutOfBoxAssets": "False", + "FFlagRemoveTintingWhenActiveIsFalseOnImageButton": "True", + "FFlagStudioModuleScriptDefaultContents": "True", + "FFlagStudioHomeKeyChangeEnabled": "True", + "FFlagStudioOpenStartPageForLogin": "True", + "FFlagStudioNativeKeepSavedChanges": "True", + "FFlagSerializeCurrentlyOpenPlaceWhenPublishingGame": "True", + "FFlagGameNameLabelEnabled": "True", + "FFlagStudioValidateBootstrapper": "True", + "FFlagRakNetReadFast": "True", + "DFFlagPhysicsSenderSleepingUpdate": "True", + "FFlagUseShortShingles": "True", + "FFlagKKTChecks": "False", + "DFFlagUseApiProxyThrottling": "True", + "DFFlagValidateSetCharacter": "True", + "DFFlagUpdateHumanoidSimBodyInComputeForce": "True", + "DFFlagNetworkPendingItemsPreserveTimestamp": "True", + "FFlagStudioCSGRotationalFix": "True", + "FFlagNewLoadingScreen": "True", + "FFlagScrollingFrameOverridesButtonsOnTouch": "True", + "DFFlagStreamLargeAudioFiles": "True", + "DFFlagNewLuaChatScript": "True", + "DFFlagLoopedDefaultHumanoidAnimation": "True", + "FFlagSoundsRespectDelayedStop": "False", + "DFFlagCSGPhysicsErrorCatchingEnabled": "True", + "DFFlagFireStoppedAnimSignal": "True", + "FFlagStudioFixToolboxReload": "True", + "FFlagCSGDecalsV2": "True", + "FFlagLocalOptimizer": "True", + "DFFlagClearFailedUrlsWhenClearingCacheEnabled": "True", + "DFFlagSupportNamedAssetsShortcutUrl": "True", + "DFFlagUseW3CURIParser": "True", + "DFFlagContentProviderHttpCaching": "True", + "FFlagNoWallClimb": "False", + "FFlagSmoothMouseLock": "False", + "DFFlagCSGPhysicsNanPrevention": "True", + "FFlagStudioDE9818FixEnabled": "True", + "FFlagGameExplorerImagesEnabled": "True", + "FFlagStudioInsertOrientationFix": "True", + "FFlagStudioTabOrderingEnabled": "True", + "FFlagFramerateDeviationDroppedReport": "True", + "FFlagModuleScriptsPerVmEnabled": "False", + "FFlagGameExplorerImagesInsertEnabled": "True", + "FFlagTexturePropertyWidgetEnabled": "True", + "FFlagReloadAllImagesOnDataReload": "True", + "FFlagModuleScriptsPerVmEnabledFix2": "True", + "DFFlagFixBufferZoneContainsCheck": "False", + "FFlagStudioPlaceAssetFromToolbox": "True", + "FFlagChannelMasterMuting": "True", + "FFlagStudioUseDelayedSyntaxCheck": "True", + "FFlagStudioCommandLineSaveEditText": "True", + "FFlagStudioAddHelpInContextMenu": "True", + "DFIntHttpCacheCleanMinFilesRequired": "10000", + "DFIntHttpCacheCleanMaxFilesToKeep": "7500", + "FFlagCSGVoxelizer": "True", + "DFFlagCheckApiAccessInTransactionProcessing": "True", + "FFlagBindPurchaseValidateCallbackInMarketplaceService": "True", + "FFlagSetDataModelUniverseIdAfterPublishing": "True", + "FFlagOpenScriptWorksOnModulesEnabled": "True", + "FFlagStudioRibbonBarNewLayout": "True", + "FFlagStudioRibbonBarLayoutFixes": "True", + "FFlagStudioPlaceOnlineIndicator": "True", + "FFlagRenderWangTiles": "True", + "FFlagDisableBadUrl": "True", + "FFlagPrimalSolverLogBarrierIP": "True", + "FFlagDualSolverSimplex": "True", + "FFlagPrimalSolverSimplex": "True", + "FIntNumSmoothingPasses": "3", + "FFlagVerifyConnection": "True", + "FIntRegLambda": "1400", + "FFlagScriptAnalyzerPlaceholder": "True", + "FFlagStudioCSGAssets": "True", + "FFlagCSGStripPublishedData": "True", + "DFFlagRaycastReturnSurfaceNormal": "True", + "FFlagMoveGameExplorerActionsIntoContextMenu": "True", + "FFlagStudioAdvanceCookieExpirationBugFixEnabled": "True", + "FFlagNewBackpackScript": "True", + "FFlagNewPlayerListScript": "True", + "FFlagGameNameAtTopOfExplorer": "True", + "FFlagStudioActActionsAsTools": "True", + "FFlagStudioInsertAtMouseClick": "True", + "FFlagStopLoadingStockSounds": "True", + "DFFlagFixTimePositionReplication": "True", + "DFFlagHttpReportStatistics": "True", + "DFFlagEnableChatTestingInStudio": "True", + "DFIntHttpSendStatsEveryXSeconds": "300", + "FLogStepAnimatedJoints": "5", + "DFFlagLuaDisconnectFailingSlots": "False", + "DFFlagEnsureSoundPosIsUpdated": "True", + "DFFlagLoadStarterGearEarlier": "False", + "DFFlagBlockUsersInLuaChat": "True", + "FFlagRibbonPartInsertNotAllowedInModel": "True", + "DFFlagUsePlayerScripts": "True", + "DFFlagUserAccessUserSettings": "True", + "DFFlagUseLuaCameraAndControl": "True", + "DFFlagUseLuaPCInput": "True", + "DFFlagFixLuaMoveDirection": "True", + "DFFlagUseDecalLocalTransparencyModifier": "True", + "DFFlagUseFolder": "True", + "DFFlagUsePreferredSpawnInPlaySoloTeleport": "True", + "DFFlagFilterAddSelectionToSameDataModel": "False", + "FFlagGameExplorerAutofillImageNameFromFileName": "True", + "FFlagGameExplorerBulkImageUpload": "True", + "FFlagStudioAllowAudioSettings": "True", + "DFFlagUsePlayerInGroupLuaChat": "True", + "FFlagStudioDecalPasteFix": "True", + "FFlagStudioCtrlTabDocSwitchEnabled": "True", + "DFIntDraggerMaxMovePercent": "60", + "FFlagUseUniverseGetInfoCallToDetermineUniverseAccess": "True", + "FFlagMaxFriendsCount": "True", + "DFIntPercentApiRequestsRecordGoogleAnalytics": "0", + "FFlagSelectSpinlock": "True", + "FFlagFastZlibPath": "True", + "DFFlagWriteXmlCDataEnabled": "True", + "DFFlagUseSpawnPointOrientation": "True", + "DFFlagUsePlayerSpawnPoint": "True", + "DFFlagCSGPhysicsRecalculateBadContactsInConnectors": "True", + "FFlagStudioPartAlignmentChangeEnabled": "True", + "FFlagStudioToolBoxModelDragFix": "True", + "DFFlagOrder66": "False", + "FFlagCloudIconFixEnabled": "True", + "DFFlagFixHealthReplication": "True", + "DFFlagReplicateAnimationSpeed": "True", + "FFlagSurfaceLightEnabled": "True", + "FFlagLuaFollowers": "True", + "FFlagNewNotificationsScript": "True", + "FFlagStudioSendMouseIdleToPluginMouse": "True", + "DFFlagPhysicsOptimizeAssemblyHistory": "True", + "DFFlagPhysicsOptimizeBallBallContact": "True", + "DFFlagUseNewBubbleSkin": "True", + "DFFlagUse9FrameBackgroundTransparency": "True", + "DFFlagCheckForHeadHit": "False", + "DFFlagUseHttpsForAllCalls": "True", + "DFFlagLoadCoreModules": "True", + "FFlagStudioRecentSavesEnabled": "True", + "FFlagStudioToolBoxInsertUseRayTrace": "True", + "FFlagInterpolationUseWightedDelay": "True", + "FFlagUseInGameTopBar": "True", + "FFlagNewPurchaseScript": "True", + "FFlagStudioEnableGamepadSupport": "True", + "FFlagStudioRemoveDuplicateParts": "True", + "FFlagStudioLaunchDecalToolAfterDrag": "True", + "DFFlagHumanoidFloorPVUpdateSignal": "True", + "DFFlagHumanoidFloorDetectTeleport": "True", + "DFFlagHumanoidFloorForceBufferZone": "False", + "DFFlagHumanoidFloorManualDeltaUpdateManagment": "True", + "DFFlagHumanoidFloorManualFrictionLimitation": "True", + "FStringPlaceFilter_InterpolationTimingFix": "True;208770506", + "DFFlagUpdateHumanoidNameAndHealth": "True", + "DFFlagEnableHumanoidDisplayDistances": "True", + "FFlagFixTouchInputEventStates": "False", + "DFFlagInterpolationTimingFix": "True", + "FIntRenderGBufferMinQLvl": "16", + "FFlagResizeGuiOnStep": "True", + "FFlagDontFireFakeMouseEventsOnUIS": "True", + "FFlagCameraUseOwnViewport": "True", + "FFlagGameExplorerMoveImagesUnderAssetsGroup": "True", + "FFlagIgnoreBlankDataOnStore": "True", + "DFFlagNetworkFilterAllowToolWelds": "True", + "DFIntHttpInfluxHundredthsPercentage": "10", + "DFStringHttpInfluxURL": "http://ec2-52-91-55-191.compute-1.amazonaws.com:8086", + "DFStringHttpInfluxDatabase": "prod", + "DFStringHttpInfluxUser": "rob", + "DFStringHttpInfluxPassword": "playfaster", + "FFlagStudioSpawnLocationsDefaultValues": "True", + "FFlagStudioDE11536FixEnabled": "True", + "FFlagStudioRibbonGroupResizeFixEnabled": "True", + "FFlagGradientStep": "True", + "FFlagUseNewContentProvider": "False", + "SFFlagEquipToolOnClient": "True", + "FFlagStartWindowMaximizedDefault": "True", + "FFlagUseNewKeyboardHandling": "True", + "FFlagCameraZoomNoModifier": "True", + "DFFlagRemoteValidateSubscribersError": "True", + "FFlagNewMenuSettingsScript": "True", + "DFFlagHttpCurlSanitizeUrl": "True", + "DFFlagRemoveDataModelDependenceInWaitForChild": "True", + "FFlagFilterAddSelectionToSameDataModel": "True", + "DFFlagUseCanManageApiToDetermineConsoleAccess": "True", + "DFIntMoveInGameChatToTopPlaceId": "1", + "FFlagStudioProgressIndicatorForInsertEnabled": "True", + "FFlagTerrainLazyGrid": "True", + "FFlagHintsRenderInUserGuiRect": "True", + "DFFlagCustomEmitterInstanceEnabled": "True", + "FFlagCustomEmitterRenderEnabled": "True", + "FFlagCustomEmitterLuaTypesEnabled": "True", + "FFlagCallSetFocusFromCorrectThread": "True", + "FFlagFastRevert": "True", + "FFlagSleepBeforeSpinlock": "True", + "FFlagSparseCheckFastFail": "True", + "FFlagStudioSmoothTerrainPlugin": "True", + "FFlagStudioLoadPluginsLate": "True", + "FFlagStudioInsertIntoStarterPack": "True", + "FFlagStudioIgnoreSSLErrors": "True", + "DFFlagFixJointReparentingDE11763": "True", + "DFFlagPhysicsInvalidateContactCache": "True", + "FFlagLuaMathNoise": "True", + "FFlagArcHandlesBidirectional": "True", + "FFlagChangeHistoryFixPendingChanges": "True", + "DFFlagWorkspaceSkipTerrainRaycastForSurfaceGui": "True", + "FFlagStudioBatchItemMapAddChild": "True", + "FFlagRenderCameraFocusFix": "True", + "DFFlagReplicatorWorkspaceProperties": "True", + "FFlagDirectX11Enable": "True", + "FFlagDirectXEnable": "True", + "FFlagCheckDegenerateCases": "True", + "DFFlagUseServerCoreScripts": "True", + "DFFlagCorrectFloorNormal": "True", + "FFlagNewBadgeServiceUrlEnabled": "True", + "FFlagBubbleChatbarDocksAtTop": "True", + "FFlagSmoothTerrainClient": "True", + "FFlagLuaUseBuiltinEqForEnum": "True", + "FFlagPlaceLauncherThreadCheckDmClosed": "True", + "DFFlagAppendTrackerIdToTeleportUrl": "True", + "FFlagPlayerMouseRespectGuiOffset": "True", + "DFFlagReportElevatedPhysicsFPSToGA": "True", + "DFFlagPreventReturnOfElevatedPhysicsFPS": "True", + "FFlagStudioIgnoreMouseMoveOnIdle": "True", + "FFlagStudioDraggerFixes": "True", + "FLogUseLuaMemoryPool": "0", + "FFlagCSGNewTriangulate": "True", + "DFFlagLuaFixResumeWaiting": "True", + "FFlagFRMInStudio": "True", + "DFFlagFixLadderClimbSpeed": "True", + "DFFlagNoWalkAnimWeld": "False", + "DFFlagImprovedKick": "True", + "FFlagRenderFixLightGridDirty": "True", + "FFlagLoadLinkedScriptsOnDataModelLoad": "True", + "FFlagFixMeshOffset": "True", + "FIntLaunchInfluxHundredthsPercentage": "0", + "DFIntJoinInfluxHundredthsPercentage": "10", + "FFlagSmoothTerrain": "True", + "FFlagNewVehicleHud": "True", + "DFFlagHumanoidStandOnSeatDestroyed": "True", + "DFFlagGuiBase3dReplicateColor3WithBrickColor": "True", + "FFlagTaskSchedulerCyclicExecutiveStudio": "True", + "DFIntElevatedPhysicsFPSReportThresholdTenths": "585", + "DFIntExpireMarketPlaceServiceCacheSeconds": "60", + "DFFlagEnableMarketPlaceServiceCaching": "True", + "DFFlagUseNewAnalyticsApi": "True", + "DFFlagSmoothTerrainDebounceUpdates": "True", + "FFlagStudioAuthenticationCleanup": "True", + "FFlagRenderFixGBufferLOD": "True", + "FFlagStudioDraggerCrashFixEnabled": "True", + "FFlagDraggerCrashFixEnabled": "True", + "DFFlagEnableRapidJSONParser": "True", + "DFFlagPushLuaWorldRayOriginToNearClipPlane": "True", + "FFlagLoadTimeModificationTestFlag": "True", + "DFFlagPhysicsFastSmoothTerrainUpdate": "True", + "DFFlagSmoothTerrainPhysicsExpandPrimitiveOptimal": "True", + "DFFlagFixBytesOnJoinReporting": "True", + "FFlagRenderGBufferEverywhere": "False", + "DFFlagSmoothTerrainPhysicsRayAabbExact": "True", + "DFIntSmoothTerrainPhysicsRayAabbSlop": "1", + "DFIntMaxClusterKBPerSecond": "300", + "FStringPlaceFilter_UseNewAnalyticsApi": "True;192800", + "FLogLuaAssert": "0", + "FFlagSmoothTerrainCountCellVolume": "True", + "DFFlagSmoothTerrainWorldToCellUseDiagonals": "True", + "DFFlagFireSelectionChangeOncePerChange": "True", + "FIntLuaAssertCrash": "0", + "FFlagAlternateFontKerning": "True", + "FFlagRenderFixCameraFocus": "False", + "DFFlagCSGPhysicsSphereRotationIdentity": "True", + "DFFlagCSGPhysicsRefreshContactsManually": "True", + "FFlagStudioUndoEnabledForEdit": "True", + "DFIntLuaChatFloodCheckMessages": "7", + "DFIntLuaChatFloodCheckInterval": "15", + "FFlagLuaChatFiltering": "True", + "FFlagMobileToggleChatVisibleIcon": "True", + "FFlagGlowEnabled": "True", + "FFlagStudioDE9132FixEnabled": "True", + "DFFlagHttpCurlHandle301": "True", + "FFlagSearchToolboxByDataModelSearchString": "True", + "FFlagClientABTestingEnabled": "False", + "FFlagStudioSmoothTerrainForNewPlaces": "True", + "FFlagUsePGSSolver": "True", + "FFlagSimplifyKeyboardInputPath": "False", + "FFlagNewInGameDevConsole": "True", + "DFFlagUseNewFullscreenLogic": "True", + "DFFlagGetUserIdEnabled": "True", + "DFFlagGetUserNameEnabled": "True", + "DFFlagEnableAnimationInformationAccess": "True", + "DFFlagEnableAnimationTrackExtendedAPI": "True", + "FFlagRequestServerStatsV2Enabled": "True", + "FFlagPhysicsPreventGroupDraggerPlacementToMinus400_DE6267": "True", + "FFlagSpecificUserdataTypeErrors": "True", + "DFFlagScrollingFrameDraggingFix": "True", + "FFlagAutodetectCPU": "True", + "DFFlagSetRenderedFrameOnClumpChanged": "True", + "DFFlagDisableTimeoutDuringJoin": "True", + "DFFlagDesiredAltitudeDefaultInf": "True", + "DFFlagRCCDE13316CrashFix": "True", + "DFFlagUseStarterPlayerGA": "True", + "FFlagScrollingFrameMouseUpFix": "True", + "DFFlagDebrisServiceUseDestroy": "True", + "DFFlagAccessUserFeatureSetting": "True", + "DFFlagAllowBindActivate": "True", + "FFlagEnableControllerGuiSelection": "True", + "FFlagUseNewSoftwareMouseRender": "True", + "DFFlagDoNotHoldTagItemsForInitialData": "True", + "FFlagAltSpinlock": "True", + "FFlagSpinlock": "True", + "FFlagGraphicsGLReduceLatency": "True", + "DFFlagMovingHumananoidWakesFloor": "True", + "DFFlagSetNetworkOwnerAPIEnabled": "True", + "DFFlagSetNetworkOwnerAPIEnabledV2": "True", + "DFFlagGetFriendsEnabled": "True", + "DFFlagGetFriendsOnlineEnabled": "True", + "DFFlagUseNewTextBoxLogic": "True", + "FFlagOnScreenProfilerGPU": "True", + "FFlagConfigurableLineThickness": "True", + "DFFlagSpawnPointEnableProperty": "True", + "DFFlagConfigurableFallenPartDestroyHeight": "True", + "DFFlagMiddleMouseButtonEvent": "True", + "DFFlagEnablePreloadAsync": "True", + "DFFlagFoldersInGUIs": "True", + "DFFlagUserUseLuaVehicleController": "True", + "DFIntAndroidInfluxHundredthsPercentage": "0", + "FStringPlaceFilter_SetNetworkOwnerAPIEnabled": "True;13822889;257857728", + "FStringPlaceFilter_SetNetworkOwnerAPIEnabledV2": "True;13822889;257857728", + "DFFlagNoOwnershipLogicOnKernelJoint": "True", + "DFFlagEnableGetPlayingAnimationTracks": "True", + "FFlagCyclicExecutivePriorityJobs": "True", + "DFIntMaxMissedWorldStepsRemembered": "16", + "FFlagStudioMimeDataContainsInstancePath": "False", + "DFIntMacInfluxHundredthsPercentage": "0", + "DFIntiOSInfluxHundredthsPercentage": "100", + "FFlagStudioLockServiceParents": "True", + "DFFlagFirePlayerAddedAndPlayerRemovingOnClient": "True", + "DFFlagRecursiveWakeForBodyMovers": "True", + "DFFlagEnableHumanoidSetStateEnabled": "True", + "DFFlagSoundEndedEnabled": "True", + "DFFlagUseIntersectingOthersForSpawnEnabled": "True", + "DFFlagMoveToDontAlignToGrid": "True", + "DFFlagIsBestFriendsWithReturnFriendsWith": "True", + "DFFlagPlayerOwnsAssetFalseForInvalidUsers": "True", + "DFFlagIsUrlCheckAssetStringLength": "True", + "DFFlagEnableGoodbyeDialog": "True", + "DFFlagEnableReverseAnimations": "True", + "DFFlagEnableAnimationSetTimePosition": "True", + "DFFlagEnableMobileAutoJumpFlag": "True", + "DFFlagHttpDelaySendInfluxStats": "True", + "DFFlagDisableRequestMarker": "True", + "DFFlagDisableCharacterRequest": "True", + "FFlagStudioCollapsibleTutorials": "True", + "FStringStudioTutorialsUrl": "http://wiki.roblox.com/index.php?title=Studio_Tutorials_Test&studiomode=true", + "FStringStudioTutorialsTOCUrl": "http://wiki.roblox.com/index.php?title=Studio_Tutorials_Landing&studiomode=true", + "FFlagSandboxHash": "True", + "FFlagDE14316CrashFix": "True", + "FFlagDE14317CrashFix": "True", + "DFFlagSetNetworkOwnerCanSetCheck": "True", + "DFFlagLiveColorUpdatesCanceling": "True", + "DFFlagLuaGcPerVm": "True", + "FFlagGraphicsGLDisableDiscard": "True", + "FFlagStudioDeviceEmulationTouchInputFix": "True", + "FFlagTaskSchedulerCyclicExecutive": "False", + "DFFlagMakeWebPendingFriendRequests": "True", + "DFFlagGetLastestAssetVersionEnabled": "False", + "FFlagHideDeprecatedEnums": "True", + "FFlagSubmitEditedColor3WhenFocusLost": "True", + "DFFlagFixScriptableCameraRoll": "True", + "DFFlagSeparateBulletNarrowPhaseAndMidStepUpdates": "True", + "DFFlagUsePGSSolverSpringConstantScale": "True", + "DFFlagToolRequiresHandleProperty": "True", + "FFlagPlayerScriptsNotArchivable": "True", + "DFFlagClearAllChildrenUseDestroy": "True", + "DFFlagMaxPlayersEnabled": "True", + "DFFlagPreferredPlayersEnabled": "True", + "DFFlagLocalHumanoidSoundsEnabled": "True", + "DFFlagIncreaseSoundPositionClampLimit": "True", + "DFFlagNameOcculsionIgnoreTransparent": "True", + "DFFlagReconstructAssetUrlNew": "False", + "DFFlagAdjustFloorForce": "True", + "DFFlagFixAnimationPhaseInitialization": "True", + "FFlagLuaChatPhoneFontSize": "True", + "DFFlagUseAssetTypeHeader": "True", + "FStringPlaceFilter_ReservedServersEnabled": "True;107715348", + "FFlagCSGUnionCatchUnknownExceptions": "False", + "FIntGamePerfMonitorPercentage": "10", + "FFlagSoundTypeCheck": "True", + "DFFlagIncreaseScrollWheelMultiplyTime": "True", + "FFlagMacRemoveUserInputJob": "True", + "FFlagStudioNewFonts": "True", + "DFFlagApiCapitalizationChanges": "True", + "FFlagParticleCullFix": "True", + "DFFlagVideoCaptureTeleportFix": "False", + "DFFlagCoreGuiCustomizationApi": "True", + "DFFlagCustomTeleportLoadingScreen": "True", + "DFFlagCharacterAppearanceLoadedEnabled": "True", + "DFFlagVIPServerOwnerIdEnabled": "True", + "DFFlagEnableParticleVelocityInheritance": "True", + "DFFlagEnableParticleEmissionDirection": "True", + "DFFlagFixParticleDistribution": "True", + "DFFlagEnableParticleNewBoundingBox": "True", + "DFFlagEnableParticlePartLock": "True", + "DFFlagEnableParticleBurst": "True", + "DFFlagNoRunSteepSlope": "True", + "DFFlagHumanoidJumpPower": "True", + "FFlagControllerMenu": "True", + "FFlagFlyCamOnRenderStep": "True", + "DFFlagFullscreenEnabledWhileRecording": "True", + "DFFlagPreProcessTextBoxEvents": "True", + "DFFlagAllowHideHudShortcut": "False", + "DFFlagFixBallInsideBlockCollision": "True", + "FFlagPGSSolverBodyCacheLeakFix": "True", + "FFlagFixCrashAtShutdown": "True", + "DFFlagEquipClonedToolFix": "True", + "FFlagGamepadCursorChanges": "True", + "DFFlagCreatePlayerGuiLocal": "False", + "DFFlagDontUseInsertServiceOnAnimLoad": "True", + "DFFlagCyclicExecutiveFixNonCyclicJobRun": "True", + "DFFlagPhysicsFPSTimerFix": "True", + "FFlagCyclicExecutiveRenderJobRunsFirst": "True", + "FFlagElseAutoIndentFix": "True", + "FFlagPhysicsCylinders": "True", + "DFFlagPhysicsUseNewBulletContact": "True", + "FFlagReadCoordinateFrameFast": "False", + "DFFlagRayHitMaterial": "True", + "DFFlagPromptPurchaseOnGuestHandledInCoreScript": "True", + "DFFlagNonEmptyPcallError": "True", + "DFFlagDisplayTextBoxTextWhileTypingMobile": "False", + "DFFlagOverrideScollingDisabledWhenRecalulateNeeded": "True", + "DFFlagFixScrollingOffSurfaceGUIs": "True", + "DFFlagTextScaleDontWrapInWords": "True", + "DFFlagListenPositionEnabled": "True", + "DFFlagGetCharacterAppearanceEnabled": "True", + "DFFlagBackTabInputInStudio": "True", + "DFFlagTrackLastDownGUI": "True", + "DFFlagBulletFixCacheReuse": "True", + "DFFlagFastFilterHumanoidParts": "False", + "DFFlagProcessAcceleratorsBeforeGUINaviagtion": "True", + "DFFlagImageFailedToLoadContext": "True", + "DFFlagDontReorderScreenGuisWhenDescendantRemoving": "True", + "DFFlagSoundFailedToLoadContext": "True", + "DFFlagAnimationFailedToLoadContext": "True", + "DFFlagElasticEasingUseTwoPi": "True", + "SFFlagNetworkUseServerScope": "True", + "DFFlagHttpZeroLatencyCaching": "True", + "DFFlagPasteWithCapsLockOn": "True", + "DFFlagScriptExecutionContextApi": "True", + "FFlagAnimationIdIsContentPropertyItem": "True", + "DFFlagGetFocusedTextBoxEnabled": "True", + "DFFlagTextBoxIsFocusedEnabled": "True", + "DFFlagHttpCurlDomainTrimmingWithBaseURL": "False", + "DFFlagLoadFileUseRegularHttp": "True", + "DFFlagReplicatorCheckBadRebinding": "True", + "FFlagFastClusterThrottleUpdateWaiting": "True", + "DFFlagDeserializePacketThreadEnabled": "True", + "FFlagFontSizeUseLargest": "True", + "DFFlagRejectHashesInLinkedSource": "True", + "FFlagUpdatePrimitiveStateForceSleep": "True", + "FFlagPhysicsUseKDTreeForCSG": "True", + "DFFlagCSGLeftoverDataFix": "True", + "DFFlagGetGroupsAsyncEnabled": "True", + "FFlagStudioTutorialSeeAll": "True", + "DFFlagLimitScrollWheelMaxToHalfWindowSize": "True", + "FFlagGameExplorerCopyPath": "True", + "DFFlagFixRotatedHorizontalScrollBar": "True", + "DFFlagFixAnchoredSeatingPosition": "True", + "FFlagFixSlice9Scale": "True", + "DFFlagFullscreenRefocusingFix": "True", + "DFFlagEnableClimbingDirection": "True", + "FFlagPGSGlueJoint": "True", + "FFlagTweenCallbacksDuringRenderStep": "True", + "FFlagFRMFixCullFlicker": "True", + "DFFlagDisableProcessPacketsJobReschedule": "True", + "FFlagCSGVoxelizerPrecompute": "False", + "FFlagLazyRenderingCoordinateFrame": "True", + "FFlagPGSSteppingMotorFix": "True", + "FFlagGameExplorerCopyId": "True", + "DFFlagLockViolationScriptCrash": "False", + "DFFlagLockViolationInstanceCrash": "False", + "FFlagSpheresAllowedCustom": "True", + "FFlagSmootherVehicleSeatControlSystem": "True", + "DFFlagHumanoidCookieRecursive": "True", + "FFlagStudioRecordToolboxInsert": "True", + "FFlagRwxFailReport": "True", + "FIntStudioInsertDeletionCheckTimeMS": "30000", + "DFFlagClampRocketThrustOnPGS": "True", + "DFFlagPGSWakePrimitivesWithBodyMoverPropertyChanges": "True", + "FFlagPGSUsesConstraintBasedBodyMovers": "True", + "FFlagUseNewSubdomainsInCoreScripts": "True", + "DFFlagEnableShowStatsLua": "True", + "FFlagSmoothTerrainPacked": "True", + "FFlagGraphicsGL3": "False", + "DFFlagUrlReconstructToAssetGame": "False", + "FFlagPGSApplyImpulsesAtMidpoints": "True", + "FFlagModifyDefaultMaterialProperties": "True", + "FIntPhysicalPropFriction_SMOOTH_PLASTIC_MATERIAL": "200", + "FIntPhysicalPropFriction_PLASTIC_MATERIAL": "300", + "FIntPhysicalPropFriction_NEON_MATERIAL": "True", + "FIntPhysicalPropFriction_SNOW_MATERIAL": "300", + "FIntPhysicalPropFriction_ALUMINUM_MATERIAL": "400", + "FIntPhysicalPropFriction_BRICK_MATERIAL": "800", + "FIntPhysicalPropFriction_CONCRETE_MATERIAL": "700", + "FIntPhysicalPropFriction_DIAMONDPLATE_MATERIAL": "350", + "FIntPhysicalPropFriction_SANDSTONE_MATERIAL": "500", + "FIntPhysicalPropFriction_SAND_MATERIAL": "500", + "FIntPhysicalPropFWeight_ICE_MATERIAL": "3000", + "FIntPhysicalPropFWeight_BRICK_MATERIAL": "300", + "FIntPhysicalPropFWeight_CONCRETE_MATERIAL": "300", + "FIntPhysicalPropFWeight_SANDSTONE_MATERIAL": "5000", + "FIntPhysicalPropFWeight_BASALT_MATERIAL": "300", + "FIntPhysicalPropFWeight_SAND_MATERIAL": "5000", + "FIntPhysicalPropElasticity_SAND_MATERIAL": "50", + "FIntPhysicalPropElasticity_SNOW_MATERIAL": "30", + "FIntPhysicalPropElasticity_MUD_MATERIAL": "70", + "FIntPhysicalPropElasticity_GROUND_MATERIAL": "100", + "FIntPhysicalPropElasticity_MARBLE_MATERIAL": "170", + "FIntPhysicalPropElasticity_BRICK_MATERIAL": "150", + "FIntPhysicalPropElasticity_PEBBLE_MATERIAL": "170", + "FIntPhysicalPropElasticity_COBBLESTONE_MATERIAL": "170", + "FIntPhysicalPropElasticity_ROCK_MATERIAL": "170", + "FIntPhysicalPropElasticity_SANDSTONE_MATERIAL": "150", + "FIntPhysicalPropElasticity_BASALT_MATERIAL": "150", + "FIntPhysicalPropElasticity_CRACKED_LAVA_MATERIAL": "150", + "FIntPhysicalPropElasticity_FABRIC_MATERIAL": "50", + "FIntPhysicalPropElasticity_WOOD_MATERIAL": "200", + "FIntPhysicalPropElasticity_WOODPLANKS_MATERIAL": "200", + "FIntPhysicalPropElasticity_ICE_MATERIAL": "150", + "FIntPhysicalPropElasticity_GLACIER_MATERIAL": "150", + "FIntPhysicalPropElasticity_RUST_MATERIAL": "200", + "FIntPhysicalPropElasticity_DIAMONDPLATE_MATERIAL": "250", + "FIntPhysicalPropElasticity_ALUMINUM_MATERIAL": "250", + "FIntPhysicalPropElasticity_METAL_MATERIAL": "250", + "FIntPhysicalPropElasticity_GRASS_MATERIAL": "100", + "DFFlagFixSeatingWhileSitting": "True", + "FFlagPGSSolverDefaultOnNewPlaces": "True", + "FFlagPGSVariablePenetrationMargin": "False", + "FFlagStudioEnableGameAnimationsTab": "True", + "FIntPGSPentrationMarginMax": "50000", + "FFlagStudioHideMouseCoursorOnCommand": "True", + "SFFlagNewPhysicalPropertiesForcedOnAll": "False", + "SFFlagMaterialPropertiesNewIsDefault": "True", + "DFFlagMaterialPropertiesEnabled": "True", + "FFlagWaterParams": "True", + "FFlagSpatialHashMoreRoots": "True", + "FFlagSkipAdornIfWorldIsNull": "True", + "DFStringWorkspaceMessageLink": "http://devforum.roblox.com/t/new-physical-properties-becoming-default-next-week/21946", + "DFStringWorkspaceMessageText": "New Physical Properties will be enabled by DEFAULT on next Wednesday (Feb 10) 9:00am PST. Please click here to read more.", + "DFIntStudioWorkspaceNotificationLevel": "0", + "FFlagLuaBasedBubbleChat": "True", + "DFFlagNetworkOwnershipRuleReplicates": "True", + "FFlagCSGPhysicsLevelOfDetailEnabled": "True", + "DFFlagSmoothTerrainWriteVoxelsOccupancyFix": "True", + "DFFlagCloudEditByPassCheckForServer": "True", + "DFFlagDraggerUsesNewPartOnDuplicate": "True", + "DFFlagRestoreTransparencyOnToolChange": "False", + "FFlagEnableLuaFollowers": "False", + "DFFlagUserServerFollowers": "True", + "FFlagNetworkReplicateTerrainProperties": "True", + "FFlagAllowInsertFreeModels": "False", + "FFlagInsertUnderFolder": "True", + "DFFlagPGSWakeOtherAssemblyForJoints": "True", + "FFlagStudioPropertySliderEnabled": "True", + "DFFlagSetNetworkOwnerFixAnchoring": "True", + "FFlagFixBulletGJKOptimization": "True", + "FFlagOSXUseSDL": "False", + "DFFlagPhysicalPropMassCalcOnJoin": "False", + "DFFlagBrickColorParseNonDeprecatedMatchEnabled": "True", + "FFlagWindowsUseSDL": "False", + "FFlagPhysicsOptimizeSendClumpChanged": "True", + "DFFlagHumanoidFeetIsPlastic": "True", + "DFFlagUseTerrainCustomPhysicalProperties": "True", + "DFFlagFormFactorDeprecated": "True", + "FFlagEnableMSAA": "False", + "FFlagPGSVariablePenetrationMarginFix": "True", + "FFlagStudioPropertyNameBarDisabled": "True", + "DFIntDataStoreMaxValueSize": "262144", + "DFFlagFilteringEnabledDialogFix": "True", + "DFFlagFixShapeChangeBug": "True", + "FFlagScriptAnalyzerFixLocalScope": "True", + "FFlagRenderVRBBGUI": "True", + "FFlagRenderVR": "True", + "DFFlagNetworkFixJoinDataItemOrder": "True", + "FFlagUseUserListMenu": "True", + "FFlagStudioImproveModelDragFidelity": "True", + "FFlagStudioOrthonormalizeSafeRotate": "True", + "FFlagMacInferredCrashReporting": "True", + "FFlagWindowsInferredCrashReporting": "True", + "FFlagCloudEditDoNotLoadCoreScripts": "True", + "FFlagStudioEmbeddedFindDialogEnabled": "False", + "FFlagUserAllCamerasInLua": "False", + "DFFlagMacInferredCrashReporting": "True", + "DFFlagWindowsInferredCrashReporting": "True", + "FFlagUseNewPromptEndHandling": "True", + "FFlagPhysPropConstructFromMaterial": "True", + "FFlagStudioToolboxModelDragToCastPoint": "True", + "FFlagStudioPushTreeWidgetUpdatesToMainThread": "True", + "DFFlagFixYieldThrottling": "True", + "FFlagCheckSleepOptimization": "True", + "DFFlagContactManagerOptimizedQueryExtents": "True", + "FFlagEnableSetCoreTopbarEnabled": "True", + "FFlagUseBuildGenericGameUrl": "True", + "DFFlagFixFallenPartsNotDeleted": "True", + "DFFlagTrackPhysicalPropertiesGA": "True", + "DFFlagSetNetworkOwnerFixAnchoring2": "True", + "FFlagUseSimpleRapidJson": "True", + "DFFlagTurnOffFakeEventsForCAS": "True", + "DFFlagTurnOffFakeEventsForInputEvents": "True", + "FFlagCancelPendingTextureLoads": "False", + "DFFlagUseR15Character": "True", + "DFFlagEnableHipHeight": "True", + "DFFlagCachedPoseInitialized": "True", + "DFFlagFixJumpGracePeriod": "True", + "FFlagFilterSinglePass": "True", + "DFFlagOrthonormalizeJointCoords": "True", + "DFFlagPhysicsSenderUseOwnerTimestamp": "False", + "DFFlagCacheModelExtents": "True", + "FFlagStudioVariableIntellesense": "True", + "DFFlagNamesOccludedAsDefault": "True", + "FFlagUserUseNewControlScript": "True", + "FFlagTextFieldUTF8": "True", + "FFlagUseDynamicTypesetterUTF8": "True", + "FStringPlaceFilter_UseNewPersistenceSubdomain": "True;359173292", + "FStringPlaceFilter_UseNewDataStoreLogging": "True;359173292", + "FStringPlaceFilter_InsertServiceLoadModelErrorDoNotCreateEmpty": "True;359173292", + "FStringPlaceFilter_InsertServiceLoadModelErrorNoLuaExceptionReturnNull": "True;359173292", + "DFFlagUseNewPersistenceSubdomain": "True", + "DFFlagUseNewDataStoreLogging": "True", + "FFlagPlaceLauncherUsePOST": "False", + "FFlagDraggerInfiniteRecursionFix": "True", + "FFlagStudioIntellisenseAllowUnderscore": "True", + "FFlagStudioUpdateSAResultsInUIThread": "True", + "FFlagCloudEditRemoveScriptLockOnDocClose": "True", + "FFlagBillboardGuiVR": "True", + "FFlagHumanoidRenderBillboard": "True", + "DFFlagCloudEditDisablePlayerDestroy": "True", + "FLogVR": "6", + "FFlagDebugSSAOForce": "True", + "FFlagStudioRemoveDebuggerResumeLock": "True", + "FFlagPhysicsAnalyzerEnabled": "True", + "FFlagAnalyzerGroupUIEnabled": "True", + "DFFlagVariableHeartbeat": "True", + "DFFlagScreenShotDuplicationFix": "True", + "FFlagCSGDelayParentingOperationToEnd": "True", + "FFlagStudioTreeWidgetCheckDeletingFlagWhenDoingUpdates": "True", + "DFFlagUseComSiftUpdatedWebChatFilterParamsAndHeader": "False", + "DFFlagConstructModerationFilterTextParamsAndHeadersUseLegacyFilterParams": "False", + "FFlagMinMaxDistanceEnabled": "True", + "FFlagRollOffModeEnabled": "True", + "DFFlagGetLocalTeleportData": "True", + "FFlagUseNewXboxLoginFlow": "True", + "FStringPlaceFilter_MaterialPropertiesNewIsDefault": "False;276583453;29812337;264431831;189707;204990346;30869879;166456825;287335491;180714690;248409235;255280267;289685010;183384830;314906000;323111227", + "DFFlagFixSlowLadderClimb": "True", + "DFFlagHumanoidCheckForNegatives": "True", + "DFFlagFixMatrixToAxisAngle": "True", + "DFFlagMaskWeightCleared": "True", + "DFFlagUseStarterPlayerCharacterScripts": "True", + "DFFlagUseStarterPlayerHumanoid": "True", + "DFFlagUseStarterPlayerCharacter": "True", + "DFFlagCacheableContentProviderBlockingCallSetImmediateEnabled": "True", + "FFlagStudioIntellisenseShowGlobals": "True", + "FFlagTeamCreateCheckInvalidUniverse": "True", + "FFlagStudioIntellisenseKeywordsEnabled": "True", + "FFlagStudioIntellisenseVariableMustStartWithSameChar": "True", + "FFlagStudioIntellisenseExactMatchesBypassAutocomplete": "True", + "DFFlagAccessoriesAndAttachments": "True", + "FFlagTeamCreateOptimizeRemoteSelection": "True", + "FFlagReportInGameAssetSales": "True", + "FFlagFilterDoublePass": "False", + "DFFlagRaiseSendPriority": "True", + "FFlagStudioTreeWidgetNoAncestorTreeCrashFixEnabled": "True", + "FFlagStudioTreeWidgetHasChildrenWriteLock": "True", + "FFlagStudioDoNotUpdateToolbarsOnClickEnabled": "True", + "FFlagStudioInfrequentJointRecreationEnabled": "True", + "FFlagStudioAllowMassDecalInsert": "True", + "FFlagStudioDelaySAResultsEnabled": "False", + "FFlagUsePreferredSoundDevice": "True", + "FFlagRenderLowLatencyLoop": "False", + "DFFlagLocalScriptSpawnPartAlwaysSetOwner": "False", + "DFFlagCloudEditSupportImmediatePublish": "True", + "DFFlagCloseStatesBeforeChildRemoval": "True", + "FFlagStudioRenamePlayer": "True", + "FFlagStudioTreeWidgetUnintendedInstanceVisibilityFix": "True", + "FFlagFixSurfaceGuiGamepadNav": "True", + "DFFlagEnableAdColony": "False", + "FFlagEnableAdServiceVideoAds": "False", + "DFFlagInfluxDb09Enabled": "True", + "DFFlagTeleportSignalConnectOnServiceProvider": "False", + "DFFlagScriptContextGuardAgainstCStackOverflow": "True", + "DFFlagExplicitlyAssignDefaultPropVal": "True", + "DFFlagCloudEditCheckClientPresent": "True", + "FFlagFixPhysicalPropertiesComponentSet": "True", + "DFFlagMaterialPropertiesDivideByZeroWeights": "True", + "FFlagUrlReconstructToAssetGameSecure": "False", + "FFlagRemoveUnusedPhysicsSenders": "True", + "FFlagRemoveInterpolationReciever": "True", + "DFFlagActivatePGSMechanicalJoints": "False" +} diff --git a/resources/img/animation.png b/resources/img/animation.png new file mode 100644 index 0000000..33e73aa Binary files /dev/null and b/resources/img/animation.png differ diff --git a/resources/img/audio.png b/resources/img/audio.png new file mode 100644 index 0000000..37f8b37 Binary files /dev/null and b/resources/img/audio.png differ diff --git a/resources/img/script.png b/resources/img/script.png new file mode 100644 index 0000000..77e00f1 Binary files /dev/null and b/resources/img/script.png differ diff --git a/resources/img/tshirt-template.png b/resources/img/tshirt-template.png new file mode 100644 index 0000000..81177c2 Binary files /dev/null and b/resources/img/tshirt-template.png differ diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100644 index 0000000..121da5b --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1,2 @@ +require("./modules") +require("./tadah") diff --git a/resources/js/modules/alpine.js b/resources/js/modules/alpine.js new file mode 100644 index 0000000..3d5a4e8 --- /dev/null +++ b/resources/js/modules/alpine.js @@ -0,0 +1,7 @@ +import Alpine from "alpinejs" +import Clipboard from "@ryangjchandler/alpine-clipboard" + +Alpine.plugin(Clipboard) + +window.Alpine = Alpine +Alpine.start() diff --git a/resources/js/modules/axios.js b/resources/js/modules/axios.js new file mode 100644 index 0000000..9ec131d --- /dev/null +++ b/resources/js/modules/axios.js @@ -0,0 +1,4 @@ +window.axios = require("axios") +window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest" +window.axios.defaults.headers.post["X-CSRF-TOKEN"] = document.querySelector("meta[name='csrf-token']").getAttribute("content") +window.axios.defaults.baseURL = window.tadah.baseURL diff --git a/resources/js/modules/bootstrap.js b/resources/js/modules/bootstrap.js new file mode 100644 index 0000000..3fd0fe3 --- /dev/null +++ b/resources/js/modules/bootstrap.js @@ -0,0 +1,7 @@ +import * as bootstrap from "bootstrap" +window.bootstrap = bootstrap + +var tooltips = [].slice.call(document.querySelectorAll("[data-bs-toggle='tooltip']")) +tooltips.map((element) => { + return new bootstrap.Tooltip(element) +}) diff --git a/resources/js/modules/echo.js b/resources/js/modules/echo.js new file mode 100644 index 0000000..8e46414 --- /dev/null +++ b/resources/js/modules/echo.js @@ -0,0 +1,18 @@ +/** + * Echo exposes an expressive API for subscribing to channels and listening + * for events that are broadcast by Laravel. Echo and event broadcasting + * allows your team to easily build robust real-time web applications. + */ + +import Echo from "laravel-echo" + +window.Pusher = require("pusher-js") + +window.Echo = new Echo({ + broadcaster: "pusher", + key: process.env.MIX_PUSHER_APP_KEY, + wsHost: process.env.MIX_PUSHER_CLIENT_HOST, + wsPort: process.env.MIX_PUSHER_PORT, + wssPort: process.env.MIX_PUSHER_PORT, + forceTLS: process.env.MIX_PUSHER_SCHEME === 'https' +}) diff --git a/resources/js/modules/index.js b/resources/js/modules/index.js new file mode 100644 index 0000000..5f7f3e4 --- /dev/null +++ b/resources/js/modules/index.js @@ -0,0 +1,5 @@ +require("./alpine") +require("./axios") +require("./bootstrap") +require("./echo") +require("./jquery") diff --git a/resources/js/modules/jquery.js b/resources/js/modules/jquery.js new file mode 100644 index 0000000..e43072c --- /dev/null +++ b/resources/js/modules/jquery.js @@ -0,0 +1,7 @@ +window.$ = require("jquery") + +$.fn.hasAttr = function (name) { + return this.attr(name) !== undefined +} + +require("jquery.waitforimages") diff --git a/resources/js/tadah/account/disabledAccount.js b/resources/js/tadah/account/disabledAccount.js new file mode 100644 index 0000000..290a4dd --- /dev/null +++ b/resources/js/tadah/account/disabledAccount.js @@ -0,0 +1,9 @@ +if (tadah.route == "account.disabled") { + $("#agreed").on("change", function () { + if ($(this).is(":checked")) { + $("#reactivate").removeClass("disabled") + } else { + $("#reactivate").addClass("disabled") + } + }) +} diff --git a/resources/js/tadah/account/index.js b/resources/js/tadah/account/index.js new file mode 100644 index 0000000..af92dab --- /dev/null +++ b/resources/js/tadah/account/index.js @@ -0,0 +1,3 @@ +require("./sessionManagement") +require("./view") +require("./disabledAccount") diff --git a/resources/js/tadah/account/sessionManagement.js b/resources/js/tadah/account/sessionManagement.js new file mode 100644 index 0000000..3c06200 --- /dev/null +++ b/resources/js/tadah/account/sessionManagement.js @@ -0,0 +1,21 @@ +if ($("#sessions").length) { + $("#sessions").find("[data-tadah-toggle='sign-out']").each(function () { + $(this).on("click", () => { + $("#sessions").addClass("blurred") + + axios.post("/my/revoke-session", { + "key": $(this).attr("data-tadah-key") + }).then((data) => { + let response = data.data + + if (response.success) { + $(this).closest("#session").remove() + } else { + alert("Unknown error occurred. Please try again.") + } + }).catch(() => { + alert("Unknown error occurred. Please try again.") + }) + }) + }) +} diff --git a/resources/js/tadah/account/view.js b/resources/js/tadah/account/view.js new file mode 100644 index 0000000..8ddaf91 --- /dev/null +++ b/resources/js/tadah/account/view.js @@ -0,0 +1,14 @@ +if ($("#usernameChangeModal").length) { + let modal = new bootstrap.Modal($("#usernameChangeModal")) + + $("#usernameChange").on("click", function () { + $(this).trigger("blur") + modal.show() + }) +} + +if ($("#emailChange").length) { + $("#emailChange").on("click", () => { + window.location.href = tadah.url("/my/update-email") + }) +} diff --git a/resources/js/tadah/admin/ban.js b/resources/js/tadah/admin/ban.js new file mode 100644 index 0000000..e190ef5 --- /dev/null +++ b/resources/js/tadah/admin/ban.js @@ -0,0 +1,87 @@ +import { Datepicker } from 'vanillajs-datepicker' +var showdown = require('showdown') + +if (tadah.route == "admin.ban") { + $("#duration_preset").on("change", function() { + if ($(this).val() == 6) { + $("#datepicker").removeClass("d-none") + $("#datepicker").find("input").attr("required", "") + } else { + $("#datepicker").addClass("d-none") + $("#datepicker").find("input").removeAttr("required", "") + } + }) + + new Datepicker($("#datepicker").find("input")[0], { + buttonClass: 'btn', + autohide: true, + defaultViewDate: new Date() + }) + + $("#is_appealable").on("change", function () { + if (!$(this).is(":checked")) { + let hey = confirm("Are you sure you want to indicate this ban is unappealable?\n\nOnly do this if there is no chance that the user may get unbanned.") + if (!hey) { + $(this).prop("checked", true) + } + } + }) + + function hook() { + let modal = new bootstrap.Modal($("#banDetailsModal")) + let content = $("#banDetailsModal").find("#content") + let loading = $("#banDetailsModal").find("#loading") + + $("[data-tadah-ban-id]").each(function () { + $(this).on("click", async () => { + if ($(content).css("display") != "none") { + $(content).css("display", "none") + } + + $(loading).removeAttr("style") + + modal.show() + + axios.post("/admin/ban/information", { + "id": $(this).attr("data-tadah-ban-id") + }).then((data) => { + let response = data.data + + $(content).find("#moderator_note").find("code").text(response.ban.moderator_note) + $(content).find("#internal_reason").find("code").text(response.ban.internal_reason) + $(content).find("#is_appealable").find("span").html(response.ban.is_appealable ? 'Yes' : 'No') + + if (!response.ban.has_been_pardoned && !$(content).find("#pardon-reason").hasClass("d-none")) { + $(content).find("#pardon_reason").addClass("d-none") + } else { + $(content).find("#pardon_reason").find("code").text(response.ban.pardon_internal_reason) + } + + if (response.ban.offensive_item === null && !$(content).find("#offensive_item").hasClass("d-none")) { + $(content).find("#offensive_item").addClass("d-none") + } else { + $(content).find("#offensive_item").find("div").html("") + + let converter = new showdown.Converter() + $(content).find("#offensive_item").find("div").html(converter.makeHtml(response.ban.offensive_item)) + } + + setTimeout(() => { + $(loading).fadeOut(150, 'swing', () => { + $(content).fadeIn(150, 'swing') + }) + }, 300) + }).catch(() => { + alert("Unknown error occurred. Please try again.") + + modal.hide() + }) + }) + }) + } + + window.addEventListener("admin-hook-details", hook) + if ($("#banDetailsModal").length) { + hook() + } +} diff --git a/resources/js/tadah/admin/index.js b/resources/js/tadah/admin/index.js new file mode 100644 index 0000000..8ebb3e7 --- /dev/null +++ b/resources/js/tadah/admin/index.js @@ -0,0 +1,12 @@ +require("./ban") + +import { Datepicker } from 'vanillajs-datepicker' + +if ($("#datepicker").length) { + new Datepicker($("#datepicker").find("input")[0], { + buttonClass: 'btn', + autohide: true, + defaultViewDate: new Date() + }) + +} diff --git a/resources/js/tadah/auth/heartbeat.js b/resources/js/tadah/auth/heartbeat.js new file mode 100644 index 0000000..e362f79 --- /dev/null +++ b/resources/js/tadah/auth/heartbeat.js @@ -0,0 +1,7 @@ +if (tadah.session && tadah.session.heartbeat) { + axios.get("/heartbeat") + + setInterval(() => { + axios.get("/heartbeat") + }, 30 * 1000) +} diff --git a/resources/js/tadah/auth/index.js b/resources/js/tadah/auth/index.js new file mode 100644 index 0000000..23bfac3 --- /dev/null +++ b/resources/js/tadah/auth/index.js @@ -0,0 +1 @@ +require("./heartbeat") diff --git a/resources/js/tadah/gameServer/index.js b/resources/js/tadah/gameServer/index.js new file mode 100644 index 0000000..00cdd55 --- /dev/null +++ b/resources/js/tadah/gameServer/index.js @@ -0,0 +1 @@ +require("./view") diff --git a/resources/js/tadah/gameServer/view.js b/resources/js/tadah/gameServer/view.js new file mode 100644 index 0000000..345bfe8 --- /dev/null +++ b/resources/js/tadah/gameServer/view.js @@ -0,0 +1,124 @@ +const xss = require("xss") + +function appendToLog(data) { + let line = $("", { class: "arbiter-line" }) + let html = "" + + html += '[' + xss(data.timestamp) + '] ' + html += '[' + xss(data.severity.event) + '] ' + + if (!data.blur) { + html += xss(data.output) + } else { + let output = xss(data.output) + output = output.replaceAll(xss(data.blur), '' + xss(data.blur) + '') + + html += output + } + + $(line).html(html) + $(".arbiter-output").find("#content").append($(line)) +} + +if (tadah.route == "admin.game-server.view") { + if (!tadah.data.isSetUp) { + Echo.private(`game-servers.${tadah.data.uuid}`) + .listen('GameServer\\StateChange', () => { + window.location.reload() + }) + } else { + if (tadah.data.state == 0) { + axios.post(`/admin/game-server/${tadah.data.uuid}/logs`, { + 'key': 'console' + }).then((data) => { + for (let i = 0; i < data.data.output.length; i++) { + appendToLog(data.data.output[i]) + } + + $(".spinner-border").addClass("d-none") + $(".arbiter-output").removeClass("offline-output") + $(".arbiter-output").addClass("blinking") + $(".arbiter-output").find("img").addClass("d-none") + $("#timestamp").removeClass("d-none") + $(".arbiter-output").find("#content").removeClass("d-none") + }) + } + Echo.private(`game-servers.${tadah.data.uuid}`) + .listen('GameServer\\ConsoleOutput', (data) => { + appendToLog(data) + }) + .listen('GameServer\\StateChange', (data) => { + // Look at this code daaaaaawg :sob: + + switch (data.state) { + case 0: + $("#status").attr("class", "d-flex align-items-center text-success") + $("#status").find("span").text("Online") + $("#running-thumbnail-jobs").removeClass("d-none") + $("#running-thumbnail-jobs").find("#amount").text("0 running thumbnail job(s)") + $("#running-place-jobs").removeClass("d-none") + $("#running-place-jobs").find("#amount").text("0 running place job(s)") + + if (!$(".arbiter-output").hasClass("blinking")) { + $(".arbiter-output").removeClass("offline-output") + $(".arbiter-output").addClass("blinking") + $(".arbiter-output").find("img").addClass("d-none") + $("#timestamp").removeClass("d-none") + $(".arbiter-output").find("#content").removeClass("d-none") + } + + if ($("#cpu-usage").hasClass("d-none")) { + /* + $("#cpu-usage").removeClass("d-none") + $("#cpu-usage").parent().find("i").addClass("d-none") + $("#ram-usage").removeClass("d-none") + $("#ram-usage").parent().find("i").addClass("d-none") + $("#network-usage").removeClass("d-none") + $("#network-usage").parent().find("i").addClass("d-none") + */ + $("#grafana").removeClass("d-none") + } + + if ($("#shutdown").hasAttr("disabled")) $("#shutdown").removeAttr("disabled") + if ($("#sleep").hasAttr("disabled")) $("#sleep").removeAttr("disabled") + + break + case 1: + $("#status").attr("class", "d-flex align-items-center text-muted") + $("#status").find("span").text("Offline") + + if ($(".arbiter-output").hasClass("blinking")) { + $(".arbiter-output").addClass("offline-output") + $(".arbiter-output").removeClass("blinking") + $(".arbiter-output").find("img").removeClass("d-none") + $("#timestamp").addClass("d-none") + $(".arbiter-output").find("#content").html("") + $(".arbiter-output").find("#content").addClass("d-none") + } + + if (!$("#cpu-usage").hasClass("d-none")) { + /* + $("#cpu-usage").addClass("d-none") + $("#cpu-usage").parent().find("i").removeClass("d-none") + $("#ram-usage").addClass("d-none") + $("#ram-usage").parent().find("i").removeClass("d-none") + $("#network-usage").addClass("d-none") + $("#network-usage").parent().find("i").removeClass("d-none") + */ + $("#grafana").addClass("d-none") + } + + $("#running-thumbnail-jobs").addClass("d-none") + $("#running-place-jobs").addClass("d-none") + + if (!$("#shutdown").hasAttr("disabled")) $("#shutdown").attr("disabled", "") + if (!$("#sleep").hasAttr("disabled")) $("#sleep").attr("disabled", "") + + break + } + + $("#friendly_name").text(data.friendly_name) + $("#utc_offset").text("UTC" + data.utc_offset.slice(0, -3)) + }) + } +} diff --git a/resources/js/tadah/helpers.js b/resources/js/tadah/helpers.js new file mode 100644 index 0000000..8111727 --- /dev/null +++ b/resources/js/tadah/helpers.js @@ -0,0 +1,35 @@ +window.addEventListener("alert", (event) => { + alert(event.detail) +}) + +window.addEventListener("success", (event) => { + let element = $("#container-success") + $(element).find("span").html(event.detail) + + let clone = $(element).clone().removeAttr("id").appendTo($(element).parent()) + $(clone).removeClass("d-none") + + setTimeout(() => { + $(clone).fadeOut(1000) + }, 3500) +}) + +window.addEventListener("error", (event) => { + let element = $("#container-error") + $(element).find("span").html(event.detail) + + let clone = $(element).clone().removeAttr("id").appendTo($(element).parent()) + $(clone).removeClass("d-none") + + setTimeout(() => { + $(clone).fadeOut(1000) + }, 3500) +}) + +tadah.url = (uri) => { + return `${tadah.baseURL}${uri}` +} + +window.addEventListener("reload", () => { + window.location.reload() +}) diff --git a/resources/js/tadah/index.js b/resources/js/tadah/index.js new file mode 100644 index 0000000..c5e2d5a --- /dev/null +++ b/resources/js/tadah/index.js @@ -0,0 +1,7 @@ +require("./account") +require("./auth") +require("./admin") +require("./register") +require("./styles") +require("./helpers") +require("./gameServer") diff --git a/resources/js/tadah/register.js b/resources/js/tadah/register.js new file mode 100644 index 0000000..7941b78 --- /dev/null +++ b/resources/js/tadah/register.js @@ -0,0 +1,191 @@ +let participle = [ + "Accelerating", + "Aggregating", + "Allocating", + "Aquiring", + "Automating", + "Backtracing", + "Bloxxing", + "Bootstraping", + "Calibrating", + "Correlating", + "De-noobing", + "De-ionizing", + "Deriving", + "Energizing", + "Filtering", + "Generating", + "Indexing", + "Loading", + "Noobing", + "Optimizing", + "Oxidizing", + "Queueing", + "Parsing", + "Processing", + "Rasterizing", + "Reading", + "Registering", + "Re-routing", + "Resolving", + "Sampling", + "Updating", + "Writing" +] + +let modifier = [ + "Blox", + "Count Zero", + "Cylon", + "Data", + "Ectoplasm", + "Encryption", + "Event", + "Farnsworth", + "Bebop", + "Flux Capacitor", + "Fusion", + "Game", + "Gibson", + "Host", + "Mainframe", + "Metaverse", + "Nerf Herder", + "Neutron", + "Noob", + "Photon", + "Profile", + "Script", + "Skynet", + "TARDIS", + "Virtual" +] + +let subject = [ + "Analogs", + "Blocks", + "Cannon", + "Channels", + "Core", + "Database", + "Dimensions", + "Directives", + "Engine", + "Files", + "Gear", + "Index", + "Layer", + "Matrix", + "Paradox", + "Parameters", + "Parsecs", + "Pipeline", + "Players", + "Ports", + "Protocols", + "Reactors", + "Sphere", + "Spooler", + "Stream", + "Switches", + "Table", + "Targets", + "Throttle", + "Tokens", + "Torpedoes", + "Tubes" +] + +function madStatus(lowercase = false) { + let result = participle[Math.floor(Math.random() * (participle.length))] + " " + + modifier[Math.floor(Math.random() * (modifier.length))] + " " + + subject[Math.floor(Math.random() * (subject.length))] + "..." + + if (lowercase) { + result = result.toLowerCase() + } + + return result +} + +if ($("[data-tadah-magic='register']").length) { + let form = $("[data-tadah-magic='register']") + let loading = $("[data-tadah-magic='register-noob']") + let main = $("[data-tadah-magic='register-main']") + let validated = false + let registering = false + + function beginStatus() { + setInterval(() => { + $("[data-tadah-magic='state']").find("#text").text(madStatus(true)) + }, 2500) + } + + function fatal(message) { + if (!registering) { + return + } + + $(main).find(".grecaptcha-badge").css("display", "") + $(loading).fadeOut(600, 'swing', () => { + alert(message) + $(loading).removeClass("add-kebab") + $(main).removeClass("remove-kebab") + + registering = false + }) + } + + window.registerCallback = () => { + if (!validated) { + return + } + + registering = true + + beginStatus() + + let wireForm = livewire.find($(form).attr("wire:id")) + wireForm.set("captcha", grecaptcha.getResponse()) + wireForm.call("register") + + $(loading).find("#register-name").text($("#username").val()) + $(main).find(".grecaptcha-badge").css("display", "none") + $(main).addClass("remove-kebab") + $(loading).addClass("add-kebab").fadeIn(600, 'swing', () => { + $(loading).find("#lie").fadeIn(200) + }) + } + + window.addEventListener("validated", (event) => { + validated = event.detail.toString() == "true" ? true : false + + if (!registering) { + if (validated && $("#register-button").hasAttr("disabled")) { + $("#register-button").removeAttr("disabled") + } else if (!validated && !$("#register-button").hasAttr("disabled")) { + $("#register-button").attr("disabled", "") + } + } + }) + + window.addEventListener("fatal", (event) => { + fatal(event.detail) + }) + + window.addEventListener("register-complete", () => { + $("#noob").attr("src", tadah.url("/img/noobs/rockinHARD.png")) + $("[data-tadah-magic='state']").addClass("d-none") + $("[data-tadah-magic='completed']").removeClass("d-none") + + setTimeout(() => { + window.location.href = tadah.url("/my/dashboard") + }, 2500) // 2.5 seconds + }) + + $(document).ready(() => { + setTimeout(() => { + $("#register-button").attr("disabled", "") + }, 200) + }) +} diff --git a/resources/js/tadah/styles.js b/resources/js/tadah/styles.js new file mode 100644 index 0000000..714d834 --- /dev/null +++ b/resources/js/tadah/styles.js @@ -0,0 +1,17 @@ +// fills in the caret +$("[data-tadah-magic='language-dropdown']").each(function () { + $(this)[0].addEventListener("shown.bs.dropdown", () => { + $(this).find(".fa-regular.fa-caret-down").removeClass("fa-regular").addClass("fa-solid") + }) + + $(this)[0].addEventListener("hidden.bs.dropdown", () => { + $(this).find(".fa-solid.fa-caret-down").removeClass("fa-solid").addClass("fa-regular") + }) +}) + +// For forms that don't have buttons as the submit button, but rather an +$(".tadah-link-submit").each(function() { + $(this).on("click", () => { + $(this).parent().trigger("submit") + }) +}) diff --git a/resources/lua/Edit.lua b/resources/lua/Edit.lua new file mode 100644 index 0000000..9e10b87 --- /dev/null +++ b/resources/lua/Edit.lua @@ -0,0 +1,14 @@ + +message.Text = "Loading Place. Please wait..." +coroutine.yield() +game:Load("{{ AssetUrl }}") + +if #"" > 0 then + visit:SetUploadUrl("") +end + +message.Parent = nil + +game:GetService("ChangeHistoryService"):SetEnabled(true) + +visit:SetPing("{{ ClientPresenceUrl }}", 60) diff --git a/resources/lua/Gameserver.lua b/resources/lua/Gameserver.lua new file mode 100644 index 0000000..c93bb73 --- /dev/null +++ b/resources/lua/Gameserver.lua @@ -0,0 +1,230 @@ +-- Start Game Script Arguments +local placeId, port, sleeptime, access, url, killID, deathID, timeout, autosaveInterval, locationID, groupBuild, machineAddress, gsmInterval, gsmUrl, maxPlayers, maxSlotsUpperLimit, maxSlotsLowerLimit, gsmAccess, injectScriptAssetID, servicesUrl, permissionsServiceUrl, apiKey, libraryRegistrationScriptAssetID = ... + + +-- StartGame -- +pcall(function() game:GetService("ScriptContext"):AddStarterScript(injectScriptAssetID) end) +game:GetService("RunService"):Run() + + + +-- REQUIRES: StartGanmeSharedArgs.txt +-- REQUIRES: MonitorGameStatus.txt + +------------------- UTILITY FUNCTIONS -------------------------- + +local cdnSuccess = 0 +local cdnFailure = 0 + +function reportCdn(blocking) + pcall(function() + local newCdnSuccess = settings().Diagnostics.CdnSuccessCount + local newCdnFailure = settings().Diagnostics.CdnFailureCount + local successDelta = newCdnSuccess - cdnSuccess + local failureDelta = newCdnFailure - cdnFailure + cdnSuccess = newCdnSuccess + cdnFailure = newCdnFailure + if successDelta > 0 or failureDelta > 0 then + game:HttpGet("{{ BaseUrl }}/Game/Cdn.ashx?source=server&success=" .. successDelta .. "&failure=" .. failureDelta, blocking) + end + end) +end + +function waitForChild(parent, childName) + while true do + local child = parent:findFirstChild(childName) + if child then + return child + end + parent.ChildAdded:wait() + end +end + +-- returns the player object that killed this humanoid +-- returns nil if the killer is no longer in the game +function getKillerOfHumanoidIfStillInGame(humanoid) + + -- check for kill tag on humanoid - may be more than one - todo: deal with this + local tag = humanoid:findFirstChild("creator") + + -- find player with name on tag + if tag then + local killer = tag.Value + if killer.Parent then -- killer still in game + return killer + end + end + + return nil +end + +-- send kill and death stats when a player dies +function onDied(victim, humanoid) + local killer = getKillerOfHumanoidIfStillInGame(humanoid) + local victorId = 0 + if killer then + victorId = killer.userId + print("STAT: kill by " .. victorId .. " of " .. victim.userId) + game:HttpGet(url .. "/Game/Knockouts.ashx?UserID=" .. victorId .. "&" .. access) + end + print("STAT: death of " .. victim.userId .. " by " .. victorId) + game:HttpGet(url .. "/Game/Wipeouts.ashx?UserID=" .. victim.userId .. "&" .. access) +end + +-----------------------------------END UTILITY FUNCTIONS ------------------------- + +-----------------------------------"CUSTOM" SHARED CODE---------------------------------- + +pcall(function() settings().Network.UseInstancePacketCache = true end) +pcall(function() settings().Network.UsePhysicsPacketCache = true end) +--pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.FIFO end) +pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end) + +--settings().Network.PhysicsSend = 1 -- 1==RoundRobin +settings().Network.PhysicsSend = Enum.PhysicsSendMethod.ErrorComputation2 +settings().Network.ExperimentalPhysicsEnabled = true +settings().Network.WaitingForCharacterLogRate = 100 +pcall(function() settings().Diagnostics:LegacyScriptMode() end) + +-----------------------------------START GAME SHARED SCRIPT------------------------------ + +local assetId = placeId -- might be able to remove this now + +local scriptContext = game:GetService('ScriptContext') +pcall(function() scriptContext:AddStarterScript(libraryRegistrationScriptAssetID) end) +scriptContext.ScriptsDisabled = true + +game:SetPlaceID(assetId, false) +game:GetService("ChangeHistoryService"):SetEnabled(false) + +-- establish this peer as the Server +local ns = game:GetService("NetworkServer") + +if url~=nil then + pcall(function() game:GetService("Players"):SetAbuseReportUrl(url .. "/AbuseReport/InGameChatHandler.ashx") end) + pcall(function() game:GetService("ScriptInformationProvider"):SetAssetUrl(url .. "/Asset/") end) + pcall(function() game:GetService("ContentProvider"):SetBaseUrl(url .. "/") end) + pcall(function() game:GetService("Players"):SetChatFilterUrl(url .. "/Game/ChatFilter.ashx") end) + + game:GetService("BadgeService"):SetPlaceId(placeId) + if access~=nil then + game:GetService("BadgeService"):SetAwardBadgeUrl(url .. "/Game/Badge/AwardBadge.ashx?UserID=%d&BadgeID=%d&PlaceID=%d&" .. access) + game:GetService("BadgeService"):SetHasBadgeUrl(url .. "/Game/Badge/HasBadge.ashx?UserID=%d&BadgeID=%d&" .. access) + game:GetService("BadgeService"):SetIsBadgeDisabledUrl(url .. "/Game/Badge/IsBadgeDisabled.ashx?BadgeID=%d&PlaceID=%d&" .. access) + + game:GetService("FriendService"):SetMakeFriendUrl(servicesUrl .. "/Friend/CreateFriend?firstUserId=%d&secondUserId=%d&" .. access) + game:GetService("FriendService"):SetBreakFriendUrl(servicesUrl .. "/Friend/BreakFriend?firstUserId=%d&secondUserId=%d&" .. access) + game:GetService("FriendService"):SetGetFriendsUrl(servicesUrl .. "/Friend/AreFriends?userId=%d&" .. access) + end + game:GetService("BadgeService"):SetIsBadgeLegalUrl("") + game:GetService("InsertService"):SetBaseSetsUrl(url .. "/Game/Tools/InsertAsset.ashx?nsets=10&type=base") + game:GetService("InsertService"):SetUserSetsUrl(url .. "/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") + game:GetService("InsertService"):SetCollectionUrl(url .. "/Game/Tools/InsertAsset.ashx?sid=%d") + game:GetService("InsertService"):SetAssetUrl(url .. "/Asset/?id=%d") + game:GetService("InsertService"):SetAssetVersionUrl(url .. "/Asset/?assetversionid=%d") + + pcall(function() loadfile(url .. "/Game/LoadPlaceInfo.ashx?PlaceId=" .. placeId)() end) + + pcall(function() + if access then + loadfile(url .. "/Game/PlaceSpecificScript.ashx?PlaceId=" .. placeId .. "&" .. access)() + end + end) +end + +pcall(function() game:GetService("NetworkServer"):SetIsPlayerAuthenticationRequired(true) end) +settings().Diagnostics.LuaRamLimit = 0 +--settings().Network:SetThroughputSensitivity(0.08, 0.01) +--settings().Network.SendRate = 35 +--settings().Network.PhysicsSend = 0 -- 1==RoundRobin + +--shared["__time"] = 0 +--game:GetService("RunService").Stepped:connect(function (time) shared["__time"] = time end) + + + + +if placeId~=nil and killID~=nil and deathID~=nil and url~=nil then + -- listen for the death of a Player + function createDeathMonitor(player) + -- we don't need to clean up old monitors or connections since the Character will be destroyed soon + if player.Character then + local humanoid = waitForChild(player.Character, "Humanoid") + humanoid.Died:connect( + function () + onDied(player, humanoid) + end + ) + end + end + + -- listen to all Players' Characters + game:GetService("Players").ChildAdded:connect( + function (player) + createDeathMonitor(player) + player.Changed:connect( + function (property) + if property=="Character" then + createDeathMonitor(player) + end + end + ) + end + ) +end + +game:GetService("Players").PlayerAdded:connect(function(player) + print("Player " .. player.userId .. " added") + + if url and access and placeId and player and player.userId then + game:HttpGet(url .. "/Game/ClientPresence.ashx?action=connect&" .. access .. "&PlaceID=" .. placeId .. "&UserID=" .. player.userId) + game:HttpGet(url .. "/Game/PlaceVisit.ashx?UserID=" .. player.userId .. "&AssociatedPlaceID=" .. placeId .. "&" .. access) + end +end) + + +game:GetService("Players").PlayerRemoving:connect(function(player) + print("Player " .. player.userId .. " leaving") + + if url and access and placeId and player and player.userId then + game:HttpGet(url .. "/Game/ClientPresence.ashx?action=disconnect&" .. access .. "&PlaceID=" .. placeId .. "&UserID=" .. player.userId) + end +end) + +if placeId~=nil and url~=nil then + -- yield so that file load happens in the heartbeat thread + wait() + + -- load the game + game:Load(url .. "/asset/?id=" .. placeId) +end + +-- Now start the connection +ns:Start(port, sleeptime) + +if timeout then + scriptContext:SetTimeout(timeout) +end +scriptContext.ScriptsDisabled = false + +--delay(1, function() +-- loadfile(url .. "/analytics/GamePerfMonitor.ashx")(game.JobId, placeId) +--end) + +--[[ +if access then + game.Close:connect(function() + reportCdn(true) + end) + + delay(60*5, function() + while true do + reportCdn(false) + wait(60*5) + end + end) +end +--]] + +------------------------------END START GAME SHARED SCRIPT-------------------------- + diff --git a/resources/lua/GroupBuild.lua b/resources/lua/GroupBuild.lua new file mode 100644 index 0000000..0880883 --- /dev/null +++ b/resources/lua/GroupBuild.lua @@ -0,0 +1,52 @@ +-- MultiplayerSharedScript.lua inserted here ---- + +-- functions --------------------------------------- +function createText(text, position, parent) + local textLabel = Instance.new("TextLabel") + textLabel.Position = UDim2.new(0.5, 0, 0, position) + textLabel.TextColor = BrickColor.Black() + textLabel.Text = text + textLabel.Parent = parent +end + +function dismissMessageBox(guiMain) + guiMain:Remove() +end +function createWelcomeGui(player) + local guiMain = Instance.new("GuiMain") + guiMain.Parent = player.PlayerGui + + local outerFrame = Instance.new("Frame") + outerFrame.Position = UDim2.new(0.5, -125, 0.5, -75) + outerFrame.Size = UDim2.new(0,250,0,150) + outerFrame.BackgroundColor = BrickColor.new(226) + outerFrame.Parent = guiMain + + local innerFrame = Instance.new("Frame") + innerFrame.Position = UDim2.new(0,4,0,4) + innerFrame.Size = UDim2.new(1,-8,1,-8) + innerFrame.BackgroundColor = BrickColor.new(1029) + innerFrame.Parent = outerFrame + + local dismissButton = Instance.new("TextButton") + dismissButton.Position = UDim2.new(0.5,-40, 0, 110) + dismissButton.Size = UDim2.new(0,80,0,20) + dismissButton.Text = "Let's Build!" + dismissButton.BackgroundColor = BrickColor.new(1009) + dismissButton.TextColor = BrickColor.new(1003) + dismissButton.MouseButton1Click:connect(function() dismissMessageBox(guiMain) end) + dismissButton.Parent = innerFrame + + createText("Welcome to Group Building", 15, innerFrame) + createText("Welcome to Group Building", 15, innerFrame) + createText("This feature still needs a lot of work, but we", 40, innerFrame) + createText("wanted to get it out early to get user feedback.", 55, innerFrame) + createText("Please be patient, we're working to improve it.", 80, innerFrame) +end + +function onPlayerAdded(player) + local characterAdded = player.CharacterAdded:connect(function() + createWelcomeGui(player) + characterAdded:disconnect() + end) +end diff --git a/resources/lua/Join.lua b/resources/lua/Join.lua new file mode 100644 index 0000000..bed4668 --- /dev/null +++ b/resources/lua/Join.lua @@ -0,0 +1,8 @@ + + +-- functions -------------------------- +function onPlayerAdded(player) + -- override +end + +-- MultiplayerSharedScript.lua inserted here ---- \ No newline at end of file diff --git a/resources/lua/LoadPlaceInfo.lua b/resources/lua/LoadPlaceInfo.lua new file mode 100644 index 0000000..c731fec --- /dev/null +++ b/resources/lua/LoadPlaceInfo.lua @@ -0,0 +1,9 @@ +-- Loaded by StartGameSharedScript -- +pcall(function() game:SetCreatorID({{ CreatorID }}, Enum.CreatorType.{{ CreatorType }}) end) + +pcall(function() game:GetService("SocialService"):SetFriendUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=IsFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetBestFriendUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=IsBestFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=IsInGroup&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRankUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRank&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRoleUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRole&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("GamePassService"):SetPlayerHasPassUrl("{{ BaseUrl }}/Game/GamePass/GamePassHandler.ashx?Action=HasPass&UserID=%d&PassID=%d") end) \ No newline at end of file diff --git a/resources/lua/MultiplayerSharedScript.lua b/resources/lua/MultiplayerSharedScript.lua new file mode 100644 index 0000000..54a0efc --- /dev/null +++ b/resources/lua/MultiplayerSharedScript.lua @@ -0,0 +1,213 @@ +-- Prepended to GroupBuild.lua and Join.lua -- +pcall(function() game:SetPlaceID({{ PlaceID }}, {{ OfficialPlace }}) end) + +settings()["Game Options"].CollisionSoundEnabled = true +pcall(function() settings().Rendering.EnableFRM = true end) +pcall(function() settings().Physics.Is30FpsThrottleEnabled = true end) +pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end) +pcall(function() settings().Physics.PhysicsEnvironmentalThrottle = Enum.EnviromentalPhysicsThrottle.DefaultAuto end) + +-- arguments --------------------------------------- +local threadSleepTime = ... + +if threadSleepTime==nil then + threadSleepTime = 15 +end + +local test = {{ IsTest }} + +print("! Joining game '{{ JobID }}' place {{ PlaceID }} at {{ MachineAddress }}") + +game:GetService("ChangeHistoryService"):SetEnabled(false) +game:GetService("ContentProvider"):SetThreadPool(16) +game:GetService("InsertService"):SetBaseSetsUrl("{{ BaseUrl }}/Game/Tools/InsertAsset.ashx?nsets=10&type=base") +game:GetService("InsertService"):SetUserSetsUrl("{{ BaseUrl }}/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") +game:GetService("InsertService"):SetCollectionUrl("{{ BaseUrl }}/Game/Tools/InsertAsset.ashx?sid=%d") +game:GetService("InsertService"):SetAssetUrl("{{ BaseUrl }}/Asset/?id=%d") +game:GetService("InsertService"):SetAssetVersionUrl("{{ BaseUrl }}/Asset/?assetversionid=%d") + +pcall(function() game:GetService("SocialService"):SetFriendUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=IsFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetBestFriendUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=IsBestFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=IsInGroup&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRankUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRank&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRoleUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRole&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("GamePassService"):SetPlayerHasPassUrl("{{ BaseUrl }}/Game/GamePass/GamePassHandler.ashx?Action=HasPass&UserID=%d&PassID=%d") end) +pcall(function() game:SetCreatorID({{ CreatorID }}, Enum.CreatorType.{{ CreatorType }}) end) + +-- Bubble chat. This is all-encapsulated to allow us to turn it off with a config setting +pcall(function() game:GetService("Players"):SetChatStyle(Enum.ChatStyle.{{ ChatStyle }}) end) + +local waitingForCharacter = false +pcall( function() + if settings().Network.MtuOverride == 0 then + settings().Network.MtuOverride = 1400 + end +end) + + +-- globals ----------------------------------------- + +client = game:GetService("NetworkClient") +visit = game:GetService("Visit") + +-- functions --------------------------------------- +function setMessage(message) + -- todo: animated "..." + if not {{ IsTeleport }} then + game:SetMessage(message) + else + -- hack, good enought for now + game:SetMessage("Teleporting ...") + end +end + +function showErrorWindow(message, errorType, errorCategory) + game:SetMessage(message) +end + +function reportError(err, message) + print("***ERROR*** " .. err) + if not test then visit:SetUploadUrl("") end + client:Disconnect() + wait(4) + showErrorWindow("Error: " .. err, message, "Other") +end + +-- called when the client connection closes +function onDisconnection(peer, lostConnection) + if lostConnection then + showErrorWindow("You have lost the connection to the game", "LostConnection", "LostConnection") + else + showErrorWindow("This game has shut down", "Kick", "Kick") + end +end + +function requestCharacter(replicator) + + -- prepare code for when the Character appears + local connection + connection = player.Changed:connect(function (property) + if property=="Character" then + game:ClearMessage() + waitingForCharacter = false + + connection:disconnect() + end + end) + + setMessage("Requesting character") + + local success, err = pcall(function() + replicator:RequestCharacter() + setMessage("Waiting for character") + waitingForCharacter = true + end) + if not success then + reportError(err,"W4C") + return + end +end + +-- called when the client connection is established +function onConnectionAccepted(url, replicator) + + local waitingForMarker = true + + local success, err = pcall(function() + if not test then + visit:SetPing("{{ ClientPresenceUrl }}", 300) + end + + if not {{ IsTeleport }} then + game:SetMessageBrickCount() + else + setMessage("Teleporting ...") + end + + replicator.Disconnection:connect(onDisconnection) + + -- Wait for a marker to return before creating the Player + local marker = replicator:SendMarker() + + marker.Received:connect(function() + waitingForMarker = false + requestCharacter(replicator) + end) + end) + + if not success then + reportError(err,"ConnectionAccepted") + return + end + + -- TODO: report marker progress + + while waitingForMarker do + workspace:ZoomToExtents() + wait(0.5) + end +end + +-- called when the client connection fails +function onConnectionFailed(_, error) + showErrorWindow("Failed to connect to the Game. (ID=" .. error .. ")", "ID" .. error, "Other") +end + +-- called when the client connection is rejected +function onConnectionRejected() + connectionFailed:disconnect() + showErrorWindow("This game is not available. Please try another", "WrongVersion", "WrongVersion") +end + +idled = false +function onPlayerIdled(time) + if time > 20*60 then + showErrorWindow(string.format("You were disconnected for being idle %d minutes", time/60), "Idle", "Idle") + client:Disconnect() + if not idled then + idled = true + end + end +end + + +-- main ------------------------------------------------------------ + +pcall(function() settings().Diagnostics:LegacyScriptMode() end) +local success, err = pcall(function() + + game:SetRemoteBuildMode(true) + + setMessage("Connecting to Server") + client.ConnectionAccepted:connect(onConnectionAccepted) + client.ConnectionRejected:connect(onConnectionRejected) + connectionFailed = client.ConnectionFailed:connect(onConnectionFailed) + client.Ticket = "{{ PlayerTicket }}" + + playerConnectSucces, player = pcall(function() return client:PlayerConnect({{ PlayerID }}, "{{ MachineAddress }}", {{ MachinePort }}, 0, threadSleepTime) end) + if not playerConnectSucces then + --Old player connection scheme + player = game:GetService("Players"):CreateLocalPlayer({{ PlayerID }}) + client:Connect("{{ MachineAddress }}", {{ MachinePort }}, 0, threadSleepTime) + end + + player:SetSuperSafeChat({{ PlayerSSC }}) + pcall(function() player:SetMembershipType(Enum.MembershipType.{{ PlayerMembership }}) end) + pcall(function() player:SetAccountAge({{ PlayerAge }}) end) + player.Idled:connect(onPlayerIdled) + + -- Overriden + onPlayerAdded(player) + + pcall(function() player.Name = [========[{{ PlayerName }}]========] end) + player.CharacterAppearance = "{{ PlayerAppearance }}" + if not test then visit:SetUploadUrl("")end +end) + +if not success then + reportError(err,"CreatePlayer") +end + +pcall(function() game:SetScreenshotInfo("{{ ScreenshotInfo }}") end) +pcall(function() game:SetVideoInfo('{{ VideoInfo }}') end) +-- use single quotes here because the video info string may have unescaped double quotes \ No newline at end of file diff --git a/resources/lua/PlaySolo.lua b/resources/lua/PlaySolo.lua new file mode 100644 index 0000000..9a4d827 --- /dev/null +++ b/resources/lua/PlaySolo.lua @@ -0,0 +1,64 @@ +-- SingleplayerSharedScript.lua inserted here -- + +pcall(function() settings().Rendering.EnableFRM = true end) +pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end) + +game:GetService("ChangeHistoryService"):SetEnabled(false) +pcall(function() game:GetService("Players"):SetBuildUserPermissionsUrl("{{ BaseUrl }}//Game/BuildActionPermissionCheck.ashx?assetId=0&userId=%d&isSolo=true") end) + +workspace:SetPhysicsThrottleEnabled(true) + +local screenGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") + +function doVisit() + message.Text = "Loading Game" + if {{ IsVisit }} then + game:Load("{{ AssetUrl }}") + pcall(function() visit:SetUploadUrl("") end) + else + pcall(function() visit:SetUploadUrl("") end) + end + + + message.Text = "Running" + game:GetService("RunService"):Run() + + message.Text = "Creating Player" + if {{ IsVisit }} then + player = game:GetService("Players"):CreateLocalPlayer({{ PlayerID }}) + player.Name = [====[{{ PlayerName }}]====] + else + player = game:GetService("Players"):CreateLocalPlayer(0) + end + player.CharacterAppearance = "{{ PlayerAppearance }}" + local propExists, canAutoLoadChar = false + propExists = pcall(function() canAutoLoadChar = game.Players.CharacterAutoLoads end) + + if (propExists and canAutoLoadChar) or (not propExists) then + player:LoadCharacter() + end + + message.Text = "Setting GUI" + player:SetSuperSafeChat({{ PlayerSSC }}) + pcall(function() player:SetMembershipType(Enum.MembershipType.{{ PlayerMembership }}) end) + pcall(function() player:SetAccountAge({{ PlayerAge }}) end) + + if {{ IsVisit }} then + message.Text = "Setting Ping" + visit:SetPing("{{ ClientPresenceUrl }}", 300) + end + +end + +success, err = pcall(doVisit) + +if success then + message.Parent = nil +else + print(err) + if {{ IsVisit }} then + pcall(function() visit:SetUploadUrl("") end) + end + wait(5) + message.Text = "Error on visit: " .. err +end diff --git a/resources/lua/SingleplayerSharedScript.lua b/resources/lua/SingleplayerSharedScript.lua new file mode 100644 index 0000000..de8511b --- /dev/null +++ b/resources/lua/SingleplayerSharedScript.lua @@ -0,0 +1,38 @@ +-- Prepended to Edit.lua and Visit.lua and Studio.lua and PlaySolo.lua-- + +if true then + pcall(function() game:SetPlaceID({{ PlaceID }}) end) +else + if {{ PlaceID }}>0 then + pcall(function() game:SetPlaceID({{ PlaceID }}) end) + end +end + +visit = game:GetService("Visit") + +local message = Instance.new("Message") +message.Parent = workspace +message.archivable = false + +game:GetService("ScriptInformationProvider"):SetAssetUrl("{{ BaseUrl }}/Asset/") +game:GetService("ContentProvider"):SetThreadPool(16) +pcall(function() game:GetService("InsertService"):SetFreeModelUrl("{{ BaseUrl }}/Game/Tools/InsertAsset.ashx?type=fm&q=%s&pg=%d&rs=%d") end) -- Used for free model search (insert tool) +pcall(function() game:GetService("InsertService"):SetFreeDecalUrl("{{ BaseUrl }}/Game/Tools/InsertAsset.ashx?type=fd&q=%s&pg=%d&rs=%d") end) -- Used for free decal search (insert tool) + +settings().Diagnostics:LegacyScriptMode() + +game:GetService("InsertService"):SetBaseSetsUrl("{{ BaseUrl }}/Game/Tools/InsertAsset.ashx?nsets=10&type=base") +game:GetService("InsertService"):SetUserSetsUrl("{{ BaseUrl }}/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") +game:GetService("InsertService"):SetCollectionUrl("{{ BaseUrl }}/Game/Tools/InsertAsset.ashx?sid=%d") +game:GetService("InsertService"):SetAssetUrl("{{ BaseUrl }}/Asset/?id=%d") +game:GetService("InsertService"):SetAssetVersionUrl("{{ BaseUrl }}/Asset/?assetversionid=%d") + +pcall(function() game:GetService("SocialService"):SetFriendUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=IsFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetBestFriendUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=IsBestFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=IsInGroup&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRankUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRank&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRoleUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRole&playerid=%d&groupid=%d") end) +pcall(function() game:SetCreatorID({{ CreatorID }}, Enum.CreatorType.{{ CreatorType }}) end) + +pcall(function() game:SetScreenshotInfo("") end) +pcall(function() game:SetVideoInfo("") end) \ No newline at end of file diff --git a/resources/lua/Studio.lua b/resources/lua/Studio.lua new file mode 100644 index 0000000..e715b04 --- /dev/null +++ b/resources/lua/Studio.lua @@ -0,0 +1,23 @@ + +-- Setup studio cmd bar & load core scripts + +pcall(function() game:GetService("InsertService"):SetFreeModelUrl("{{ BaseUrl }}/Game/Tools/InsertAsset.ashx?type=fm&q=%s&pg=%d&rs=%d") end) +pcall(function() game:GetService("InsertService"):SetFreeDecalUrl("{{ BaseUrl }}/Game/Tools/InsertAsset.ashx?type=fd&q=%s&pg=%d&rs=%d") end) + +game:GetService("ScriptInformationProvider"):SetAssetUrl("{{ BaseUrl }}/Asset/") +game:GetService("InsertService"):SetBaseSetsUrl("{{ BaseUrl }}/Game/Tools/InsertAsset.ashx?nsets=10&type=base") +game:GetService("InsertService"):SetUserSetsUrl("{{ BaseUrl }}/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") +game:GetService("InsertService"):SetCollectionUrl("{{ BaseUrl }}/Game/Tools/InsertAsset.ashx?sid=%d") +game:GetService("InsertService"):SetAssetUrl("{{ BaseUrl }}/Asset/?id=%d") +game:GetService("InsertService"):SetAssetVersionUrl("{{ BaseUrl }}/Asset/?assetversionid=%d") + +pcall(function() game:GetService("SocialService"):SetFriendUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=IsFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetBestFriendUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=IsBestFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=IsInGroup&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRankUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRank&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRoleUrl("{{ BaseUrl }}/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRole&playerid=%d&groupid=%d") end) + +local result = pcall(function() game:GetService("ScriptContext"):AddStarterScript({{ StarterScriptID }}) end) +if not result then + pcall(function() game:GetService("ScriptContext"):AddCoreScript({{ StarterScriptID }},game:GetService("ScriptContext"),"StarterScript") end) +end diff --git a/resources/lua/Visit.lua b/resources/lua/Visit.lua new file mode 100644 index 0000000..956f9c0 --- /dev/null +++ b/resources/lua/Visit.lua @@ -0,0 +1,77 @@ +-- SingleplayerSharedScript.lua inserted here -- + +pcall(function() settings().Rendering.EnableFRM = true end) +pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end) + +game:GetService("ChangeHistoryService"):SetEnabled(false) +pcall(function() game:GetService("Players"):SetBuildUserPermissionsUrl("{{ BaseUrl }}//Game/BuildActionPermissionCheck.ashx?assetId={{ PlaceID }}&userId=%d&isSolo=true") end) + +workspace:SetPhysicsThrottleEnabled(true) + +local addedBuildTools = false +local screenGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") + +function doVisit() + message.Text = "Loading Game" + if {{ IsVisit }} then + game:Load("{{ AssetUrl }}") + pcall(function() visit:SetUploadUrl("{{ UploadUrl }}") end) + else + pcall(function() visit:SetUploadUrl("") end) + end + + + message.Text = "Running" + game:GetService("RunService"):Run() + + message.Text = "Creating Player" + if {{ IsVisit }} then + player = game:GetService("Players"):CreateLocalPlayer({{ PlayerID }}) + player.Name = [====[{{ PlayerName }}]====] + else + player = game:GetService("Players"):CreateLocalPlayer(0) + end + player.CharacterAppearance = "{{ PlayerAppearance }}" + local propExists, canAutoLoadChar = false + propExists = pcall(function() canAutoLoadChar = game.Players.CharacterAutoLoads end) + + if (propExists and canAutoLoadChar) or (not propExists) then + player:LoadCharacter() + end + + + message.Text = "Setting GUI" + player:SetSuperSafeChat({{ PlayerSSC }}) + pcall(function() player:SetMembershipType(Enum.MembershipType.{{ PlayerMembership }}) end) + pcall(function() player:SetAccountAge({{ PlayerAge }}) end) + + if {{ IsVisit }} then + message.Text = "Setting Ping" + visit:SetPing("{{ ClientPresenceUrl }}", 300) + end + +end + +success, err = pcall(doVisit) + +if not addedBuildTools then + local playerName = Instance.new("StringValue") + playerName.Name = "PlayerName" + playerName.Value = player.Name + playerName.RobloxLocked = true + playerName.Parent = screenGui + + pcall(function() game:GetService("ScriptContext"):AddCoreScript(59431535,screenGui,"BuildToolsScript") end) + addedBuildTools = true +end + +if success then + message.Parent = nil +else + print(err) + if {{ IsVisit }} then + pcall(function() visit:SetUploadUrl("") end) + end + wait(5) + message.Text = "Error on visit: " .. err +end diff --git a/resources/sass/_tadah.scss b/resources/sass/_tadah.scss new file mode 100644 index 0000000..9b1e439 --- /dev/null +++ b/resources/sass/_tadah.scss @@ -0,0 +1,6 @@ +// Carrot: This code is absolute fucking shit but I can't be bothered to fix it since I hate CSS and it doesn't cost anything in terms of performance +// If you would like to make this better please be my guest since I don't want to + +// Palette + + diff --git a/resources/sass/app.scss b/resources/sass/app.scss new file mode 100644 index 0000000..3e064c6 --- /dev/null +++ b/resources/sass/app.scss @@ -0,0 +1,67 @@ +// Typography +@import url("https://fonts.googleapis.com/css?family=Source+Sans+Pro"); +@import url("https://cdn.jsdelivr.net/npm/@xz/fonts@1/serve/cascadia-code.min.css"); + +// Twemoji +@font-face { + font-family: "Twemoji Mozilla"; + src: url("/fonts/TwemojiMozilla.ttf") format("truetype"); + font-display: block; + font-weight: 400; +} + +$font-family-sans-serif: "Source Sans Pro", sans-serif, "Twemoji Mozilla"; + +// Bootstrap +@import "~bootstrap/scss/functions"; + +@import "tadah/bootstrap"; + +@import "~bootstrap/scss/variables"; +@import "~bootstrap/scss/maps"; +@import "~bootstrap/scss/mixins"; +@import "~bootstrap/scss/utilities"; +@import "~bootstrap/scss/root"; +@import "~bootstrap/scss/reboot"; +@import "~bootstrap/scss/type"; +@import "~bootstrap/scss/images"; +@import "~bootstrap/scss/containers"; +@import "~bootstrap/scss/grid"; +@import "~bootstrap/scss/tables"; +@import "~bootstrap/scss/forms"; +@import "~bootstrap/scss/buttons"; +@import "~bootstrap/scss/transitions"; +@import "~bootstrap/scss/dropdown"; +@import "~bootstrap/scss/button-group"; +@import "~bootstrap/scss/nav"; +@import "~bootstrap/scss/navbar"; +@import "~bootstrap/scss/card"; +@import "~bootstrap/scss/accordion"; +@import "~bootstrap/scss/breadcrumb"; +@import "~bootstrap/scss/pagination"; +@import "~bootstrap/scss/badge"; +@import "~bootstrap/scss/alert"; +@import "~bootstrap/scss/progress"; +@import "~bootstrap/scss/list-group"; +@import "~bootstrap/scss/close"; +@import "~bootstrap/scss/toasts"; +@import "~bootstrap/scss/modal"; +@import "~bootstrap/scss/tooltip"; +@import "~bootstrap/scss/popover"; +@import "~bootstrap/scss/carousel"; +@import "~bootstrap/scss/spinners"; +@import "~bootstrap/scss/offcanvas"; +@import "~bootstrap/scss/placeholders"; +@import "~bootstrap/scss/helpers"; +@import "~bootstrap/scss/utilities/api"; + +// Datepicker +@import "../../node_modules/vanillajs-datepicker/sass/datepicker-bs5.scss"; + +// Font Awesome +// NOTE: This is a compiled asset. Don't change it! +// https://kit-pro.fontawesome.com/releases/v6.1.2/css/pro.min.css - v6.x.x +@import "../css/fa6-pro.min.css"; + +// Tadah +@import "tadah/extra"; diff --git a/resources/sass/tadah/_bootstrap.scss b/resources/sass/tadah/_bootstrap.scss new file mode 100644 index 0000000..6e49cf7 --- /dev/null +++ b/resources/sass/tadah/_bootstrap.scss @@ -0,0 +1,5 @@ +$body-bg: #fcfcfc; +$blue: #455dd8; +$green: #38c172; +$cyan: #3dbbff; +$enable-negative-margins: true; diff --git a/resources/sass/tadah/_extra.scss b/resources/sass/tadah/_extra.scss new file mode 100644 index 0000000..f38f8ed --- /dev/null +++ b/resources/sass/tadah/_extra.scss @@ -0,0 +1,720 @@ +@import "~bootstrap/scss/variables"; + +.btn-light { + color: #999 !important; + border: none !important; + background-color: #f1f1f1 !important; +} +.btn-light:hover, .btn-light:focus, .btn-light:active, .btn-light.active, .open>.dropdown-toggle.btn-light { + color: #aaa !important; + background-color: #f6f6f6 !important; + border: none !important; +} +.alert p { + margin-bottom: 0 !important; +} +// Used for positioning a spinner over a blurred div +.blurred-loading-wrapper { + position: relative; + display: none; +} + +.blurred-loading { + position: absolute; + z-index: 1; + width: 100%; +} + +// Etc +.text-horizon { + color: #405263 !important; +} +.border-horizon { + border-color: #405263 !important; +} +.text-telescope { + color: #4040c8 !important; +} +.border-telescope { + border-color: #4040c8 !important; +} + +.navbar-divider { + height: 1.2rem; + border-left: 1px solid hsla(0, 0%, 100%, .55); + margin-left: .25rem; + margin-right: .25rem; +} +.arbiter-output { + display: flex !important; + background-color: #0c0c0c; + border-radius: .3rem; + padding: .7rem; + color: #ccc; + font-size: .85rem !important; + height: 300px; + overflow: scroll !important; + flex-direction: column !important; + font-family: 'Cascadia Code', var(--bs-font-monospace) !important; +} +.offline-output { + align-items: center !important; + justify-content: center !important; +} +.dead-image { + opacity: .5; +} +.loading-output-spinner { + color: #ccc !important; + opacity: .5 !important; +} +.arbiter-blur { + filter: blur(5px) !important; + transition: .2s; +} +.arbiter-blur:hover { + filter: blur(0) !important; +} +.arbiter-black { + color: #767676 !important; +} +.blinking::after { + content: ""; + display: inline-block; + background-color: #f2f2f2; + width: 1px; + height: 21.4px; + animation: blink 1s step-end infinite; +} +@keyframes blink { + 0% { opacity: 1.0; } + 50% { opacity: 0.0; } + 100% { opacity: 1.0; } +} + +.offensive-item > p > img { + max-width: 100% !important; + max-height: 100% !important; +} +.offensive-item > p { + margin: 0 !important; +} +.dahllor-icon { + mask: url("/img/logo/dahllor.svg") no-repeat 50% 50%; + display: inline-block; + mask-size: cover; +} +#usernameChange { + cursor: pointer !important; +} +#emailChange { + cursor: pointer !important; + color: transparent !important; + text-shadow: 0 0 11px rgba(0,0,0,0.5) !important; +} +.footer-link { + transition: 0.3s; +} +.footer-link:hover { opacity: 1 !important; } +.floating-tab-page { + background-color: $white !important; + border: 1px solid #dee2e6 !important; + border-radius: .25rem !important; + padding: 1rem !important; +} +.floating-tab-page.start { + border-radius: 0 .25rem .25rem .25rem !important; +} +.floating-tab.active { + border-color: #dee2e6 #dee2e6 $white !important; +} +.floating-nav-tabs { + border-bottom: 0px !important; +} +.small-pill { + padding-top: .25rem !important; + padding-bottom: .25rem !important; +} + +@media(max-width: 576px) { + .small-text-sm { + font-size: .9rem !important; + } +} + +.small-text { + font-size: .9rem !important; +} + +.text-decoration-hover { + text-decoration: none !important; +} + +.text-decoration-hover:hover { + text-decoration: underline !important; +} +.glowing-online { + box-shadow: 0 0 14px $green !important; +} +.blurred { + filter: blur(3px) !important; + user-select: none !important; + pointer-events: none !important; + transition-duration: 50ms !important; + transition-property: filter !important; +} +.hover { + transition: box-shadow .15s ease-in-out; +} +.hover:hover { + box-shadow: 0 0.5rem 0.5rem rgba(0, 0, 0, 0.075) !important; +} +.bg-lightish { + background-color: #f5f5f5 !important; +} +.online-indicator { + right: 0 !important; + bottom: 0 !important; + height: 32px !important; + width: 32px !important; + border-radius: 50% !important; + display: inline-flex !important; + color: $white !important; + align-items: center !important; + justify-content: center !important; + position: absolute !important; +} + +.online-indicator-sm { + right: 0 !important; + bottom: 0 !important; + height: 20px !important; + width: 20px !important; + border-radius: 50% !important; + display: inline-flex !important; + color: $white !important; + align-items: center !important; + justify-content: center !important; + position: absolute !important; +} + +.shadow-huh { + box-shadow: 0 0.5rem .5rem rgba(0, 0, 0, 0.075) !important; +} + +.dahllor-icon-navbar { + opacity: 55%; + height: 20px; + width: 20px; + transition: opacity .15s ease-in-out; + background-color: #fff; +} +.yass:hover .dahllor-icon { opacity: 1 } + +.btn-logout { + border-color: hsla(0, 0%, 100%, .55) !important; +} + +.landing-page video { + position: fixed; + z-index: -1; + top: 0; + width: 100%; + object-fit: cover; + opacity: 1; + min-height: 100%; + min-width: 100%; +} + +.alert { + border: 0 !important; + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.alert-success { + color: $white !important; + background-color: $green !important; +} + +.motto { + color: $white !important; + text-shadow: -1px -1px 0 $black, 1px -1px 0 $black, -1px 1px 0 $black, 1px 1px 0 $black !important; +} + +.rounded-4 { + border-radius: .5rem !important; +} + +.register-hero { + background: linear-gradient(rgba($black, 0), rgba($black, 0)), url('/img/hero/register.png') !important; + background-repeat: no-repeat !important; + background-size: cover !important; +} + +.hover-action { + border-radius: 6px !important; + opacity: 75%; +} + +.hover-action:hover { + background-color: #ececec !important; + opacity: 100%; +} + +.mvh-100 { + min-height: 100vh; +} + +pre:has(code.highlighted) { + border-radius: 0.25rem; + margin-top: 1rem; + margin-bottom: 1rem; + overflow-x: auto; +} + +$sizes: ( 25: 25%, 50: 50%, 75: 75%, 100: 100%, auto: auto ); +@each $breakpoint in map-keys($grid-breakpoints) { + @each $size, $length in $sizes { + @include media-breakpoint-up($breakpoint) { + .w-#{$breakpoint}-#{$size} {width: $length !important;} + } + } + } + +pre code.highlighted { + display: block; + min-width: -webkit-max-content; + min-width: -moz-max-content; + min-width: max-content; +} + +pre code.highlighted .line { + padding-left: 1rem; + padding-right: 1rem; +} + +pre code.highlighted .line-number, +pre code.highlighted .summary-caret { + margin-right: 1rem; +} + +.highlighted.has-focus-lines .line:not(.line-focus) { + transition: filter 0.35s, opacity 0.35s; + filter: blur(.095rem); + opacity: .65; +} + +.highlighted.has-focus-lines:hover .line:not(.line-focus) { + filter: blur(0px); + opacity: 1; +} + +.hover-action[aria-expanded="true"] { + background-color: #dcdcdc !important; + opacity: 100%; +} + +.register-hero { + border-radius: 0 0 .5rem .5rem !important; +} + +@media (min-width: 992px) { + .register-hero { + border-radius: 0 .5rem .5rem 0 !important; + } +} + +.t_disabled-feedback { + color: $white !important; + opacity: 75% !important; +} + +.t_success-feedback { + color: $green !important; + text-shadow: -1px -1px 0 #15733d, 1px -1px 0 #15733d, -1px 1px 0 #15733d, 1px 1px 0 #15733d !important; +} + +.t_error-feedback { + color: $red !important; + text-shadow: -1px -1px 0 #75171f, 1px -1px 0 #75171f, -1px 1px 0 #75171f, 1px 1px 0 #75171f !important; +} + +.grecaptcha-badge { + z-index: 999 !important; +} + +[data-tadah-magic="register-noob"] { + grid-area: 1/1 !important; +} + +.small-r { + font-size: .6rem !important; +} + +.remove-kebab { + filter: blur(20px) !important; + z-index: -1000 !important; + pointer-events: none !important; + user-select: none !important; + grid-area: 1/1 !important; +} + +.add-kebab { + z-index: 1000 !important; +} + +.add-kebab > .grecaptcha-badge { + display: none !important; +} + +.invalid-feedback { + user-select: none !important; +} + +@media(max-width: 576px) { + .search-games-form { + width: 6rem !important; + } +} + +// Display borders +@media (max-width: 576px) { + .border-xs-top { + border-top: 1px solid #dee2e6 !important; + } + .border-xs-end { + border-right: 1px solid #dee2e6 !important; + } + .border-xs-bottom { + border-bottom: 1px solid #dee2e6 !important; + } + .border-xs-start { + border-left: 1px solid #dee2e6 !important; + } + .border-xs-top-0 { + border-top: 0 !important; + } + .border-xs-end-0 { + border-right: 0 !important; + } + .border-xs-bottom-0 { + border-bottom: 0 !important; + } + .border-xs-start-0 { + border-left: 0 !important; + } + .border-xs-x { + border-left: 1px solid #dee2e6 !important; + border-right: 1px solid #dee2e6 !important; + } + .border-xs-y { + border-top: 1px solid #dee2e6 !important; + border-bottom: 1px solid #dee2e6 !important; + } + .border-xs { + border-top: 1px solid #dee2e6 !important; + border-bottom: 1px solid #dee2e6 !important; + border-left: 1px solid #dee2e6 !important; + border-right: 1px solid #dee2e6 !important; + } + .border-xs-0 { + border-top: 0 !important; + border-bottom: 0 !important; + border-left: 0 !important; + border-right: 0 !important; + } +} + +@media (min-width: 576px) { + .border-sm-top { + border-top: 1px solid #dee2e6 !important; + } + .border-sm-end { + border-right: 1px solid #dee2e6 !important; + } + .border-sm-bottom { + border-bottom: 1px solid #dee2e6 !important; + } + .border-sm-start { + border-left: 1px solid #dee2e6 !important; + } + .border-sm-top-0 { + border-top: 0 !important; + } + .border-sm-end-0 { + border-right: 0 !important; + } + .border-sm-bottom-0 { + border-bottom: 0 !important; + } + .border-sm-start-0 { + border-left: 0 !important; + } + .border-sm-x { + border-left: 1px solid #dee2e6 !important; + border-right: 1px solid #dee2e6 !important; + } + .border-sm-y { + border-top: 1px solid #dee2e6 !important; + border-bottom: 1px solid #dee2e6 !important; + } + .border-sm { + border-top: 1px solid #dee2e6 !important; + border-bottom: 1px solid #dee2e6 !important; + border-left: 1px solid #dee2e6 !important; + border-right: 1px solid #dee2e6 !important; + } + .border-sm-0 { + border-top: 0 !important; + border-bottom: 0 !important; + border-left: 0 !important; + border-right: 0 !important; + } +} + +@media (min-width: 768px) { + .border-md-top { + border-top: 1px solid #dee2e6 !important; + } + .border-md-end { + border-right: 1px solid #dee2e6 !important; + } + .border-md-bottom { + border-bottom: 1px solid #dee2e6 !important; + } + .border-md-start { + border-left: 1px solid #dee2e6 !important; + } + .border-md-top-0 { + border-top: 0 !important; + } + .border-md-end-0 { + border-right: 0 !important; + } + .border-md-bottom-0 { + border-bottom: 0 !important; + } + .border-md-start-0 { + border-left: 0 !important; + } + .border-md-x { + border-left: 1px solid #dee2e6 !important; + border-right: 1px solid #dee2e6 !important; + } + .border-md-y { + border-top: 1px solid #dee2e6 !important; + border-bottom: 1px solid #dee2e6 !important; + } + .border-md { + border-top: 1px solid #dee2e6 !important; + border-bottom: 1px solid #dee2e6 !important; + border-left: 1px solid #dee2e6 !important; + border-right: 1px solid #dee2e6 !important; + } + .border-md-0 { + border-top: 0 !important; + border-bottom: 0 !important; + border-left: 0 !important; + border-right: 0 !important; + } +} + +@media (min-width: 992px) { + .border-lg-top { + border-top: 1px solid #dee2e6 !important; + } + .border-lg-end { + border-right: 1px solid #dee2e6 !important; + } + .border-lg-bottom { + border-bottom: 1px solid #dee2e6 !important; + } + .border-lg-start { + border-left: 1px solid #dee2e6 !important; + } + .border-lg-top-0 { + border-top: 0 !important; + } + .border-lg-end-0 { + border-right: 0 !important; + } + .border-lg-bottom-0 { + border-bottom: 0 !important; + } + .border-lg-start-0 { + border-left: 0 !important; + } + .border-lg-x { + border-left: 1px solid #dee2e6 !important; + border-right: 1px solid #dee2e6 !important; + } + .border-lg-y { + border-top: 1px solid #dee2e6 !important; + border-bottom: 1px solid #dee2e6 !important; + } + .border-lg { + border-top: 1px solid #dee2e6 !important; + border-bottom: 1px solid #dee2e6 !important; + border-left: 1px solid #dee2e6 !important; + border-right: 1px solid #dee2e6 !important; + } + .border-lg-0 { + border-top: 0 !important; + border-bottom: 0 !important; + border-left: 0 !important; + border-right: 0 !important; + } +} + +@media (min-width: 1200px) { + .border-xl-top { + border-top: 1px solid #dee2e6 !important; + } + .border-xl-end { + border-right: 1px solid #dee2e6 !important; + } + .border-xl-bottom { + border-bottom: 1px solid #dee2e6 !important; + } + .border-xl-start { + border-left: 1px solid #dee2e6 !important; + } + .border-xl-top-0 { + border-top: 0 !important; + } + .border-xl-end-0 { + border-right: 0 !important; + } + .border-xl-bottom-0 { + border-bottom: 0 !important; + } + .border-xl-start-0 { + border-left: 0 !important; + } + .border-xl-x { + border-left: 1px solid #dee2e6 !important; + border-right: 1px solid #dee2e6 !important; + } + .border-xl-y { + border-top: 1px solid #dee2e6 !important; + border-bottom: 1px solid #dee2e6 !important; + } + .border-xl { + border-top: 1px solid #dee2e6 !important; + border-bottom: 1px solid #dee2e6 !important; + border-left: 1px solid #dee2e6 !important; + border-right: 1px solid #dee2e6 !important; + } + .border-xl-0 { + border-top: 0 !important; + border-bottom: 0 !important; + border-left: 0 !important; + border-right: 0 !important; + } +} + + +.auth-form { + width: 90vw !important; +} + +@media (min-width: 768px) { + .auth-form { + width: 50vw !important; + } +} + +@media (min-width: 992px) { + .auth-form { + width: 40vw !important; + } +} + +@media (min-width: 1200px) { + .auth-form { + width: 25vw !important; + } +} + +// ultrawide compatibility ;) +@media (min-width: 1930px) { + .auth-form { + width: 20vw !important; + } +} + +.email-w { + width: 90vw !important; +} + +@media (min-width: 768px) { + .email-w { + width: 70vw !important; + } +} + +@media (min-width: 992px) { + .email-w { + width: 60vw !important; + } +} + +@media (min-width: 1200px) { + .email-w { + width: 30vw !important; + } +} + +@media (min-width: 1930px) { + .email-w { + width: 25vw !important; + } +} + +.noob-register { + position: fixed !important; + left: 50% !important; + top: 50% !important; + pointer-events: none !important; + user-select: none !important; + transform: translate(-50%, -50%); +} + +.table-no-collapse { + border-collapse: seperate; +} + +.autocomplete-search { + z-index: 1020; +} + +.searchbar { + border: none !important; + color: rgba(255, 255, 255, 0.55); + border-radius: 0.5rem !important; +} + +.search-result:hover { + background-color: #dee2e6 !important; +} + +.table { + border-collapse: separate !important; +} + +.forum-thread { + transition: all 0.1s; +} + +.forum-thread:hover { + box-shadow: 0 0 4px 2px rgba(0, 0, 0, 0.07) inset; +} + +.text-stroke +{ + text-shadow: + -1px -1px 0 #000, + 1px -1px 0 #000, + -1px 1px 0 #000, + 1px 1px 0 #000; +} diff --git a/resources/tadah.proto b/resources/tadah.proto new file mode 100644 index 0000000..7d92753 --- /dev/null +++ b/resources/tadah.proto @@ -0,0 +1,62 @@ +syntax = "proto3"; +package Tadah; + +option csharp_namespace = "Tadah.Proto"; +option php_namespace = "App\\Proto"; + +import "google/protobuf/timestamp.proto"; + +enum Operation { + OPEN_JOB = 0; + CLOSE_JOB = 1; + EXECUTE_SCRIPT = 2; + RENEW_TAMPA_JOB_LEASE = 3; + CLOSE_ALL_JOBS = 4; + CLOSE_ALL_TAMPA_PROCESSES = 5; + THUMBNAIL = 6; +} + +enum ClientVersion { + NONE = 0; + TAIPEI = 2011; + TAMPA = 2016; +} + +enum AssetType { + CLOTHING = 0; + HEAD = 1; + MESH = 2; + PLACE = 3; + USER = 4; + HEADSHOT = 5; + XML = 6; +} + +message Signal { + google.protobuf.Timestamp nonce = 1; + string jobId = 2; + Operation operation = 3; + ClientVersion version = 4; + + message Place { + uint32 placeId = 1; + string script = 2; + uint32 expirationInSeconds = 3; + } + + message Thumbnail { + AssetType type = 1; + uint32 assetId = 2; + string accessKey = 3; + } + + repeated Place place = 5; + repeated Thumbnail thumbnail = 6; +} + +message Response { + Operation operation = 1; + bool success = 2; + string message = 3; + string data = 4; +} diff --git a/resources/views/admin/action-log.blade.php b/resources/views/admin/action-log.blade.php new file mode 100644 index 0000000..866b8ef --- /dev/null +++ b/resources/views/admin/action-log.blade.php @@ -0,0 +1,20 @@ + +
+ + +

{{ __('Action Log') }}

+

{{ __('A log for each moderation action. You can search by username to see the actions performed by a user.') }}

+ +
+ +
+ +
+
+ diff --git a/resources/views/admin/alert.blade.php b/resources/views/admin/alert.blade.php new file mode 100644 index 0000000..6aa74d7 --- /dev/null +++ b/resources/views/admin/alert.blade.php @@ -0,0 +1,20 @@ + +
+
+ +
+ +

{{ __('Create Site Alert') }}

+

{{ __('Creates a site alert viewable to all visitors on the :project website. Note that this is not permanent and goes away once the cache is reset.', ['project' => config('app.name')]) }}

+ +
+ + +
+
diff --git a/resources/views/admin/components/game-server/status.blade.php b/resources/views/admin/components/game-server/status.blade.php new file mode 100644 index 0000000..479891f --- /dev/null +++ b/resources/views/admin/components/game-server/status.blade.php @@ -0,0 +1,51 @@ + $gameServer->state() == GameServerState::Paused, + 'text-success' => $gameServer->state() == GameServerState::Online, + 'text-danger' => $gameServer->state() == GameServerState::Crashed, + 'text-info' => !$gameServer->is_set_up, + 'text-muted' => $gameServer->state() == GameServerState::Offline && $gameServer->is_set_up +]) id="status"> + $gameServer->state() == GameServerState::Paused, + 'fa-plug-circle-exclamation' => $gameServer->state() == GameServerState::Crashed, + 'fa-circle' => $gameServer->state() != GameServerState::Paused && $gameServer->state() != GameServerState::Crashed, + ])> + + + @if ($gameServer->is_set_up) + @if ($gameServer->state() == GameServerState::Online) + {{ __('Online') }} + @elseif ($gameServer->state() == GameServerState::Paused) + {{ __('Paused') }} + @elseif ($gameServer->state() == GameServerState::Crashed) + {{ __('Crashed') }} + @else + {{ __('Offline') }} + @endif + @else + {{ __('Setting Up') }} + @endif + + + + $gameServer->state() != GameServerState::Online]) id="running-place-jobs"> + | + + + @if ($gameServer->state() == GameServerState::Online) + {{ __(':amount running place job(s)', ['amount' => number_format(count($gameServer->getRunningPlaceJobs()))]) }} + @endif + + + + $gameServer->state() != GameServerState::Online]) id="running-thumbnail-jobs"> + | + + + @if ($gameServer->state() == GameServerState::Online) + {{ __(':amount running thumbnail job(s)', ['amount' => number_format(count($gameServer->getRunningThumbnailJobs()))]) }} + @endif + + diff --git a/resources/views/admin/components/game-server/syntax.blade.php b/resources/views/admin/components/game-server/syntax.blade.php new file mode 100644 index 0000000..bbb441c --- /dev/null +++ b/resources/views/admin/components/game-server/syntax.blade.php @@ -0,0 +1,5 @@ +{{-- lol --}} + +
+
1<appSettings>
2 <add key="MachineAddress" value="" />
3 <add key="BaseUrl" value="tadah.rocks/arbiter" />
4 <add key="AccessKey" value="{{ $key }}" />
5 <add key="BasePort" value="53640" />
6 <add key="BaseRccSoapPort" value="23640"/>
7 <add key="ServicePort" value="64989" />
8 <add key="MaximumJobs" value="5" />
9 <add key="MaximumJobsPerRcc" value="5"/>
10 <add key="MaximumRccProcesses" value="10"/>
11 <add key="PublicKeyPath" value="C:\tadah.pem"/>
12</appSettings>
1<appSettings>
2 <add key="MachineAddress" value="" />
3 <add key="BaseUrl" value="tadah.rocks/arbiter" />
4 <add key="AccessKey" value="{{ $key }}" />
5 <add key="BasePort" value="53640" />
6 <add key="BaseRccSoapPort" value="23640"/>
7 <add key="ServicePort" value="64989" />
8 <add key="MaximumJobs" value="5" />
9 <add key="MaximumJobsPerRcc" value="5"/>
10 <add key="MaximumRccProcesses" value="10"/>
11 <add key="PublicKeyPath" value="C:\tadah.pem"/>
12</appSettings>
+
diff --git a/resources/views/admin/components/game-server/topbar.blade.php b/resources/views/admin/components/game-server/topbar.blade.php new file mode 100644 index 0000000..5d9eaa4 --- /dev/null +++ b/resources/views/admin/components/game-server/topbar.blade.php @@ -0,0 +1,98 @@ +@may (GameServers::roleset(), GameServers::VIEW_VNC) + @if ($gameServer->has_vnc) + + @endif +@endmay + +@may (GameServers::roleset(), GameServers::DELETION) + +@endmay + +
+
+

{!! __(':name (:ip)', ['name' => e($gameServer->friendly_name ?? __('Unnamed')), 'ip' => e($gameServer->ip_address)]) !!}

+
+ +
+
+ @may (GameServers::roleset(), GameServers::CONNECT) + + + + @endmay + + @may (GameServers::roleset(), GameServers::VIEW_VNC) + @if ($gameServer->has_vnc) + + @endif + @endmay + + @may (GameServers::roleset(), GameServers::DELETION) + + @endmay + + @may (GameServers::roleset(), GameServers::MANAGE) + + + + @endmay +
+
+
+ +
+ +
diff --git a/resources/views/admin/components/mini-profile.blade.php b/resources/views/admin/components/mini-profile.blade.php new file mode 100644 index 0000000..6fa0560 --- /dev/null +++ b/resources/views/admin/components/mini-profile.blade.php @@ -0,0 +1,8 @@ +@if (is_null($user)) + {{ __('Nobody') }} +@else + +@endif diff --git a/resources/views/admin/components/panel/item.blade.php b/resources/views/admin/components/panel/item.blade.php new file mode 100644 index 0000000..8e17112 --- /dev/null +++ b/resources/views/admin/components/panel/item.blade.php @@ -0,0 +1,15 @@ +
+
+
+
+ @isset ($icon) + + @else + + @endisset + + {{ $action }} +
+
+
+
diff --git a/resources/views/admin/components/panel/row.blade.php b/resources/views/admin/components/panel/row.blade.php new file mode 100644 index 0000000..5732bee --- /dev/null +++ b/resources/views/admin/components/panel/row.blade.php @@ -0,0 +1,7 @@ +@if ($slot->isNotEmpty()) +

{{ $title }}

+
+
+ {{ $slot }} +
+@endif diff --git a/resources/views/admin/game-server/all.blade.php b/resources/views/admin/game-server/all.blade.php new file mode 100644 index 0000000..18c710f --- /dev/null +++ b/resources/views/admin/game-server/all.blade.php @@ -0,0 +1,25 @@ + +
+ @if (session()->has('success')) + + @endif + +
+ +
+ +

{{ __('Game Servers') }}

+
+ + +
+
diff --git a/resources/views/admin/game-server/create.blade.php b/resources/views/admin/game-server/create.blade.php new file mode 100644 index 0000000..fe6de8e --- /dev/null +++ b/resources/views/admin/game-server/create.blade.php @@ -0,0 +1,20 @@ + +
+
+ +
+ +

{{ __('Create Game Server') }}

+

{{ __('Only specify that a game server supports VNC if it is on SIPR. Please specify SIPR names rather than direct IP addresses.') }}

+ +
+ + +
+
diff --git a/resources/views/admin/game-server/manage.blade.php b/resources/views/admin/game-server/manage.blade.php new file mode 100644 index 0000000..8141de4 --- /dev/null +++ b/resources/views/admin/game-server/manage.blade.php @@ -0,0 +1,17 @@ + +
+
+ +
+ + + +
+
diff --git a/resources/views/admin/game-server/view.blade.php b/resources/views/admin/game-server/view.blade.php new file mode 100644 index 0000000..94432f2 --- /dev/null +++ b/resources/views/admin/game-server/view.blade.php @@ -0,0 +1,105 @@ + +
+ @if (session()->has('success')) +
+ {!! session()->get('success') !!} + +
+ @endif + +
+ +
+ + + + @if (!$game_server->is_set_up) +
+
{{ __('Finish Setting Up') }}
+
+

+ {!! __('In order to finish setting up this game server, please open up the Tadah.Arbiter\'s App.config and add the following access key like so:') !!} +

+ + + +

+ {{ __('Then, launch Tadah.Arbiter. Upon a successful connection, you will see this page automatically reload.') }} +

+
+
+ @else + + +
+
+
+
+                             $game_server->state() != GameServerState::Offline])>
+                            
$game_server->state() == GameServerState::Offline]) role="status"> + {{ __('Loading Game Server Console...') }} +
+ +
+
+ + + {{ __('Note: Timestamps are set in') }} UTC{{ substr($game_server->utc_offset, 0, -3) }} + +
+ +
+
+

{{ __('CPU Usage') }}

+
+ + {{ __('CPU usage statistics are unavailable while the game server is offline.') }} +
+
+ +
+

{{ __('RAM Usage') }}

+
+ + {{ __('RAM usage statistics are unavailable while the game server is offline.') }} +
+
+
+ +
+

{{ __('Network Usage') }}

+
+ + {{ __('Network Usage statistics are unavailable while the game server is offline.') }} +
+
+ + {{ __('View more statistics on Grafana') }} +
+ +
...
+
...
+
...
+
+ @endif +
+
diff --git a/resources/views/admin/panel.blade.php b/resources/views/admin/panel.blade.php new file mode 100644 index 0000000..7657f77 --- /dev/null +++ b/resources/views/admin/panel.blade.php @@ -0,0 +1,65 @@ + +
+
+ +
+ + {{-- Allowed colors are 'primary', 'secondary', 'success', 'danger', and 'warning'. --}} + + + @may (Users::roleset(), Users::MODERATION_VIEW_USER_PROFILE) + + @endmay + + @may (Users::roleset(), Users::MODERATION_GENERAL_BAN) + + @endmay + + @may (Users::roleset(), Users::MODERATION_IP_ADDRESS_BAN) + + @endmay + + + + @may (Forums::roleset(), Forums::MANAGE_CATEGORIES) + + @endmay + + @may (Forums::roleset(), Forums::GLOBAL_PRUNE_USER_POSTS) + + @endmay + + + + @may (GameServers::roleset(), GameServers::CREATE) + + @endmay + + @may (GameServers::roleset(), GameServers::VIEW) + + @endmay + + + @if ($user->isSuperAdmin()) + + + + + + @if (!app()->environment('production')) + @if (config('telescope.enabled')) + + @endif + + @if (env('HORIZON_ENABLED', false)) + + @endif + @endif + + @endif +
+
diff --git a/resources/views/admin/permissions.blade.php b/resources/views/admin/permissions.blade.php new file mode 100644 index 0000000..9f2409f --- /dev/null +++ b/resources/views/admin/permissions.blade.php @@ -0,0 +1,99 @@ + +
+ @if (session()->has('success')) +
+ {!! session()->get('success') !!} + +
+ @endif + + @if (session()->has('error')) +
+ {!! session()->get('error') !!} + +
+ @endif + +
+ +
+ +

{{ __('Modify User Permissions') }}

+

{{ __('A superadmin only utility that allows modification of user permissions. Note that superadmins have every permission by default, and that modifying any permission for them will be rendered moot.') }} +

+ +
+
{{ __('Permissions') }}
+
+
+ @csrf + + @if (!isset($user)) +
+ + $errors->has('username')]) id="username" name="username"> + + @error ('username') + + @enderror +
+ + + @else +
+ {!! __('Viewing :username\'s Permissions', ['username' => e($user->username), 'link' => route('users.profile', $user->id)]) !!} {{ __('(back)') }} + + @if ($user->isSuperAdmin()) +
+ {{ __('This user is a superadmin.') }} + @endif +
+ + + +
+ @foreach ($rolesets as $roleset) +
+

+ +

+ +
+
+ @foreach ($roleset->roles as $rolename => $role) +
+ may($roleset->name, $role, true))> + +
+ @endforeach +
+
+
+ @endforeach +
+ + + {{ __('Reset To Default') }} + @endif +
+ + @isset ($user) +
+ @csrf + +
+ @endif +
+
+
+
diff --git a/resources/views/admin/user/ban.blade.php b/resources/views/admin/user/ban.blade.php new file mode 100644 index 0000000..dcf5950 --- /dev/null +++ b/resources/views/admin/user/ban.blade.php @@ -0,0 +1,104 @@ + +
+ @if (session()->has('success')) +
+ {!! session()->get('success') !!} + +
+ @endif + + @if (session()->has('error')) +
+ {!! session()->get('error') !!} + +
+ @endif + +
+ +
+ +

{{ __('Ban User') }}

+

{{ __('Bans a user, either temporarily or permanently. You may also unban users.') }}

+ +
+ + + +
+
+ +
+ + @may (Users::roleset(), Users::MODERATION_PARDON_BAN) +
+ +
+ @endmay + + @may (Users::roleset(), Users::MODERATION_VIEW_BAN_LIST) +
+ +
+ @endmay +
+ + @may (Users::roleset(), Users::MODERATION_VIEW_BAN_LIST) + + @endmay +
+
diff --git a/resources/views/admin/user/ip-address-ban.blade.php b/resources/views/admin/user/ip-address-ban.blade.php new file mode 100644 index 0000000..af674d9 --- /dev/null +++ b/resources/views/admin/user/ip-address-ban.blade.php @@ -0,0 +1,63 @@ + +
+ @if (session()->has('success')) +
+ {!! session()->get('success') !!} + +
+ @endif + + @if (session()->has('error')) +
+ {!! session()->get('error') !!} + +
+ @endif + +
+ +
+ +

{{ __('IP Ban User') }}

+

{{ __('IP bans a user. They cannot access the website whatsoever once an IP ban is in effect. IP bans do not expire-- you must manually pardon a user. If you specify an e-mail address, all accounts with that email will have their IP banned.') }} +

+ + + +
+
+ +
+ + @may (Users::roleset(), Users::MODERATION_PARDON_IP_ADDRESS_BAN) +
+ +
+ @endmay + + @may (Users::roleset(), Users::MODERATION_VIEW_IP_ADDRESS_BAN_LIST) +
+ +
+ @endmay +
+
+
diff --git a/resources/views/admin/user/profile.blade.php b/resources/views/admin/user/profile.blade.php new file mode 100644 index 0000000..39b1661 --- /dev/null +++ b/resources/views/admin/user/profile.blade.php @@ -0,0 +1,104 @@ + +
+ @if (session()->has('success')) +
+ {!! session()->get('success') !!} + +
+ @endif + + @if (session()->has('error')) +
+ {!! session()->get('error') !!} + +
+ @endif + +
+ +
+ +

{{ __('User Profile') }}

+

{{ __('An in-depth view of a user.') }} + +

+ + @isset ($user) + + +
+
+
+
+ {{ $user->username }} +
+
+

+ {{ __('E-Mail') }}: {{ $user->email }} +
+ {{ __('Last IP') }}: {{ $user->register_ip }} +
+ {{ __('Register IP') }}: {{ $user->last_ip }} +
+ {{ __('Discord ID') }}: @if ($user->hasLinkedDiscordAccount()) {{ $user->discord_id }} @else {!! __('None') !!} @endif +
+ {{ __('2FA') }}: {{ ($user->two_factor_confirmed ? __('Enabled') : __('Disabled')) }} +
+ {{ __('Banned') }}: {{ ($user->isBanned() ? __('Yes') : __('No')) }} +
+ {{ __('Joindate') }}: {{ $user->created_at->format('m/d/Y h:i:s A (T)') }} +

+
+
+
+ + @may (Users::roleset(), Users::MODERATION_PARDON_IP_ADDRESS_BAN) +
+ +
+ @endmay + + @may (Users::roleset(), Users::MODERATION_VIEW_IP_ADDRESS_BAN_LIST) +
+ +
+ @endmay +
+ @else +
+
{{ __('User Profile') }}
+
+
+ @csrf + +
+ + +
+ + +
+
+
+ @endisset + +
+
diff --git a/resources/views/auth/2fa.blade.php b/resources/views/auth/2fa.blade.php new file mode 100644 index 0000000..10e4b4e --- /dev/null +++ b/resources/views/auth/2fa.blade.php @@ -0,0 +1,21 @@ + +
+ @csrf + +
+ + +
+ $errors->has('code')]) name="code" id="code" required> +
+ + @error ('code') + + @enderror +
+ + +
+ diff --git a/resources/views/auth/account-disabled.blade.php b/resources/views/auth/account-disabled.blade.php new file mode 100644 index 0000000..913ff29 --- /dev/null +++ b/resources/views/auth/account-disabled.blade.php @@ -0,0 +1,71 @@ + + @if ($ban->is_termination || $ban->is_poison_ban) +

{{ __('Account Deleted') }}

+ @elseif ($ban->is_warning) +

{{ __('Warning') }}

+ @else +

{{ __('Banned for :duration', ['duration' => $ban->duration]) }}

+ @endif + +

+ {!! __('Our content monitors have determined that your behavior at :project has been in violation of our Terms of Service.', ['project' => config('app.name'), 'link' => route('document', 'tos')]) !!} +

+ +

+ {!! __('Reviewed: :time', ['time' => e($ban->reviewed)]) !!} +

+ +

+ {!! __('Moderator Note: :note', ['note' => e($ban->moderator_note)]) !!} +

+ + @if (!is_null($ban->offensive_item)) +
+ {{ __('Offensive Item:') }} + +
+ @parsedown($ban->offensive_item) +
+
+ @endisset + +

+ @if ($ban->expired) + {!! __('You may re-activate your account by agreeing to our Terms of Service.', ['link' => route('document', 'tos')]) !!} + @else + @if ($ban->is_termination) + {{ __('Your account has been terminated.') }} + @elseif ($ban->is_poison_ban) + {{ __('Your account has been terminated, and account creation has been disabled.') }} + @else + {{ __('Your account has been disabled for :duration. You may reactivate it after :reactivation.', ['duration' => e($ban->duration), 'reactivation' => e($ban->reactivation_date)]) }} + @endif + @endif +

+ + @if (!$ban->expired && $ban->is_appealable) +

+ {!! __('If you wish to appeal, please send an email to :email.', ['email' => getInboxAddress(), 'mailto' => 'mailto:' . getInboxAddress()]) !!} +

+ @endif + +
+ @if ($ban->expired) +
+ + +
+ +
+ @csrf + +
+
diff --git a/resources/views/auth/confirm-password.blade.php b/resources/views/auth/confirm-password.blade.php new file mode 100644 index 0000000..e95c46d --- /dev/null +++ b/resources/views/auth/confirm-password.blade.php @@ -0,0 +1,22 @@ + +
+ @csrf + +
+ + +
+ $errors->has('password')]) name="password" id="password" required> + +
+ + @error ('password') + + @enderror +
+ + +
+ diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php new file mode 100644 index 0000000..07afc5b --- /dev/null +++ b/resources/views/auth/login.blade.php @@ -0,0 +1,33 @@ + + + {!! htmlScriptTagJsApi() !!} + + +
+ @csrf + +
+ + $errors->has('username')]) name="username" id="username" value="{{ old('username') }}" required> + + @error ('username') + + @enderror +
+ +
+ + +
+ +
+ + +
+ +
+ {{ __('Forgot your password?') }} + {!! htmlFormButton('' . __('Login'), ['class' => 'btn btn-primary']) !!} +
+
+ diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php new file mode 100644 index 0000000..3098fd8 --- /dev/null +++ b/resources/views/auth/register.blade.php @@ -0,0 +1,36 @@ + + + + + +
+
+ + +
+
+ +
+ +
+ + +
+
+ @include ('partials.language-dropdown') +
+
+
+
+
+
+
diff --git a/resources/views/auth/request-password.blade.php b/resources/views/auth/request-password.blade.php new file mode 100644 index 0000000..b35fca2 --- /dev/null +++ b/resources/views/auth/request-password.blade.php @@ -0,0 +1,24 @@ + + + {!! htmlScriptTagJsApi() !!} + + +
+ @csrf + +
+ + $errors->has('email')]) name="email" id="email" value="{{ old('email') }}" required> + + @error ('email') + + @enderror +
+ + {!! htmlFormButton('' . __('Send Password Reset Link'), ['class' => 'btn btn-primary w-100']) !!} + + @error ('g-recaptcha-response') + {{ __('An unexpected error occurred. Please try again.') }} + @enderror + + diff --git a/resources/views/auth/reset-password.blade.php b/resources/views/auth/reset-password.blade.php new file mode 100644 index 0000000..e268f21 --- /dev/null +++ b/resources/views/auth/reset-password.blade.php @@ -0,0 +1,39 @@ + +
+ + + @csrf + +
+ + +
+ $errors->has('password')]) name="password" id="password" required> + +
+ + @error ('password') + + @enderror +
+ +
+ + +
+ $errors->has('password_confirmation')]) name="password_confirmation" id="password_confirmation" required> + +
+ + @error ('password_confirmation') + + @enderror +
+ + +
+ diff --git a/resources/views/auth/update-email.blade.php b/resources/views/auth/update-email.blade.php new file mode 100644 index 0000000..ad49fef --- /dev/null +++ b/resources/views/auth/update-email.blade.php @@ -0,0 +1,35 @@ + + {!! __('Your E-Mail address is currently :email.', ['email' => e(Auth::user()->email)]) !!} + +
+ @csrf + +
+ + $errors->has('email')]) name="email" id="email" required> + + @error ('email') + + @enderror +
+ +
+ + +
+ $errors->has('current_password')]) name="current_password" id="current_password" required> + +
+ + @error ('current_password') + + @enderror +
+ + +
+ diff --git a/resources/views/auth/verify-email.blade.php b/resources/views/auth/verify-email.blade.php new file mode 100644 index 0000000..b34d480 --- /dev/null +++ b/resources/views/auth/verify-email.blade.php @@ -0,0 +1,40 @@ + + + {!! htmlScriptTagJsApi() !!} + + +
+

{{ __('Please verify your email') }}

+

+ {{ __("You're almost there! We sent an email to") }}
+ {{ Auth::user()->email }}

+ + {{ __("Just click on the link in that email to complete your signup.") }}
+ {!! __("If you don't see it, you may need to check your spam folder.") !!}

+ + {{ __("Still can't find the email?") }} +

+ +
+ @csrf + {!! htmlFormButton(__('Resend Email'), ['class' => 'btn btn-primary btn-lg']) !!} +
+ +

+ {{ __('Need help?') }} {{ __('Contact Us') }} +

+
+ + + + + diff --git a/resources/views/catalog/index.blade.php b/resources/views/catalog/index.blade.php new file mode 100644 index 0000000..cede89d --- /dev/null +++ b/resources/views/catalog/index.blade.php @@ -0,0 +1,4 @@ + +
+
+
diff --git a/resources/views/components/user/headshot.blade.php b/resources/views/components/user/headshot.blade.php new file mode 100644 index 0000000..2ce7b11 --- /dev/null +++ b/resources/views/components/user/headshot.blade.php @@ -0,0 +1 @@ +{{ $user->username }} diff --git a/resources/views/components/user/thumbnail.blade.php b/resources/views/components/user/thumbnail.blade.php new file mode 100644 index 0000000..a392319 --- /dev/null +++ b/resources/views/components/user/thumbnail.blade.php @@ -0,0 +1 @@ +{{ $user->username }} diff --git a/resources/views/develop/index.blade.php b/resources/views/develop/index.blade.php new file mode 100644 index 0000000..ff1f23e --- /dev/null +++ b/resources/views/develop/index.blade.php @@ -0,0 +1,7 @@ + +
+

{{ __('Develop') }}

+
+ +
+
diff --git a/resources/views/document/privacy.blade.php b/resources/views/document/privacy.blade.php new file mode 100644 index 0000000..7ae04f4 --- /dev/null +++ b/resources/views/document/privacy.blade.php @@ -0,0 +1,10 @@ + +
+
+
{{ __('Privacy') }}
+
+ TODO +
+
+
+
diff --git a/resources/views/document/rules.blade.php b/resources/views/document/rules.blade.php new file mode 100644 index 0000000..2ac67ad --- /dev/null +++ b/resources/views/document/rules.blade.php @@ -0,0 +1,10 @@ + +
+
+
{{ __('Rules') }}
+
+ TODO +
+
+
+
diff --git a/resources/views/document/statistics.blade.php b/resources/views/document/statistics.blade.php new file mode 100644 index 0000000..ca52b9c --- /dev/null +++ b/resources/views/document/statistics.blade.php @@ -0,0 +1,10 @@ + +
+
+
{{ __('Statistics') }}
+
+ TODO +
+
+
+
diff --git a/resources/views/document/tos.blade.php b/resources/views/document/tos.blade.php new file mode 100644 index 0000000..9218f87 --- /dev/null +++ b/resources/views/document/tos.blade.php @@ -0,0 +1,10 @@ + +
+
+
{{ __('Terms of Service') }}
+
+ TODO +
+
+
+
diff --git a/resources/views/errors/401.blade.php b/resources/views/errors/401.blade.php new file mode 100644 index 0000000..81e1ffe --- /dev/null +++ b/resources/views/errors/401.blade.php @@ -0,0 +1 @@ + diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php new file mode 100644 index 0000000..d5b9c28 --- /dev/null +++ b/resources/views/errors/403.blade.php @@ -0,0 +1 @@ + diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php new file mode 100644 index 0000000..3c856d8 --- /dev/null +++ b/resources/views/errors/404.blade.php @@ -0,0 +1 @@ + diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php new file mode 100644 index 0000000..610399f --- /dev/null +++ b/resources/views/errors/419.blade.php @@ -0,0 +1 @@ + diff --git a/resources/views/errors/429.blade.php b/resources/views/errors/429.blade.php new file mode 100644 index 0000000..adce8e5 --- /dev/null +++ b/resources/views/errors/429.blade.php @@ -0,0 +1 @@ + diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php new file mode 100644 index 0000000..1252570 --- /dev/null +++ b/resources/views/errors/500.blade.php @@ -0,0 +1 @@ + diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php new file mode 100644 index 0000000..ea9c4b1 --- /dev/null +++ b/resources/views/errors/503.blade.php @@ -0,0 +1 @@ + diff --git a/resources/views/forum/category.blade.php b/resources/views/forum/category.blade.php new file mode 100644 index 0000000..d67d7f2 --- /dev/null +++ b/resources/views/forum/category.blade.php @@ -0,0 +1,19 @@ + +
+
+
+ @include('forum.sidebar') +
+
+
+

{{ $category->name }}

+

{{ $category->description }}

+
+ + +
+
+
+
+
+
diff --git a/resources/views/forum/index.blade.php b/resources/views/forum/index.blade.php new file mode 100644 index 0000000..00a839a --- /dev/null +++ b/resources/views/forum/index.blade.php @@ -0,0 +1,18 @@ + +
+
+
+ @include('forum.sidebar') +
+
+
+

{{ __(':project Forum', ['project' => config('app.name')]) }}

+
+ + +
+
+
+
+
+
diff --git a/resources/views/forum/sidebar.blade.php b/resources/views/forum/sidebar.blade.php new file mode 100644 index 0000000..d38de1c --- /dev/null +++ b/resources/views/forum/sidebar.blade.php @@ -0,0 +1,25 @@ +
+
+ @if (Auth::check()) + @may (Users::roleset(), Forums::CREATE_THREADS) +
+ +
+ @endmay + @endif +
+
+
+
+ + +
+ {{ __('Forum Categories') }} + @foreach ($categories as $category) + + {{$category->name}} + + @endforeach +
+
+
\ No newline at end of file diff --git a/resources/views/forum/thread.blade.php b/resources/views/forum/thread.blade.php new file mode 100644 index 0000000..6804ae2 --- /dev/null +++ b/resources/views/forum/thread.blade.php @@ -0,0 +1,11 @@ + +
+
+
+
+ +
+
+
+
+
diff --git a/resources/views/games/index.blade.php b/resources/views/games/index.blade.php new file mode 100644 index 0000000..b7e6e0c --- /dev/null +++ b/resources/views/games/index.blade.php @@ -0,0 +1,6 @@ + +
+

Games

+ +
+
diff --git a/resources/views/item/configure.blade.php b/resources/views/item/configure.blade.php new file mode 100644 index 0000000..0b514ed --- /dev/null +++ b/resources/views/item/configure.blade.php @@ -0,0 +1,23 @@ + +
+

{{ __('Configure :asset_type ', ['asset_type' => __($asset->type->fullname())]) }}

+
+
+
+
+
+
+
+ {{ $asset->name }} +
+
+
+
+ +
+
+
+
+
+
+
diff --git a/resources/views/item/view.blade.php b/resources/views/item/view.blade.php new file mode 100644 index 0000000..4c0e84d --- /dev/null +++ b/resources/views/item/view.blade.php @@ -0,0 +1,99 @@ + +
+
+
+
+
+
+
+
+ {{ $asset->name }} +
+
+
+
+
+
+
+

{{ $asset->name }}

+

By {{ $asset->creator->username }}

+
+ @if ($asset->ownership() || $asset->canConfigure()) +
+ +
+ @endif +
+
+
+ @if (!$asset->is_for_sale) +
+ @if ($asset->ownership()) +

{{ __('You already own this item.') }}

+ @else +

{{ __('This item is not currently for sale.') }}

+ @endif +
+ @else + @if ($asset->ownership()) +
+

{{ __('You already own this item.') }}

+
+ @endif +
{{ _('Price') }}
+
+
+ @if ($asset->price > 0) +

{{ number_format($asset->price) }}

+ @else +

{{ __('Free') }}

+ @endif + + @if (!$asset->ownership()) + + @endif +
+
+ @endif + +
{{ __('Type') }}
+
{{ __($asset->type->fullname()) }}
+ +
{{ __('Genre') }}
+
{{ __($asset->genre->fullname()) }}
+ +
{{ __('Created') }}
+
{{ date('M d, Y g:i:s A', strtotime($asset->created_at)) }}
+ +
{{ __('Updated') }}
+
{{ date('M d, Y g:i:s A', strtotime($asset->updated_at)) }}
+ +
{{ __('Description') }}
+
"{{ $asset->description }}"
+
+
+
+
+
+ +
+
+
diff --git a/resources/views/landing.blade.php b/resources/views/landing.blade.php new file mode 100644 index 0000000..10e9458 --- /dev/null +++ b/resources/views/landing.blade.php @@ -0,0 +1,28 @@ + + + + + + + + + + +
+ + +
+ +

+ {{ __('A diverse community of creative people.') }} +

+ {{ __('Login') }} + {{ __('Sign Up') }} +
+
+
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php new file mode 100644 index 0000000..ae044b6 --- /dev/null +++ b/resources/views/layouts/app.blade.php @@ -0,0 +1,58 @@ + + + + + + + + + + + {{ $title }} + + + + @isset ($head) + {{ $head }} + @endif + + + + @if ($fluff) + @include ('partials.navigation') + @endif + + @if ($fluff) +
+
+ + + +
+ + {{ $slot }} +
+ @else + {{ $slot }} + @endif + + @if ($fluff) + @include ('partials.footer') + @endif + + + + + @isset ($scripts) + {{ $scripts }} + @endisset + + diff --git a/resources/views/layouts/auth.blade.php b/resources/views/layouts/auth.blade.php new file mode 100644 index 0000000..d8b0996 --- /dev/null +++ b/resources/views/layouts/auth.blade.php @@ -0,0 +1,43 @@ + + @isset ($head) + + {{ $head }} + + @endisset + +
+
+ @if (session('status')) + + @endif + +
+
+ +
+ +
+
+ {{ $slot }} +
+
+ + @isset ($bottom) + {{ $bottom }} + @else +
+ @include ('partials.language-dropdown') +
+ @endisset +
+
+
+
diff --git a/resources/views/layouts/error.blade.php b/resources/views/layouts/error.blade.php new file mode 100644 index 0000000..0ea1ba1 --- /dev/null +++ b/resources/views/layouts/error.blade.php @@ -0,0 +1,24 @@ + +
+
+
+
+
+ +
+

{{ $code }}

+ {{ $message }} +
+ + {{ __('Home') }} +
+
+
+ +
+ @include ('partials.language-dropdown') +
+
+
+
+
diff --git a/resources/views/livewire/account/moderation-history.blade.php b/resources/views/livewire/account/moderation-history.blade.php new file mode 100644 index 0000000..3f887d3 --- /dev/null +++ b/resources/views/livewire/account/moderation-history.blade.php @@ -0,0 +1,28 @@ +
+ @if ($bans->total() == 0) + {{ __('You haven\'t had any moderation action taken against you in the past. Hooray!') }} + @else +
+ + + + + + + + + + @foreach ($bans as $ban) + + + + + + @endforeach + +
{{ __('Moderator note') }}{{ __('Reviewed on') }}{{ __('Expiry date') }}
{{ $ban->moderator_note }}{{ $ban->created_at->format('m/d/Y h:i:s A (T)') }}{{ is_null($ban->expiry_date) ? ($ban->is_poison_ban ? __('Poison') : ($ban->is_warning ? __('Warning') : __('Termination'))) : seconds2human($ban->expiry_date->timestamp - $ban->created_at->timestamp, true) }}
+ + {{ $bans->links() }} +
+ @endif +
diff --git a/resources/views/livewire/account/two-factor-authentication.blade.php b/resources/views/livewire/account/two-factor-authentication.blade.php new file mode 100644 index 0000000..1666cf1 --- /dev/null +++ b/resources/views/livewire/account/two-factor-authentication.blade.php @@ -0,0 +1,18 @@ +
+
+
+ @if (Auth::user()->two_factor_secret) +

{{ __('Two factor authentication is enabled!') }}

+ @else +

{{ __('Two factor authentication is disabled.') }}

+ @endif +

{{ __('Two factor authentication requires you to take an extra step when logging in to your :project account. Some actions on :project may require you to have two factor authentication enabled.', ['project' => config('app.name')]) }}

+ + @if (Auth::user()->two_factor_secret) +

+ @else +

+ @endif +
+
+
diff --git a/resources/views/livewire/account/update-blurb.blade.php b/resources/views/livewire/account/update-blurb.blade.php new file mode 100644 index 0000000..22bcf86 --- /dev/null +++ b/resources/views/livewire/account/update-blurb.blade.php @@ -0,0 +1,16 @@ +
+ @csrf + +
+ + + + @error ('blurb') + + @enderror +
+ + +
diff --git a/resources/views/livewire/account/update-password.blade.php b/resources/views/livewire/account/update-password.blade.php new file mode 100644 index 0000000..64309d5 --- /dev/null +++ b/resources/views/livewire/account/update-password.blade.php @@ -0,0 +1,54 @@ +
+
+
+ @csrf + +
+ + +
+ $errors->has('current_password')]) wire:model.lazy="current_password" id="current_password" required> + + + @error ('current_password') + + @enderror +
+
+ +
+ + +
+ $errors->has('password')]) wire:model.lazy="password" id="password" required> + + + @error ('password') + + @enderror +
+
+ +
+ + +
+ $errors->has('password_confirmation')]) wire:model.lazy="password_confirmation" id="password_confirmation" required> + + + @error ('password_confirmation') + + @enderror +
+
+ + +
+
+
diff --git a/resources/views/livewire/account/update-username.blade.php b/resources/views/livewire/account/update-username.blade.php new file mode 100644 index 0000000..5e355ba --- /dev/null +++ b/resources/views/livewire/account/update-username.blade.php @@ -0,0 +1,45 @@ +
+ + +
+ @csrf + + + + +
+
diff --git a/resources/views/livewire/admin/action-log.blade.php b/resources/views/livewire/admin/action-log.blade.php new file mode 100644 index 0000000..cc7e95d --- /dev/null +++ b/resources/views/livewire/admin/action-log.blade.php @@ -0,0 +1,39 @@ +
+
+ + +
+ +
+ @if ($logs->total() == 0) +
+ +

{{ __('No records found') }}

+

{{ __('There were no matches available for your query') }}

+
+ @else +
+ + + + + + + + + + @foreach ($logs as $log) + + + + + + @endforeach + +
{{ __('Administrator') }}{{ __('Action') }}{{ __('Date') }}
{{ $log->format() }}{{ date('M d, Y g:i:s A', strtotime($log->created_at)) }}
+ + {{ $logs->links() }} +
+ @endif +
+
diff --git a/resources/views/livewire/admin/alert.blade.php b/resources/views/livewire/admin/alert.blade.php new file mode 100644 index 0000000..c969f3c --- /dev/null +++ b/resources/views/livewire/admin/alert.blade.php @@ -0,0 +1,46 @@ +
+
+ @csrf + +
+ + $errors->has('text')]) type="text" wire:model.lazy="text" id="text" placeholder="{{ __('Kyle Wagness has hacked this website.') }}" required> + + @error ('text') + + @enderror +
+ +
+ + $errors->has('color')]) type="color" wire:model.defer="color" value="#ff0000" required> + + @error ('color') + + @enderror +
+ +
+ + +
+ $errors->has('expiry')]) wire:model.lazy="expiry" id="expiry"> + +
+ + @error ('expiry') + + @enderror +
+ + +
+
diff --git a/resources/views/livewire/admin/ban/ip-address-search.blade.php b/resources/views/livewire/admin/ban/ip-address-search.blade.php new file mode 100644 index 0000000..602c578 --- /dev/null +++ b/resources/views/livewire/admin/ban/ip-address-search.blade.php @@ -0,0 +1,47 @@ +
+
+ + +
+ +
+ @if ($bans->total() == 0) +
+ +

{{ __('No results found') }}

+

{{ __('There were no matches available for your query') }}

+
+ @else +
+ + + + + + + + + + + + + + @foreach ($bans as $ban) + + + + + + + + + @endforeach + +
{{ __('IP Address') }}{{ __('Identifier') }}{{ __('Internal Reason') }}{{ __('In Effect') }}{{ __('Moderator') }}{{ __('Pardoner') }}{{ __('Reviewed On') }}
{{ $ban->ip_address }}{{ $ban->criterium }} + {!! is_null($ban->internal_reason) ? __('No reason specified.') : '' . e($ban->internal_reason) . '' !!}{!! ($ban->is_active ? __('Active') : __('Inactive')) !!}{{ $ban->created_at->format('m/d/Y') }}
+ + {{ $bans->links() }} +
+ @endif +
+
diff --git a/resources/views/livewire/admin/ban/ip-address.blade.php b/resources/views/livewire/admin/ban/ip-address.blade.php new file mode 100644 index 0000000..e2e232f --- /dev/null +++ b/resources/views/livewire/admin/ban/ip-address.blade.php @@ -0,0 +1,31 @@ +
+
+ @csrf + +
+ + $errors->has('identifier')]) type="text" required> + + @error ('username') + + @enderror +
+ +
+ + $errors->has('internal_reason')]) type="text"> + + @error ('internal_reason') + + @enderror +
+ + +
+
diff --git a/resources/views/livewire/admin/ban/pardon-ip-address.blade.php b/resources/views/livewire/admin/ban/pardon-ip-address.blade.php new file mode 100644 index 0000000..de98c9e --- /dev/null +++ b/resources/views/livewire/admin/ban/pardon-ip-address.blade.php @@ -0,0 +1,20 @@ +
+
+ @csrf + +
+ + $errors->has('ip_address')]) type="text" required> + + @error ('ip_address') + + @enderror +
+ + +
+
diff --git a/resources/views/livewire/admin/ban/pardon.blade.php b/resources/views/livewire/admin/ban/pardon.blade.php new file mode 100644 index 0000000..893cda6 --- /dev/null +++ b/resources/views/livewire/admin/ban/pardon.blade.php @@ -0,0 +1,33 @@ +
+

{{ __('Only manually pardon users in the case of an error. If you wish to lift poison bans, please use the username of the patient zero.') }}

+ +
+ @csrf + +
+ + $errors->has('username')]) type="text" required> + + @error ('username') + + @enderror +
+ +
+ + $errors->has('pardon_reason')]) type="text" required> + + @error ('pardon_reason') + + @enderror +
+ + +
+
diff --git a/resources/views/livewire/admin/ban/search.blade.php b/resources/views/livewire/admin/ban/search.blade.php new file mode 100644 index 0000000..66a2058 --- /dev/null +++ b/resources/views/livewire/admin/ban/search.blade.php @@ -0,0 +1,47 @@ +
+
+ + +
+ +
+ @if ($bans->total() == 0) +
+ +

{{ __('No results found') }}

+

{{ __('There were no matches available for your query') }}

+
+ @else +
+ + + + + + + + + + + + + + @foreach ($bans as $ban) + + + + + + + + + @endforeach + +
{{ __('User') }}{{ __('Details') }}{{ __('In Effect') }}{{ __('Moderator') }}{{ __('Pardoner') }}{{ __('Reviewed On') }}{{ __('Duration') }}
+ {!! ($ban->is_active ? __('Active') : __('Inactive')) !!}{{ $ban->created_at->format('m/d/Y') }}{{ is_null($ban->expiry_date) ? ($ban->is_poison_ban ? __('Poison') : ($ban->is_warning ? __('Warning') : __('Termination') )) : seconds2human($ban->expiry_date->timestamp - $ban->created_at->timestamp, true) }}
+ + {{ $bans->links() }} +
+ @endif +
+
diff --git a/resources/views/livewire/admin/ban/user.blade.php b/resources/views/livewire/admin/ban/user.blade.php new file mode 100644 index 0000000..acdb83e --- /dev/null +++ b/resources/views/livewire/admin/ban/user.blade.php @@ -0,0 +1,89 @@ +
+
+ @csrf + +
+ + $errors->has('username')]) type="text" required> + + @error ('username') + + @enderror +
+ +
+ + $errors->has('moderator_note')]) type="text" required> + + @error ('moderator_note') + + @enderror +
+ +
+ + $errors->has('internal_reason')]) required> + + @error ('internal_reason') + + @enderror +
+ +
+ + + + @error ('offensive_item') + + @enderror +
+ +
+ + +
+ +
+ +
+ $errors->has('custom_expiry_date')]) type="text"> + +
+ + @error ('custom_expiry_date') + + @enderror +
+ +
+ + +
+ + +
+
diff --git a/resources/views/livewire/admin/game-server/all.blade.php b/resources/views/livewire/admin/game-server/all.blade.php new file mode 100644 index 0000000..511c88a --- /dev/null +++ b/resources/views/livewire/admin/game-server/all.blade.php @@ -0,0 +1,28 @@ + +
+
+ @forelse ($servers as $game_server) +
!$loop->first]) style="transform: rotate(0) !important"> + + +
+
+ +
+ +
+

{!! __(':name (:ip)', ['name' => e($game_server->friendly_name ?? __('Unnamed')), 'ip' => e($game_server->ip_address)]) !!}

+ +
+ +
+
+
+
+ @empty + {!! __('No game servers have been created yet. Why don\'t you make one?', ['link' => route('admin.game-server.create')]) !!} + @endforelse +
+ + {{ $servers->links() }} +
diff --git a/resources/views/livewire/admin/game-server/create.blade.php b/resources/views/livewire/admin/game-server/create.blade.php new file mode 100644 index 0000000..3c26e8e --- /dev/null +++ b/resources/views/livewire/admin/game-server/create.blade.php @@ -0,0 +1,82 @@ +
+
+ @csrf + +
+ + $errors->has('ip_address')]) type="text" wire:model.lazy="ip_address" id="ip_address" required> + + @error ('ip_address') + + @enderror +
+ +
+ + $errors->has('maximum_place_jobs')]) type="number" wire:model.lazy="maximum_place_jobs" id="maximum_place_jobs" required> + + @error ('maximum_place_jobs') + + @enderror +
+ +
+ + $errors->has('maximum_thumbnail_jobs')]) type="number" wire:model.lazy="maximum_thumbnail_jobs" id="maximum_thumbnail_jobs" required> + + @error ('maximum_thumbnail_jobs') + + @enderror +
+ +
+ + $errors->has('port')]) type="number" wire:model.lazy="port" id="port" required> + + @error ('port') + + @enderror +
+ +
+
+ + +
+ +
+ + $errors->has('vnc_port')]) type="number" wire:model.lazy="vnc_port" id="vnc_port"> + + @error ('vnc_port') + + @enderror +
+ +
+ + $errors->has('vnc_password')]) type="number" wire:model.lazy="vnc_password" id="vnc_password"> + + @error ('vnc_password') + + @enderror +
+
+ + +
+
diff --git a/resources/views/livewire/admin/game-server/delete.blade.php b/resources/views/livewire/admin/game-server/delete.blade.php new file mode 100644 index 0000000..4802def --- /dev/null +++ b/resources/views/livewire/admin/game-server/delete.blade.php @@ -0,0 +1,21 @@ +
+ + +
+ @csrf + + + + +
+
diff --git a/resources/views/livewire/admin/game-server/manage.blade.php b/resources/views/livewire/admin/game-server/manage.blade.php new file mode 100644 index 0000000..f1f06fe --- /dev/null +++ b/resources/views/livewire/admin/game-server/manage.blade.php @@ -0,0 +1,80 @@ +
+
+ @csrf + +
+ + $errors->has('ip_address')]) type="text" wire:model.lazy="ip_address" id="ip_address" required> + + @error ('ip_address') + + @enderror +
+ +
+ + $errors->has('maximum_place_jobs')]) type="number" wire:model.lazy="maximum_place_jobs" id="maximum_place_jobs" required> + + @error ('maximum_place_jobs') + + @enderror +
+ +
+ + $errors->has('maximum_thumbnail_jobs')]) type="number" wire:model.lazy="maximum_thumbnail_jobs" id="maximum_thumbnail_jobs" required> + + @error ('maximum_thumbnail_jobs') + + @enderror +
+ +
+ + $errors->has('port')]) type="number" wire:model.lazy="port" id="port" required> + + @error ('port') + + @enderror +
+ +
+ + +
+ +
+ + $errors->has('vnc_port')]) type="number" wire:model.lazy="vnc_port" id="vnc_port"> + + @error ('vnc_port') + + @enderror +
+ +
+ + $errors->has('vnc_password')]) type="number" wire:model.lazy="vnc_password" id="vnc_password"> + + @error ('vnc_password') + + @enderror +
+ + +
+
diff --git a/resources/views/livewire/admin/user/associated-accounts.blade.php b/resources/views/livewire/admin/user/associated-accounts.blade.php new file mode 100644 index 0000000..24adf47 --- /dev/null +++ b/resources/views/livewire/admin/user/associated-accounts.blade.php @@ -0,0 +1,28 @@ +
+ @if ($accounts->total() == 0) + {{ __('This user does not have any alternate accounts.') }} + @else +
+ + + + + + + + + + @foreach ($accounts as $account) + + + + + @endforeach + +
{{ __('User') }}{{ __('Invite Key') }}{{ __('Joindate') }}
{!! is_null($account->invite_key) ? 'None' : '' . e($account->invite_key) . '' !!} + {{ $account->created_at->format('m/d/Y h:i:s A (T)') }}
+ + {{ $accounts->links() }} +
+ @endif +
diff --git a/resources/views/livewire/admin/user/moderation-history.blade.php b/resources/views/livewire/admin/user/moderation-history.blade.php new file mode 100644 index 0000000..843e575 --- /dev/null +++ b/resources/views/livewire/admin/user/moderation-history.blade.php @@ -0,0 +1,28 @@ +
+ @if ($bans->total() == 0) + {{ __('This user has not had moderation action taken against them in the past.') }} + @else +
+ + + + + + + + + + @foreach ($bans as $ban) + + + + + + @endforeach + +
{{ __('Moderator note') }}{{ __('Reviewed on') }}{{ __('Expiry date') }}
{{ $ban->moderator_note }}{{ $ban->created_at->format('m/d/Y h:i:s A (T)') }}{{ is_null($ban->expiry_date) ? ($ban->is_poison_ban ? __('Poison') : ($ban->is_warning ? __('Warning') : __('Termination') )) : collapseSeconds($ban->expiry_date->timestamp - $ban->created_at->timestamp) }}
+ + {{ $bans->links() }} +
+ @endif +
diff --git a/resources/views/livewire/auth/register.blade.php b/resources/views/livewire/auth/register.blade.php new file mode 100644 index 0000000..3e1158b --- /dev/null +++ b/resources/views/livewire/auth/register.blade.php @@ -0,0 +1,138 @@ +
+
+
+
+
+
+ @csrf + +
+ + + + @error ('username') + + @enderror +
+ +
+ + + + @error ('email') + + @enderror +
+ +
+ + +
+ + +
+ + @error ('password') + + @else +
+ {!! __('Passwords are stored via Argon2id.') !!} +
+ @enderror +
+ +
+ + +
+ + +
+ + @error ('password_confirmation') + + @enderror +
+ + @if (config('tadah.invite_keys_required')) +
+ + + + @error ('key') + + @enderror +
+ @endif + +
+ + +
+ +
+ + +
+ +
+ {{ __('Already have an account?') }} + +
+
+
+
+ +
+
+
+

{!! __("Welcome to :project! In order to register, you'll need to do the following:", ['project' => e(config('app.name'))]) !!}

+ +

+ + + {{ __('Choose an appropriate, alphanumeric username less than 20 characters') }} +
+ + + + {{ __('Provide a valid E-Mail Address (will be verified)') }} +
+ + + + {{ __('Create a strong password, more than 12 characters') }} +
+ + + + {{ __('Confirm your password') }} +
+ + @if (config('tadah.invite_keys_required')) + + + {{ __('Enter your invite key') }} +
+ @endif + + + + {{ __('Sign the documents') }} +
+

+
+
+
+
+
diff --git a/resources/views/livewire/dashboard/best-friends.blade.php b/resources/views/livewire/dashboard/best-friends.blade.php new file mode 100644 index 0000000..e1f55b5 --- /dev/null +++ b/resources/views/livewire/dashboard/best-friends.blade.php @@ -0,0 +1,14 @@ +
+
+

{{ __('My Best Friends') }}

+ +
+ +
+
+ {{ __('Loading...') }} +
+
+
diff --git a/resources/views/livewire/dashboard/feed.blade.php b/resources/views/livewire/dashboard/feed.blade.php new file mode 100644 index 0000000..90e0241 --- /dev/null +++ b/resources/views/livewire/dashboard/feed.blade.php @@ -0,0 +1,61 @@ +
+
+ $errors->first('status')]) aria-label="{{ __('Current status') }}" placeholder="{{ __('What are you up to?') }}" aria-describedby="share-button" type="text"> + + + @error ('status') + + @enderror +
+ +

{{ __('My Feed') }}

+ +
+ + @if ($loading) +
+ + {{ __('Fetching your feed...') }} +
+ @else +
+ @forelse ($posts as $post) +
+
+
+ + + +
+ +
+ + +

“{{ $post->content }}”

+ +
+ {{ date('n/j/Y \a\t g:i A', strtotime($post->created_at)) }} + +
+ + +
+
+
+
+
+ @empty +
+ +

{{ __('Your feed is empty') }}

+

{{ __('You might want to make some friends...') }}

+
+ @endforelse +
+ @endif +
diff --git a/resources/views/livewire/dashboard/recently-played-games.blade.php b/resources/views/livewire/dashboard/recently-played-games.blade.php new file mode 100644 index 0000000..ab68dc2 --- /dev/null +++ b/resources/views/livewire/dashboard/recently-played-games.blade.php @@ -0,0 +1,7 @@ +
+
+
+ {{ __('Loading...') }} +
+
+
diff --git a/resources/views/livewire/develop/assets.blade.php b/resources/views/livewire/develop/assets.blade.php new file mode 100644 index 0000000..a72edd1 --- /dev/null +++ b/resources/views/livewire/develop/assets.blade.php @@ -0,0 +1,55 @@ +
+
+
+
+ Loading... +
+
+
+
+ @if ($selected_page && $selected_page->name == 'Games') + + @endif + @if (count($assets) > 0) + @foreach ($assets as $asset) +
+
+
+ + {{ $asset->name }} + +
+
+
+
+

{{ $asset->name }}

+

Created: {{ date('n/j/Y \a\t g:i A', strtotime($asset->created_at)) }}

+

Last updated: {{ date('n/j/Y \a\t g:i A', strtotime($asset->updated_at)) }}

+
+
+ +
+
+
+
+
+ @endforeach + @else +
+ +

{{ __('You haven\'t created any :asset_type_plural yet', ["asset_type_plural" => $selected_type ? Str::plural(__($selected_type->fullname())) : __($selected_page->name)]) }}

+

{{ __('Creating one is quick and easy!') }}

+
+ @endif +
+
diff --git a/resources/views/livewire/develop/create.blade.php b/resources/views/livewire/develop/create.blade.php new file mode 100644 index 0000000..4eb71c2 --- /dev/null +++ b/resources/views/livewire/develop/create.blade.php @@ -0,0 +1,42 @@ +
+

{{ __('Create :asset_type', ['asset_type' => __($selected_type->fullname())]) }}

+
+ @csrf + +
+ +
+ $errors->first('asset_file')]) id="asset-file"> +
+ + Uploading, please wait... (%) +
+ @error ('asset_file') + + @enderror +
+
+ +
+ +
+ $errors->first('asset_name')]) id="asset-name"> + @error ('asset_name') + + @enderror +
+
+ + @error ('asset_error') + + @enderror + + +
+
diff --git a/resources/views/livewire/develop/panel.blade.php b/resources/views/livewire/develop/panel.blade.php new file mode 100644 index 0000000..4b6e23f --- /dev/null +++ b/resources/views/livewire/develop/panel.blade.php @@ -0,0 +1,38 @@ +
+
+ + +
+
+
+
+
+ Loading... +
+
+
+
+ @if ($selected_type && $selected_type->isDevelopCreatable()) + +
+ @endif + +
+
+
+
+
diff --git a/resources/views/livewire/forum/create.blade.php b/resources/views/livewire/forum/create.blade.php new file mode 100644 index 0000000..a573dbb --- /dev/null +++ b/resources/views/livewire/forum/create.blade.php @@ -0,0 +1,3 @@ +
+ {{-- Success is as dangerous as failure. --}} +
diff --git a/resources/views/livewire/forum/replies.blade.php b/resources/views/livewire/forum/replies.blade.php new file mode 100644 index 0000000..f0e2db5 --- /dev/null +++ b/resources/views/livewire/forum/replies.blade.php @@ -0,0 +1,42 @@ +
+
+ @foreach ($replies as $reply) +
+
+
+ {{ __('Reply') }} — {{ __('Posted at :date', ['date' => date('F j, Y, g:i a', strtotime($thread->created_at))]) }} +
+
+ @if ($thread->author == Auth::user() || Auth::user()->may(Forums::roleset(), Forums::GLOBAL_EDIT_POSTS)) + {{ __('Edit') }} + @endif + @may (Forums::roleset(), Forums::GLOBAL_DELETE_POSTS) + + @endmay +
+
+
+
+
+ +
+ {{ $reply->author->username }} +

Joined: {{ date('F j Y', strtotime($reply->author->created_at)) }}
Posts: {{ $reply->author->threads->count() + $reply->author->replies->count() }}

+
+
+
+ {{ $reply->body }} +
+
+
+
+
+ @endforeach +
+ +
+ {{ $replies->links() }} +
+
diff --git a/resources/views/livewire/forum/thread.blade.php b/resources/views/livewire/forum/thread.blade.php new file mode 100644 index 0000000..e73de93 --- /dev/null +++ b/resources/views/livewire/forum/thread.blade.php @@ -0,0 +1,53 @@ +
+
+ +
+ +
+
+
+
+ {{ __('Thread') }} — {{ __('Posted at :date', ['date' => date('F j, Y, g:i a', strtotime($thread->created_at))]) }} +
+
+ @may (Forums::roleset(), Forums::CREATE_REPLIES) + @if (!$thread->locked) + {{ __('Reply') }} + @endif + @endmay + @if ($thread->author == Auth::user() || Auth::user()->may(Forums::roleset(), Forums::GLOBAL_EDIT_POSTS)) + {{ __('Edit') }} + @endif + @may (Forums::roleset(), Forums::GLOBAL_DELETE_POSTS) + + @endmay +
+
+
+
+
+ +
+ {{ $thread->author->username }} +

Joined: {{ date('F j Y', strtotime($thread->author->created_at)) }}
Posts: {{ $thread->author->threads->count() + $thread->author->replies->count() }}

+
+
+
+ {{ $thread->body }} +
+
+
+
+
+
+ + +
\ No newline at end of file diff --git a/resources/views/livewire/forum/threads.blade.php b/resources/views/livewire/forum/threads.blade.php new file mode 100644 index 0000000..1263195 --- /dev/null +++ b/resources/views/livewire/forum/threads.blade.php @@ -0,0 +1,34 @@ + \ No newline at end of file diff --git a/resources/views/livewire/games/search.blade.php b/resources/views/livewire/games/search.blade.php new file mode 100644 index 0000000..2fb276d --- /dev/null +++ b/resources/views/livewire/games/search.blade.php @@ -0,0 +1,75 @@ +
+
+
+ {{ __('Sorted by:') }} + + + + + + {{ __('Genres:') }} + + + + +
+ +
+ + +
+
+ Games +
+
+ PBS +
+
+
+
+
diff --git a/resources/views/livewire/item/comments.blade.php b/resources/views/livewire/item/comments.blade.php new file mode 100644 index 0000000..a3c72cc --- /dev/null +++ b/resources/views/livewire/item/comments.blade.php @@ -0,0 +1,11 @@ +
+

{{ __('Comments') }}

+
+
+
+ + +
+
+
+
diff --git a/resources/views/livewire/item/configure.blade.php b/resources/views/livewire/item/configure.blade.php new file mode 100644 index 0000000..dc75da0 --- /dev/null +++ b/resources/views/livewire/item/configure.blade.php @@ -0,0 +1,84 @@ +
+
+ @csrf + +
+ + $errors->first('name')]) id="name" value="{{ $this->name }}"> + + @error ('name') + + @enderror +
+ +
+ + + + @error ('description') + + @enderror +
+ +
+ + + + @error ('genre') + + @enderror +
+ + @if ($this->asset->type->isSellable()) +
+
+ $errors->first('sell')]) type="checkbox" id="sell" @checked($this->sell) x-model="show"> + + + @error ('sell') + + @enderror +
+ + @if (!$this->asset->type->isFree()) +
+ + $errors->first('price')]) id="price" value="{{ $this->price }}" @checked($this->sell)> + + @error ('price') + + @enderror +
+ @endif +
+ @endif + +
+ $errors->first('comments')]) type="checkbox" id="comments" @checked($this->comments)> + + + @error ('comments') + + @enderror +
+ + + {{ __('Cancel') }} +
+
diff --git a/resources/views/livewire/layout/search-bar.blade.php b/resources/views/livewire/layout/search-bar.blade.php new file mode 100644 index 0000000..3a8b048 --- /dev/null +++ b/resources/views/livewire/layout/search-bar.blade.php @@ -0,0 +1,48 @@ +
+
+
+ +
+ @if (!empty($search)) + + @endif +
+
diff --git a/resources/views/livewire/users/friend-button.blade.php b/resources/views/livewire/users/friend-button.blade.php new file mode 100644 index 0000000..ed82b05 --- /dev/null +++ b/resources/views/livewire/users/friend-button.blade.php @@ -0,0 +1,14 @@ +
+ @if (is_null($friendship)) + + @elseif ($friendship->accepted) + + @elseif (Auth::user()->id == $friendship->receiver_id) +
+ + +
+ @else + + @endif +
diff --git a/resources/views/livewire/users/search.blade.php b/resources/views/livewire/users/search.blade.php new file mode 100644 index 0000000..37c56a6 --- /dev/null +++ b/resources/views/livewire/users/search.blade.php @@ -0,0 +1,65 @@ +
+ @if (empty(trim($search))) +

{{ __('People') }}

+ @else +

{{ __('People Results for') }} {{ $search }}

+ @endif + +
+ + +
+ +
+ @if (count($users) > 0) + {{ __(':from - :to of :total', ['from' => $users->firstItem(), 'to' => $users->lastItem(), 'total' => $users->total()]) }} +
+ @foreach ($users as $user) +
+
+
+
+
+ + + @if ($user->isOnline('website')) +
+ @endif +
+
+
+ {{ $user->username }} + + @if ($user->hasChangedUsername()) + {{ $user->mostRecentUsername() }} + @endif + + @if ($user->isOnline('website')) + {{ __('last seen recently') }} + @else + {{ __('last seen :time ago', ['time' => seconds2human($user->lastSeenRelative('website'), true)]) }} + @endif +
+
+ + @if (Auth::user()->id != $user->id) + + @else + {{ __('This is you') }} + @endif +
+
+ @endforeach +
+
+ {{ $users->links() }} +
+ @else +
+ +

{{ __('No results found') }}

+

{{ __('There were no matches available for your query') }}

+
+ @endif +
+
diff --git a/resources/views/my/account.blade.php b/resources/views/my/account.blade.php new file mode 100644 index 0000000..efd8e0b --- /dev/null +++ b/resources/views/my/account.blade.php @@ -0,0 +1,211 @@ + +
+ @if (session('status')) + + @endif + +
+ +
+ {{ Auth::user()->username }} +
+ + {{ config('tadah.currency_name') }} + |{{ __('friends') }} + |{{ __('visits') }} + +
+
+
+
+ + +
+
+
+
+

{{ __('Profile Information') }}

+ {{ __('Update your profile information and email address.') }} +
+
+
+ + +
+ +
+ + +
+ + +
+
+ + @if (config('tadah.discord_required')) +
+ +

{{ __('Link Discord Account') }}

+ {{ __('Link your Discord account to :project to access additional features.', ['project' => config('app.name')]) }} +
+
+ @isset ($discord_user) +
+ + +
+

{{ $discord_user->username }}#{{ $discord_user->discriminator }}

+
{{ __('Account linked on :date', ['date' => Auth::user()->discord_linked_at->format('M d, Y')]) }}
+ {{ $discord_user->id }} +
+ +
+
+ @csrf + {{ __('Unlink') }} +
+
+
+ @else +

{{ __('You have not linked a Discord account.') }}

+

{{ __('By linking a Discord account, you will be able to play games on :project, be automatically verified on the :project Discord, post on the forums, add friends, and participate in the :project economy.', ['project' => config('app.name')]) }}

+ {{ __('Connect Discord Account') }} + @endisset +
+
+ @endif +
+ +
+

{{ __('Update Password') }}

+ {{ __('Ensure your account is using a long, random password to stay secure.') }} + +
+ +
+ TODO +
+ +
+

{{ __('Two Factor Authentication') }}

+ {{ __('Add additional security to your account using two factor authentication.') }} +
+
+
+ @if (Auth::user()->two_factor_secret) +

{{ __('Two factor authentication is enabled!') }}

+ @else +

{{ __('Two factor authentication is disabled.') }}

+ @endif +

{{ __('Two factor authentication requires you to take an extra step when logging in to your :project account. Some actions on :project may require you to have two factor authentication enabled.', ['project' => config('app.name')]) }}

+ +
+ @if (Auth::user()->two_factor_secret) + +
@csrf
+ @else +
@csrf
+ @endif +
+
+
+
+ +
+ +

{{ __('Sessions') }}

+ {{ __('This is a list of devices that have logged into your account. Revoke any sessions that you do not recognize.') }} +
+
+ + + @foreach ($sessions as $session) + + @endforeach +
+
+
+ + @may (Users::roleset(), Users::VIEW_BAN_HISTORY) +
+ +
+ @endmay +
+
+
+
+ + + + @if (Auth::user()->two_factor_secret) + + @endif +
+
diff --git a/resources/views/my/components/dashboard/news.blade.php b/resources/views/my/components/dashboard/news.blade.php new file mode 100644 index 0000000..b8767e0 --- /dev/null +++ b/resources/views/my/components/dashboard/news.blade.php @@ -0,0 +1 @@ +{{ __('News has not been implemented yet.') }} diff --git a/resources/views/my/components/session.blade.php b/resources/views/my/components/session.blade.php new file mode 100644 index 0000000..576dc09 --- /dev/null +++ b/resources/views/my/components/session.blade.php @@ -0,0 +1,45 @@ +
+
isset($revokable)])> +
+
+ is_online($ping), 'text-secondary' => !is_online($ping)])> +
+ +
+ icon()]) data-bs-placement="bottom" data-bs-toggle="tooltip" title="{{ __(':browser on :platform', ['browser' => $agent->browser(), 'platform' => $agent->platform()]) }}"> +
+ +
+
+ @if ($location !== false) + {{ __(':region, :country', ['region' => $location->region, 'country' => $location->country]) }} + @else + {{ __('Unknown') }} + @endif + - + {{ $ip }} +
+ + @isset ($revokable) + @if (is_online($ping)) + {{ __('Last accessed recently') }} + @else + {{ __('Last accessed :time ago', ['time' => seconds2human(time() - $ping, true)]) }} + @endif + @else + {{ __('Your current session') }} + @endif +
+ + @isset ($revokable) +
+ +
+ @endisset +
+ + @isset ($revokable) + + @endisset +
+
diff --git a/resources/views/my/dashboard.blade.php b/resources/views/my/dashboard.blade.php new file mode 100644 index 0000000..8180d9a --- /dev/null +++ b/resources/views/my/dashboard.blade.php @@ -0,0 +1,31 @@ + +
+
+
+
+

{!! __(':greeting, :username!', compact('greeting', 'username')) !!}

+ +
+ +
+

{{ __(':project News', ['project' => config('app.name')]) }}

+ + +
+ +
+ +
+
+ +
+ +
+ +
+

{{ __('Recently Played Games') }}

+ +
+
+
+
diff --git a/resources/views/my/invites.blade.php b/resources/views/my/invites.blade.php new file mode 100644 index 0000000..1685b3e --- /dev/null +++ b/resources/views/my/invites.blade.php @@ -0,0 +1,99 @@ + +
+ @if (session()->has('success')) +
+ {{ session()->get('success') }} + +
+ @endif + + @if (session()->has('error')) +
+ {{ session()->get('error') }} + +
+ @endif + +
+

{{ __('Invite Keys') }}

+ @if (config('tadah.users_create_invite_keys')) +
+ +
+ @endif +
+ +
+ +

+ {{ __(':maximum keys can be created every :cooldown days. Creating a key costs :amount :currency.', ['cooldown' => config('tadah.user_maximum_keys_in_window'), 'maximum' => config('tadah.user_maximum_keys_in_window'), 'amount' => config('tadah.user_invite_key_cost'), 'currency' => config('tadah.currency_name')]) }} + + @if (config('tadah.discord_required')) + {{ __('You also need a Discord account.') }} + @endif +

+ +
+
+ {{ __('Keys') }} +
+
+ @if ($keys->total() == 0) + {{ __('You have not created any keys yet.') }} + @else +
+ + + + + + + + + + + @foreach ($keys as $key) + + + + + + + @endforeach + +
{{ __('Key') }}{{ __('Created') }}{{ __('Last Used') }}{{ __('Valid') }}
{{ $key->token }}{{ $key->created_at->format('m/d/y') }}{{ $key->updated_at->format('m/d/y') }}{!! $key->isValid() ? __('Valid') : __('Used') !!}
+
+ @endif +
+
+ + @if (config('tadah.users_create_invite_keys')) + + @endif + +
+ {{ $keys->links() }} +
+
+
diff --git a/resources/views/partials/footer.blade.php b/resources/views/partials/footer.blade.php new file mode 100644 index 0000000..294c1fd --- /dev/null +++ b/resources/views/partials/footer.blade.php @@ -0,0 +1,44 @@ + diff --git a/resources/views/partials/language-dropdown.blade.php b/resources/views/partials/language-dropdown.blade.php new file mode 100644 index 0000000..724365f --- /dev/null +++ b/resources/views/partials/language-dropdown.blade.php @@ -0,0 +1,10 @@ + diff --git a/resources/views/partials/navigation.blade.php b/resources/views/partials/navigation.blade.php new file mode 100644 index 0000000..6aa8b4a --- /dev/null +++ b/resources/views/partials/navigation.blade.php @@ -0,0 +1,124 @@ +
+ + + @if (Auth::check()) + + + @if (!is_null($alert = Cache::get('alert'))) +
+ @parsedown ($alert->text) +
+ @endisset + @endif +
diff --git a/resources/views/users/list.blade.php b/resources/views/users/list.blade.php new file mode 100644 index 0000000..6bdcda5 --- /dev/null +++ b/resources/views/users/list.blade.php @@ -0,0 +1,5 @@ + +
+ +
+
diff --git a/resources/views/users/profile.blade.php b/resources/views/users/profile.blade.php new file mode 100644 index 0000000..ca8719f --- /dev/null +++ b/resources/views/users/profile.blade.php @@ -0,0 +1,108 @@ + +
+
+
+
+

{{ Auth::user()->id == $user->id ? __('Your Profile') : __(':username\'s Profile', ['username' => $user->username]) }}

+
+ @if ($user->isOnline('website')) +

[ Online: Website ]

+ @else +

[ Offline ]

+ @endif + {{ $user->username }} +

{{ $user->blurb }}

+ @if (Auth::user()->id != $user->id) +
+ + +
+ @endif +
+
+
+

{{ __('Badges') }}

+
+
+ Loading... +
+
+
+
+

{{ __('Groups') }}

+
+
+ Loading... +
+
+
+
+

{{ __('Statistics') }}

+
+
+ {{ __('Joined:') }} +
+
+

{{ date('F j Y', strtotime($user->created_at)); }}

+
+
+
+
+

{{ __('Sets') }}

+
+
+ Loading... +
+
+
+
+
+
+

{{ __('Places') }}

+
+
+ Loading... +
+
+
+
+
+

{{ __('Friends') }}

+
+ @if (Auth::user()->id == $user->id) + {{ __('Edit') }} + @elseif ($num_friends > 0) + {{ __('See all :num_friends', compact('num_friends')) }} + @endif +
+
+
+
+ Loading... +
+
+
+
+
+

{{ __('Favorites') }}

+
+ +
+
+
+
+ Loading... +
+
+
+
+

{{ __('[insert ad]') }}

+
+
+
+
+
diff --git a/resources/xml/BodyColors.xml b/resources/xml/BodyColors.xml new file mode 100644 index 0000000..525f209 --- /dev/null +++ b/resources/xml/BodyColors.xml @@ -0,0 +1,17 @@ + + + null + nil + + + + + + Body Colors + + + + true + + + \ No newline at end of file diff --git a/resources/xml/Decal.xml b/resources/xml/Decal.xml new file mode 100644 index 0000000..5ca8021 --- /dev/null +++ b/resources/xml/Decal.xml @@ -0,0 +1,16 @@ + + null + nil + + + 5 + Decal + 20 + 0 + + + + true + + + diff --git a/resources/xml/Pants.xml b/resources/xml/Pants.xml new file mode 100644 index 0000000..f3dfaa2 --- /dev/null +++ b/resources/xml/Pants.xml @@ -0,0 +1,13 @@ + + null + nil + + + + + + Pants + true + + + diff --git a/resources/xml/Shirt.xml b/resources/xml/Shirt.xml new file mode 100644 index 0000000..b485875 --- /dev/null +++ b/resources/xml/Shirt.xml @@ -0,0 +1,13 @@ + + null + nil + + + + + + Shirt + true + + + diff --git a/resources/xml/TShirt.xml b/resources/xml/TShirt.xml new file mode 100644 index 0000000..9c1217a --- /dev/null +++ b/resources/xml/TShirt.xml @@ -0,0 +1,13 @@ + + null + nil + + + + + + Shirt Graphic + true + + + diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..51535fb --- /dev/null +++ b/routes/api.php @@ -0,0 +1,12 @@ +group(function() { + Route::post('/{uuid}/log', [Controllers\Arbiter\LogController::class, 'log']); + Route::post('/{uuid}/resources', [Controllers\Arbiter\LogController::class, 'resources']); + Route::get('/{uuid}/status', Controllers\Arbiter\StateController::class); +}); diff --git a/routes/auth.php b/routes/auth.php new file mode 100644 index 0000000..db0491a --- /dev/null +++ b/routes/auth.php @@ -0,0 +1,70 @@ +group(function() { + Route::get('/login', 'create')->middleware(['guest'])->name('login'); + Route::post('/login', 'store')->middleware(['guest', 'throttle:login']); + Route::post('/logout', 'destroy')->name('logout'); +}); + +// Registration +if (Features::enabled(Features::registration())) +{ + Route::get('/register', [Fortify\RegisteredUserController::class, 'create'])->middleware(['guest'])->name('register'); +} + +// Password resets +if (Features::enabled(Features::resetPasswords())) +{ + Route::controller(Controllers\Auth\PasswordResetController::class)->middleware(['guest'])->group(function() { + Route::get('/forgot-password', 'request')->name('password.request'); + Route::post('/forgot-password', 'create')->name('password.email'); + Route::post('/reset-password', 'reset')->middleware(['throttle:5,20'])->name('password.update'); + Route::get('/reset-password/{token}', 'view')->name('password.reset'); + }); +} + +// Email verification +if (Features::enabled(Features::emailVerification()) && config('app.email_verification')) +{ + Route::middleware(['auth'])->group(function() { + Route::get('/email/verify', [Fortify\EmailVerificationPromptController::class, '__invoke'])->name('verification.notice'); + Route::get('/email/verify/{id}/{hash}', [Fortify\VerifyEmailController::class, '__invoke'])->middleware(['signed', 'throttle:6,1'])->name('verification.verify'); + Route::post('/email/verification-notification', Controllers\Auth\EmailVerificationNotificationController::class)->middleware(['throttle:6,1'])->name('verification.send'); + }); +} + +// Password confirmation +// use by ->middleware('password.confirm') +Route::controller(Fortify\ConfirmablePasswordController::class)->middleware(['auth'])->group(function() { + Route::get('/user/confirm-password', 'show')->name('password.confirm'); + Route::post('/user/confirm-password', 'store'); +}); + +// Two factor authentication +if (Features::enabled(Features::twoFactorAuthentication())) +{ + Route::controller(Fortify\TwoFactorAuthenticatedSessionController::class)->middleware(['guest'])->group(function() { + Route::get('/challenge', 'create')->name('two-factor.login'); + Route::post('/challenge', 'store')->middleware(['throttle:two-factor']); + }); + + Route::controller(Fortify\TwoFactorAuthenticationController::class)->middleware(['auth', 'password.confirm'])->group(function() { + Route::post('/my/security/2fa', 'store')->name('two-factor.enable'); + Route::delete('/my/security/2fa', 'destroy')->name('two-factor.disable'); + }); + + Route::middleware(['auth', 'password.confirm'])->group(function() { + Route::get('/my/security/2fa/qr', [Fortify\TwoFactorQrCodeController::class, 'show'])->name('two-factor.qr-code'); + + Route::controller(Fortify\RecoveryCodeController::class)->group(function() { + Route::get('/my/security/2fa/recovery', 'index')->name('two-factor.recovery-codes'); + Route::post('/my/security/2fa/recovery', 'store'); + }); + }); +} diff --git a/routes/channels.php b/routes/channels.php new file mode 100644 index 0000000..eccdd16 --- /dev/null +++ b/routes/channels.php @@ -0,0 +1,17 @@ +environment() == 'local') +{ + $validators = Router::getValidators(); + $validators[] = new CaseInsensitiveUriValidator(); + + Router::$validators = array_filter($validators, function ($validator) { + return get_class($validator) != UriValidator::class; + }); +} + +/* + * TODO: Add these routes + * + * API Endpoints: + * /Asset/Default.ashx + * /Asset/CharacterFetch.ashx + * /Asset/BodyColors.ashx + * + * /Thumbs/Avatar.ashx + * /Thumbs/Asset.ashx + * + * /Game/PlaceLauncher.ashx + * /Game/ClientPresence.ashx + * /Game/PlaceVisit.ashx + * /Game/PlaceSpecificScript.ashx + * /Game/Knockouts.ashx + * /Game/Wipeouts.ashx + * /Game/GetAuthTicket + * /Game/Tools/ThumbnailAsset.ashx + * /Game/Tools/InsertAsset.ashx + * /Game/Badge/AwardBadge.ashx + * /Game/Badge/HasBadge.ashx + * /Game/Badge/IsBadgeDisabled.ashx + * + * /ReportAbuse/InGameChatHandler.ashx + * + * /Friend/CreateFriend + * /Friend/BreakFriend + * /Friend/AreFriends + * + * /Login/Negotiate.ashx + * + * /Error/Dmp.ashx + * + * Webpage Endpoints: + * /Game/Help.aspx + * + * /ReportAbuse/InGameChat.aspx + * + * /Build/Default.aspx (/develop) + * + * /IDE/Landing.aspx (/ide/welcome) + * /IDE/ClientToolbox.aspx + * /IDE/Welcome + * + * /UI/Save.aspx + * + * /UploadMedia/PostImage.aspx + * /UploadMedia/UploadVideo.aspx + */ + + +Route::controller(Controllers\Roblox\StaticAssetController::class)->group(function() { + Route::get('/Asset/GetScriptState.ashx', 'getScriptState'); + Route::get('/Game/KeepAlivePinger.ashx', 'keepAlivePinger'); + Route::get('/Game/MachineConfiguration.ashx', 'respondWithOK'); + Route::get('/Game/ChatFilter.ashx', 'chatFilter'); + Route::get('/Error/Dmp.ashx', 'respondWithOK'); +}); + +Route::prefix('Game')->group(function() { + Route::middleware(['web'])->controller(Controllers\Roblox\OnlinePlayController::class)->group(function() { + Route::get('/Join.ashx', 'multiplayer')->name('client.online.join'); + Route::get('/GroupBuild.ashx', 'multiplayer')->name('client.online.group-build'); + + Route::get('/Visit.ashx', 'singleplayer')->name('client.online.visit'); + Route::get('/PlaySolo.ashx', 'singleplayer')->name('client.online.solo'); + }); + + Route::controller(Controllers\Roblox\StudioController::class)->group(function() { + Route::get('/Studio.ashx', 'studio'); + Route::get('/Edit.ashx', 'edit'); + }); + + Route::controller(Controllers\Roblox\MiscellaneousScriptController::class)->group(function() { + Route::get('/Gameserver.ashx', 'gameserver'); + Route::get('/LoadPlaceInfo.ashx', 'loadPlaceInfo'); + }); + + Route::get('/GetCurrentUser.ashx', function () { + return response()->text('0'); + }); + + Route::get('/LuaWebService/HandleSocialRequest.ashx', function () { + return response()->text(''); + }); + + Route::get('/LoadPlaceInfo.ashx', function () { + return response()->text(''); + }); +}); + +Route::prefix('Setting')->group(function() { + Route::controller(Controllers\Roblox\FastFlagController::class)->group(function() { + Route::get('/QuietGet/ClientAppSettings', 'clientAppSettings'); + Route::get('/QuietGet/StudioAppSettings', 'clientAppSettings'); + Route::get('/QuietGet/ClientSharedSettings', 'clientAppSettings'); + Route::get('/QuietGet/RCCService', 'clientAppSettings'); + }); +}); + +Route::get('/studio/e.png', function () { + return response()->text(''); +}); + +Route::get('/GetAllowedMD5Hashes', function () { + return response()->json([]); +}); + +Route::get('/GetAllowedSecurityVersions', function () { + return response()->json([]); +}); + +Route::get('/universes/validate-place-join', function () { + return response()->text('true'); +}); + +Route::get('//game/players/{id}/', function () { + return response()->json([ + 'ChatFilter' => 'whitelist' + ]); +}); diff --git a/routes/web.php b/routes/web.php new file mode 100644 index 0000000..503c868 --- /dev/null +++ b/routes/web.php @@ -0,0 +1,131 @@ +group(function() { + Route::get('/', 'landing')->middleware(['guest'])->name('landing'); + Route::get('/language/{locale}', 'language')->name('language'); + Route::get('/document/{document}', 'document')->name('document'); +}); + +require __DIR__ . '/auth.php'; + +// Admin panel ("/admin/*") +Route::middleware(['auth', 'admin'])->prefix('admin')->group(function() { + Route::get('/', Controllers\Admin\PanelController::class)->name('admin'); + Route::get('/alert', Controllers\Admin\AlertController::class)->name('admin.alert'); + + Route::controller(Controllers\Admin\UserProfileController::class)->group(function() { + Route::get('/user/profile', 'view')->name('admin.user.profile'); + Route::post('/user/profile', 'load'); + }); + + Route::controller(Controllers\Admin\PermissionsController::class)->group(function() { + Route::get('/permissions', 'view')->name('admin.permissions'); + Route::post('/permissions', 'store'); + }); + + Route::prefix('game-server')->group(function() { + Route::controller(Controllers\Admin\GameServerController::class)->group(function() { + Route::get('/state', 'state'); + Route::get('/all', 'all')->name('admin.game-server.all'); + Route::get('/create', 'store')->name('admin.game-server.create'); + Route::get('/{id}', 'view')->name('admin.game-server.view'); + Route::get('/{id}/manage', 'manage')->name('admin.game-server.manage'); + Route::post('/{id}/logs', 'logs'); + }); + }); + + Route::prefix('ban')->group(function () { + Route::get('/', Controllers\Admin\BanController::class)->name('admin.ban'); + Route::get('/ip', Controllers\Admin\IpAddressBanController::class)->name('admin.ban.ip'); + Route::post('/information', Controllers\Admin\BanInformationController::class); + }); + + Route::controller(Controllers\Admin\ActionLogController::class)->group(function() { + Route::get('/log', 'view')->name('admin.action-log'); + }); +}); + +// Authenticated Features ("/my/*", "/discord/*", etc) +Route::middleware(['auth'])->group(function() { + Route::get('/heartbeat', [Controllers\Account\SettingsController::class, 'heartbeat']); + + if (config('tadah.discord_required')) + { + Route::controller(Controllers\Account\DiscordController::class)->prefix('discord')->group(function() { + Route::get('/callback', 'callback')->name('account.discord.callback'); + Route::get('/link', 'redirect')->name('account.discord.redirect'); + Route::get('/unlink', 'unlink')->name('account.discord.unlink'); + }); + } + + Route::prefix('my')->group(function() { + Route::get('/dashboard', Controllers\Account\DashboardController::class)->name('dashboard'); + Route::post('/revoke-session', Controllers\Account\SessionController::class); + + Route::controller(Controllers\Account\SettingsController::class)->group(function() { + Route::get('/account', 'view')->name('account'); + Route::get('/update-email', 'updateEmail')->middleware('password.confirm')->name('account.email.update'); + Route::post('/update-email', 'updateEmail')->middleware('password.confirm'); + }); + + Route::controller(Controllers\Account\InviteKeyController::class)->group(function() { + Route::get('/invites', 'view')->name('invites'); + Route::post('/invites', 'purchase'); + }); + }); + + // Ban note + Route::controller(Controllers\Account\DisabledAccountController::class)->group(function() { + Route::get('/disabled', 'view')->name('account.disabled'); + Route::post('/disabled/unban', 'store')->name('account.unban'); + }); +}); + +// Games ("/games/*") +Route::middleware(['auth'])->group(function() { + Route::prefix('games')->group(function() { + Route::get('/', [Controllers\GamesController::class, 'list'])->name('games'); + }); + + Route::prefix('develop')->group(function() { + Route::get('/', [Controllers\DevelopController::class, 'index'])->name('develop'); + }); +}); + +// Catalog ("/catalog/*") +Route::prefix('catalog')->middleware(['auth'])->group(function() { + Route::get('/', [Controllers\CatalogController::class, 'index'])->name('catalog'); + Route::get('/{id}', [Controllers\ItemController::class, 'view'])->name('item.view'); + Route::get('/{id}/configure', [Controllers\ItemController::class, 'configure'])->name('item.configure'); +}); + +// Users ("/users/*", "/people") +Route::middleware(['auth'])->group(function() { + Route::get('/people', [Controllers\UsersController::class, 'list'])->name('users'); + + Route::prefix('users')->group(function() { + Route::get('/{id}/profile', [Controllers\UsersController::class, 'profile'])->name('users.profile'); + }); +}); + +// Forums ("/forum/*") +Route::prefix('forum')->middleware(['auth'])->group(function() { + Route::get('/', [Controllers\ForumController::class, 'index'])->name('forum'); + Route::get('/category/{id}', [Controllers\ForumController::class, 'category'])->name('forum.category'); + Route::get('/thread/{id}', [Controllers\ForumController::class, 'thread'])->name('forum.thread'); +}); diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100644 index 0000000..414d8f0 --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,4 @@ +* +!public/ +!keys/ +!.gitignore diff --git a/storage/app/keys/.gitignore b/storage/app/keys/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/keys/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/public/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/debugbar/.gitignore b/storage/debugbar/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/debugbar/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore new file mode 100644 index 0000000..05c4471 --- /dev/null +++ b/storage/framework/.gitignore @@ -0,0 +1,9 @@ +compiled.php +config.php +down +events.scanned.php +maintenance.php +routes.php +routes.scanned.php +schedule-* +services.json diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore new file mode 100644 index 0000000..01e4a6c --- /dev/null +++ b/storage/framework/cache/.gitignore @@ -0,0 +1,3 @@ +* +!data/ +!.gitignore diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/webpack.mix.js b/webpack.mix.js new file mode 100644 index 0000000..9a07170 --- /dev/null +++ b/webpack.mix.js @@ -0,0 +1,19 @@ +const mix = require('laravel-mix') + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel applications. By default, we are compiling the CSS + | file for the application as well as bundling up all the JS files. + | + */ + +mix.js('resources/js/app.js', 'public/js') + .sass('resources/sass/app.scss', 'public/css') + +if (mix.inProduction()) { + mix.version() +} \ No newline at end of file